我有以下ant构建目标:
<target name="analyze">
<script language="javascript">
<![CDATA[
importPackage(java.lang);
var path = project.getProperty("PROJECT_HOME") + "/oms";
System.out.println("path = " +path);
]]>
]]>
</script>
</target>
我想以递归的方式查找目录中的所有文件,如果它们结束。java
将它们打印出来。这可能吗?
答案 0 :(得分:10)
Ant script
task docs中有一个例子基本上就是这样做的。这是一个简化版本:
<script language="javascript">
<![CDATA[
importClass(java.io.File);
fs = project.createDataType("fileset");
dir = "src";
fs.setDir( new File( dir ) );
fs.setIncludes( "**/*.java" );
// create echo Task via Ant API
echo = project.createTask("echo");
// iterate over files found.
srcFiles = fs.getDirectoryScanner( project ).getIncludedFiles( );
for ( i = 0; i < srcFiles.length; i++ ) {
var filename = srcFiles[i];
// use echo Task via Ant API
echo.setMessage( filename );
echo.perform( );
}]]>
</script>
这使用Ant FileSet来查找文件。这里在文件集上设置了包含规则,以便迭代器只返回找到的.java
文件 - 使用文件名上的字符串操作保存以丢弃任何其他文件。
如果需要设置排除规则,可以通过FileSet类的setExcludes()方法(实际上是AbstractFileset类)来设置。 请参阅docs for patterns以了解有关Ant通配符的更多信息。
答案 1 :(得分:4)
你也可以使用核心Ant任务,而不使用javascript:
<fileset dir="java" id="java.files.ref">
<include name="**/*.java"/>
</fileset>
<pathconvert pathsep="${line.separator}" property="java.files" refid="java.files.ref"/>
<echo>${java.files}</echo>