如何在ant中排除javac任务中的源代码?
我的build.xml中包含以下内容:如何在ant中排除javac任务中的源代码?,java,ant,javac,Java,Ant,Javac,我的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/
<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/qux/dontwant/
由该任务编译(但我确实希望在该任务中编译${src.dir}/com/foo/bar/qux/
下的所有其他内容)
我是一个完全的ant n00b,文档对我帮助不大。我看到有几个地方说有各种exclude/excludes元素/属性,但我能想到的每一个变化要么没有效果,要么导致错误,比如“blah不支持'exclude'属性”。试试看
<javac>
(...>
<exclude name="${src.dir}/com/foo/bar/quux/dontwant/*" />
(...)
</javac>
(...>
(...)
我不确定其余的部分,但是
嵌套元素应该可以在任务中工作。请参阅下面的第六部分
附录:中讨论了模式,包括**
符号
...
...
一些人建议使用
。这与我指定任务的方式不符。垃圾神的答案与此相关,这让我知道了如何重新构建我的任务规范
我的问题似乎与我指定源文件的方式有关。而不是在
中使用
元素,如下所示:
<src>
<pathelement location="${src.dir}/com/foo/bar/baz/" />
<pathelement location="${src.dir}/com/foo/bar/quux/" />
</src>
<src path="${src.dir}" />
<include name="com/foo/bar/baz/**" />
<include name="com/foo/bar/quux/**" />
我切换到使用带有路径的单个
,然后使用一组
元素,如下所示:
<src>
<pathelement location="${src.dir}/com/foo/bar/baz/" />
<pathelement location="${src.dir}/com/foo/bar/quux/" />
</src>
<src path="${src.dir}" />
<include name="com/foo/bar/baz/**" />
<include name="com/foo/bar/quux/**" />
这看起来功能相同,但与
的使用兼容:
<exclude name="${src.dir}/com/foo/bar/quux/dontwant/**"/>
(事实上,我很惊讶最初的设计竟然奏效。)试试看
将不遵守{source.dir}
下的文件夹“test”
<javac destdir="${compile.dir}" ...>
<src path="${source.dir}" />
<exclude name="test/**"/>
</javac>
根据我的实验,您不应该包含要排除的文件的完整路径。 这个不行:
(...>
(...)
但这一个是:
(...>
(...)
如果您试图排除Java类,但Ant仍在尝试编译它们,那么这可能是因为代码中引用了这些类 如果A.java引用了B.java,并且您试图排除B.java,那么编译A.java也需要编译B.java
这是Java中使用接口的一个原因,因此您可以编译接口,而无需编译实现。不,这不起作用。它仍然尝试编译这些文件。除了额外的
*
,这与matiasf所说的是一样的。只是为了确保我还是尝试了,但它不起作用。您链接到的示例不过,帮助我找到了一些有效的方法。是的,@matiasf的+1。我还想展示
嵌套在javac
中,但不嵌套在
中。我添加了一个指向***
部分的链接,因为我在需要时永远找不到它。:-)
<javac>
(...>
<exclude name="com/foo/blah/blah1/FILENAME.java"/>
(...)
</javac>