Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ant中排除javac任务中的源代码?_Java_Ant_Javac - Fatal编程技术网

如何在ant中排除javac任务中的源代码?

如何在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/

我的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/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>