我的build.xml中有以下内容:
<target name="compile.baz" depends="init">
<javac destdir="${build.dir}/classes" debug="on">
<compilerarg value="-Xlint:deprecation"/>
<src>
<pathelement location="${src.dir}/com/foo/bar/baz/" />
<pathelement location="${src.dir}/com/foo/bar/quux/" />
<!-- Need to exclude ${src.dir}/com/foo/bar/quux/dontwant/ -->
</src>
<classpath refid="classpath.jars" />
</javac>
...
</target>
这主要做我想要的,除了(如评论所说)我不想要文件在
${src.dir}/com/foo/bar/quux/dontwant/
由此任务编译(但我确实希望<{1}}下的其他所有在此任务中编译。)
我是一个完整的蚂蚁n00b,文档对我没什么帮助。我看到有几个地方,它说有各种排除/排除元素/属性,但我能想到的每个变体都没有效果或导致错误,如“ blah 不支持'排除'属性'。
答案 0 :(得分:16)
有几个人建议使用<exclude>
。这不符合我的任务指定方式。 trashgod的回答链接到the sixth example on this page,这让我了解了如何重构我的任务规范。
看起来我的问题与我指定源文件的方式有关。而不是在<pathelement>
中使用<src>
元素,如下所示:
<src>
<pathelement location="${src.dir}/com/foo/bar/baz/" />
<pathelement location="${src.dir}/com/foo/bar/quux/" />
</src>
我转而使用带有路径的单个<src>
,然后使用一组<include>
元素,如下所示:
<src path="${src.dir}" />
<include name="com/foo/bar/baz/**" />
<include name="com/foo/bar/quux/**" />
这似乎功能相同,但与<exclude>
:
<exclude name="${src.dir}/com/foo/bar/quux/dontwant/**"/>
(实际上,我很惊讶,首先在那里工作的是什么。)
答案 1 :(得分:10)
从我的实验中,您不应该包含要排除的文件的完整路径。 这个不起作用:
<javac> (...> <exclude name="${src.dir}/com/foo/blah/blah1/FILENAME.java"/> (...) </javac>
但是这个确实:
<javac> (...> <exclude name="com/foo/blah/blah1/FILENAME.java"/> (...) </javac>
答案 2 :(得分:5)
尝试
<javac>
(...>
<exclude name="${src.dir}/com/foo/bar/quux/dontwant/*" />
(...)
</javac>
答案 3 :(得分:5)
我不确定其余内容,但<exclude/>
嵌套元素应该在Javac
任务中有效。请参见第六个example。
附录:Directory-based Tasks中讨论了包括**
符号在内的模式。
<target name="compile.baz" depends="init">
<javac destdir="${build.dir}/classes" debug="on">
<compilerarg value="-Xlint:deprecation"/>
<src>
<pathelement location="${src.dir}/com/foo/bar/baz/" />
<pathelement location="${src.dir}/com/foo/bar/quux/" />
</src>
<exclude name="${src.dir}/com/foo/bar/quux/dontwant/**"/>
...
</javac>
...
</target>
答案 4 :(得分:4)
如果您尝试排除Java类但Ant仍在尝试编译它们,那么这可能是由于您的代码中引用了这些类。
如果A.java有对B.java的引用并且你试图排除B.java,那么编译A.java也需要编译B.java。
这是Java中接口的一个原因,因此您可以编译接口而无需编译实现。
答案 5 :(得分:1)
试
{source.dir}
下的文件夹“test”将无法完成
<javac destdir="${compile.dir}" ...>
<src path="${source.dir}" />
<exclude name="test/**"/>
</javac>