Задача Ant, которая обрабатывает несколько файлов - PullRequest
1 голос
/ 22 декабря 2009

в Ant Я хочу выполнить задачу Java для набора файлов. Я использую задачу Java для запуска Rhino, который запускает JS beautifier. Последнее работает без каких-либо проблем, за исключением того, что использование rhino + js может показаться немного неловким, чтобы иметь работающий JS beautifier / indenter. Но все найденные мной работающие JS-устройства написаны на JavaScript.

Я также хочу запустить jsmin для файлов, но как часть задачи распространения. Таким образом, та же проблема появится снова, например, запуск задачи Java для нескольких файлов. Реализация jsmin в java / JS является предпочтительной, поскольку она работает на всех платформах, на которых работает ant.

Я не могу найти общую задачу "foreach" в ant, которая обрабатывает набор файлов или подобную структуру. Я нашел в муравье муравья дополнительный пакет, который обеспечивает «foreach», но, поскольку он не входит в стандартные задачи ядра Ant, у меня возникает ощущение, что я на неправильном пути.

Задача exec может перебирать набор файлов, но я хочу запустить rhino внутри JVM или, по крайней мере, на разветвленной JVM. Но в крайнем случае, конечно, можно выполнить Java извне, возможно, это предпочтительный способ.

Ответы [ 2 ]

3 голосов
/ 22 декабря 2009

Ответ: ant-contrib .

В частности foreach Задание

1 голос
/ 15 марта 2012

Из моего ответа на https://stackoverflow.com/a/9715078/438319 Вот способ сделать это, используя javascript и задачу ant scriptdef, вам не нужен ant-contrib для работы этого кода, так как scriptdef является основной задачей ant.

<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>
...