【问题标题】:Ant task that processes multiple files处理多个文件的 Ant 任务
【发布时间】:2009-12-22 16:23:04
【问题描述】:

在 Ant 中,我想在文件集上执行 Java 任务。我使用 Java 任务来运行运行 JS 美化器的 rhino。后面的工作没有任何问题,除了使用 rhino+js 来实际拥有一个工作的 JS 美化器/缩进器可能看起来有点尴尬。但是我发现的所有可用的 JS 美化器都是用 JavaScript 编写的。

我也想在文件上运行 jsmin,但作为分发任务的一部分。所以同样的问题会再次出现,例如在多个文件上运行 java 任务。首选 jsmin 的 java/JS 实现,因为它适用于所有运行 ant 的平台。

我在 ant 中找不到处理文件集或类似结构的通用“foreach”任务。我在 ant 上搜索了一个提供“foreach”的附加包,但由于它不是标准 ant 核心任务的一部分,我觉得我走错了路。

exec 任务可以遍历文件集,但我想在 JVM 内或至少在分叉的 JVM 上运行 rhino。但是作为最后的手段,当然可以在外部执行 java,也许这是首选方式。

【问题讨论】:

    标签: java ant exec loops


    【解决方案1】:

    答案是ant-contrib

    具体foreach任务

    【讨论】:

    • 好的,我发现 ant-contrib 列在 ant.apache.org 的“相关项目”下,所以我认为它是一个非常标准的插件,所以我会选择那个解决方案。
    【解决方案2】:

    来自我在https://stackoverflow.com/a/9715078/438319 的回答 这是使用 javascript 和 ant scriptdef 任务执行此操作的方法,由于 scriptdef 是核心 ant 任务,因此您不需要 ant-contrib 即可使此代码工作。

    <scriptdef name="bzip2-files" language="javascript">
    <element name="fileset" type="fileset"/>
    <![CDATA[
      importClass(java.io.File);
      filesets = elements.get("fileset");
    
      for (i = 0; i < filesets.size(); ++i) {
        fileset = filesets.get(i);
        scanner = fileset.getDirectoryScanner(project);
        scanner.scan();
        files = scanner.getIncludedFiles();
        for( j=0; j < files.length; j++) {
    
            var basedir  = fileset.getDir(project);
            var filename = files[j];
            var src = new File(basedir, filename);
            var dest= new File(basedir, filename + ".bz2");
    
            bzip2 = self.project.createTask("bzip2");        
            bzip2.setSrc( src);
            bzip2.setDestfile(dest ); 
            bzip2.execute();
        }
      }
    ]]>
    </scriptdef>
    
    <bzip2-files>
        <fileset id="test" dir="upstream/classpath/jars/development">
                <include name="**/*.jar" />
        </fileset>
    </bzip2-files>
    

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 2015-08-03
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多