当前位置: 首页 > 知识库问答 >
问题:

蚂蚁:如何停止复制

曾新立
2023-03-14

我有一个目录,里面有几个子目录。里面有文件。在那些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的结果的后续覆盖无法覆盖并产生错误?

请不要安特康比

共有1个答案

暨嘉
2023-03-14

您可以使用带有内置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

  • 问题内容: 我正在使用nodejs和mongoose —尝试在嵌套有递归函数和foreach的深层注释中找到特定的注释。有没有一种方法可以停止nodejs forEach?据我了解,每个forEach迭代都是一个函数,并且我不能只执行“ break”,而只能执行“ return”,但这不会停止foreach。 问题答案: 您无法打破。不过,我可以想到三种伪造方法。 1.The Ugly Way :

  • 进程线程 怪异盒模型 动画 绝对定位 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