0

如何使用 Apache Ant 为目录中的每个文件运行 java 任务?看起来<apply>只允许运行可执行文件。

4

2 回答 2

0

将 apply 与可执行的 java.exe 一起使用,如下所示:

<apply executable="path/to/java.exe">
  <arg value="..."/>
  <arg value="..."/>
   ...
  <fileset dir="..."/>
   ...
</apply>

或使用一些提供for循环的AntAddon,即Flaka,请参阅Wiki示例/文件+目录
问题:编译我的java源代码后如何运行相应的类?
解决方案:遍历包含java源的文件集并使用replace函数调用相应的类文件。

<project xmlns:fl="antlib:it.haefelinger.flaka">

  <property name="srcroot" value="path/to/srcrootdir"/>
  <property name="classroot" value="path/to/classrootdir"/>

  <!-- seek all classes with main method -->
  <fileset dir="${srcroot}" includes="**/*.java" id="mainclasses">
    <contains text="public static void main"/>
  </fileset>

  <!-- iterate over classes with main method and call
       corresponding classfile -->
  <fl:for var="file" in="split('${toString:mainclasses}', ';')">
    <fl:let>
      ; strip the '.java' extension
      file = replace(file, '', '.java')
      ; replace fileseparator with '.'
      ; when running on windows you have to use :
      ; replace(file, '\.', '${file.separator}${file.separator}')
      file = replace(file, '\.', '${file.separator}')
      </fl:let>
    <fl:echo>
      starting => #{file} in ${classroot}..
    </fl:echo>
    <java classname="#{file}">
      <classpath>
       <!--
         when using a fileset you'll get a
         java.util.zip.ZipException because you're
         referencing not jarfiles but classfiles
         therefore you've to use pathelement location
       -->
       <pathelement location="${classroot}"/>
      </classpath>
    </java>
  </fl:for>

</project>
于 2013-05-09T11:12:42.600 回答
0

从这里使用<java>任务。但它不能将自身应用于文件集。 例子

于 2013-09-26T14:09:14.523 回答