如何获取javac任务以使用现有文件集?在我的build.xml中,我已经创建了多个文件集,以便在整个构建文件的多个位置使用。这里是他们如何定义:如何传递源代码列表以编译为javac任务?
<fileset dir = "${src}"
id = "java.source.all">
<include name = "**/*.java" />
</fileset>
<fileset dir = "${src}"
id = "java.source.examples">
<include name = "**/Examples/**/*.java" />
</fileset>
<fileset dir = "${src}"
id = "java.source.tests">
<include name = "**/Tests/*.java" />
</fileset>
<fileset dir = "${src}"
id = "java.source.project">
<include name = "**/*.java" />
<exclude name = "**/Examples/**/*.java" />
<exclude name = "**/Tests/**/*.java" />
</fileset>
我也使用macrodef编译java文件,所以javac任务不需要重复多次。宏是这样的:
<macrodef name="compile">
<attribute name="sourceref"/>
<sequential>
<javac srcdir = "${src}"
destdir = "${build}"
classpathref = "classpath"
includeantruntime = "no"
debug = "${debug}">
<filelist dir="." files="@{sourceref}" /> <-- email is about this
</javac>
</sequential>
我试图做的是只编译所需要的具体目标不在源树中的所有对象的类。而且不必每次都指定文件。这里是如何的目标定义:
<target name = "compile-examples"
depends = "init">
<compile sourceref = "${toString:java.source.examples}" />
</target>
<target name = "compile-project"
depends = "init">
<compile sourceref = "${toString:java.source.project}" />
</target>
<target name = "compile-tests"
depends = "init">
<compile sourceref = "${toString:java.source.tests}" />
</target>
正如你所看到的每个目标指定要编译为绝对文件名的西米,冒号分隔列表中的Java文件。唯一的问题是,javac不支持filelist。它也不支持文件集,路径或路径集。我试过使用,但它将列表视为单个文件名。我尝试的另一件事是直接发送引用(不使用toString)并使用但包含没有ref属性。
所以问题是:如何获得javac任务以使用对构建文件的另一部分中定义的文件集的引用?我对那些导致我有多个javac任务的解决方案不感兴趣。完全重写宏是可以接受的。如果目标间的冗余代码保持在最低限度,那么对目标的更改也是可以接受的。
p.s.另一个问题是文件集想要逗号分隔列表。我只是简单地搜索了一种将分号转换为逗号的方法,并没有找到办法做到这一点。
p.p.s.对不起,大喊大叫,但有些人太快发表回复,没有解决这个问题。
我有几个直接回复。有人说在文件列表中使用refid。这样做的确允许将参考传递给javadoc中的标签,而不是示例中使用的扩展参考。但它并没有解决问题,因为javadoc仍然拒绝filelist作为invallid。 另一个人建议将其更改为文件集并将其包装在src标记中。这允许使用文件集和refid,但是src想要一个目录列表,并且我有一个文件列表。 – 2010-03-11 16:52:45