我有一个目录,里面有几个子目录。里面有文件。在那些file1中。ext
是一个副本,存在于多个目录中。子目录和文件名在执行时显然是未知的。
-> bigdir --------> subdir1 ----------------> file1.ext --------> subdir2 ----------------> file1.ext --------> subdir3 ----------------> file2.ext
我试图使用flatte=“true”
将bigdir
的内容复制到smalldir
中,这样我得到的文件结构
-> smalldir ----------> file1.ext ----------> file2.ext
到目前为止,我有以下几点
<copy todir="${smalldir}" flatten="true" verbose="true">
<fileset dir="${bigdir}">
<include name="**/*.ext"/>
</fileset>
</copy>
这很好,达到了我想要的效果,但是,在bigdir
中有重复文件是一个错误。如果检测到bigdir
中有重复的文件名,我希望构建失败
我试图找到一种方法来制作<代码>
也许让每个复制的文件都是只读的,这样作为复制flatten=true
的结果的后续覆盖无法覆盖并产生错误?
请不要安特康比
您可以使用带有内置javascript引擎的script条件(参见ant手册条件)(从Java1.6.06开始包含,因此不需要额外的库或ant插件),如下所示:
<project>
<fileset dir="C:\tmp\bigdir" id="whatever"/>
<echo>${toString:whatever}</echo>
<fail message="Duplicate Filenames detected !!">
<condition>
<scriptcondition language="javascript">
<![CDATA[
importPackage(java.util);
var input = project.getProperty('toString:whatever').split(';');
// get basenames
for (var i = 0; i < input.length; i++) {
input[i]=input[i].substring(input[i].lastIndexOf("\\")+1);
}
var inputList = Arrays.asList(input);
// no duplicates in Hashset
var inputSet = new HashSet(inputList);
self.setValue(inputSet.size() < inputList.size());
]]>
</scriptcondition>
</condition>
</fail>
</project>
输出:
[echo] subdir1\foo.txt;subdir2\foo.txt;subdir3\foobar.txt
BUILD FAILED
C:\area51\AntTest\tryme.xml:7: Duplicate Filenames detected !!
--注释后编辑--
要显示重复项,请使用以下命令:
<project>
<fileset dir="C:\bigdir" id="whatever"/>
<echo>${toString:whatever}</echo>
<fail message="Duplicate Filenames detected !!">
<condition>
<scriptcondition language="javascript">
<![CDATA[
importPackage(java.util);
// get DirectoryScanner
ds = whatever.getDirectoryScanner(project);
// get the included files => array
checkFiles = ds.getIncludedFiles();
var checkSet = new HashSet();
var s = "";
for (j=0; j < checkFiles.length; j++) {
f = new java.io.File(whatever.getDir(project), checkFiles[j]);
if(!checkSet.add(f.getName()))
s += f + '\n';
}
println(s.substring(0, s.length - 1));
self.setValue(checkSet.size() < checkFiles.length);
]]>
</scriptcondition>
</condition>
</fail>
</project>
输出:
[echo] subdir1\foo.txt;subdir2\foo.txt;subdir3\foobar.txt;subdir3\subsubdir1\foo.txt;subdir3\subsubdir2\foobar.txt;subdir4\foobaz.txt
[fail] C:\bigdir\subdir2\foo.txt
[fail] C:\bigdir\subdir3\subsubdir1\foo.txt
[fail] C:\bigdir\subdir3\subsubdir2\foobar.txt
BUILD FAILED
顺便说一句,使用ant api通常要简单得多:
// get DirectoryScanner
ds = whatever.getDirectoryScanner(project);
// get the included files => array
checkFiles = ds.getIncludedFiles();
而不是:
var input = project.getProperty('toString:whatever').split(';');
// get basenames
for (var i = 0; i < input.length; i++) {
input[i]=input[i].substring(input[i].lastIndexOf("\\")+1);
}
正如我在第一个片段中使用的。
问题内容: 在定义顺序构建步骤时,我使用元素的属性。我最近看到了一个ant文件,其中的构建顺序是由目标内部的元素定义的。为了显示 : 与 两种方法之间是否有真正的区别?是其中之一更可取吗? 问题答案: 与这两种方法的主要区别在于目标是 始终 执行,而在目标只有在包含目标是执行。 一个澄清的例子: 在这里,将始终执行,而只有在定义时才会执行。 在此,仅当is即定义时才执行。
投的支付宝的c++研发岗,但c++的问题问的很少,都没现场做题 4.11 一面电话 半小时 面试官负责音视频处理 1. 给了一个循环次数很大的for循环,怎么优化? 按照数据划分和任务划分,能并行的就并行,或者openmp加个宏 2. python环境如何管理? docker和anaconda 3. linux如何窗口和会话分离,让程序在后台运行? tmux,或者bg,fg和jobs 4. cud
问题内容: 我正在尝试使用ant在命令行上生成apk。我可以使用ant clean,但是对于ant调试和ant release命令,我得到以下错误。 建立失败 C:\ Android \ sdk \ tools \ ant \ build.xml:649:执行此行时发生以下错误:C:\ Android \ sdk \ tools \ ant \ build.xml:694:执行失败:java.io
进程线程 怪异盒模型 动画 绝对定位 why React hook? useState原理 为什么不能if else里 微前端架构why 与spa区别 跨域
记录一下蚂蚁的秋招面试吧 9.19一面 1.JAVA八股 2.场景题,秒杀系统 3.实习经历 9.20二面 实习经历 9.28三面 视频面 只面了20分钟左右,主要还是问实习经历,有什么收获和难点,后续发展规划,无八股无手撕 希望三面顺利通过!!!!求一个hr面!!! 等一个hr面 10.10 hr面!!!!!希望顺利通过!!!! 10.9加了算法面 hr面完成,希望顺利oc!!! 许愿offer
蚂蚁二面的面试体验也太差了,面的产品岗。。 1⃣️约的10点电话面试,面试官迟到十分钟才打电话过来,也没有说明情况。 2⃣️面试过程中没有耐心,一直不耐烦地打断我的回答。 3⃣️个人观点很强烈,产品上的问题判断很主观,说abtest和用户研究的工作内容对产品没有用(我os:?)。 4⃣️反问的时候解答问题完全没有解答在点上。问岗位需要的能力模型是什么,回答曰“就是阿里p5的能力模型”。 如果我有罪