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

2022-09-02 23:20:37

我的构建中有以下内容.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/${src.dir}/com/foo/bar/quux/

我是一个完整的蚂蚁n00b,文档对我没有多大帮助。我看到有几个地方说有各种排除/排除元素/属性,但我能想到的每个变化要么没有效果,要么导致错误,如“blah不支持'排除'属性”。


答案 1

有几个人建议使用 .这与指定任务的方式不起作用。trashgod的答案链接到此页面上的第六个示例,这使我对如何重构我的任务规范有了一个想法。<exclude>

看起来我的问题与我指定源文件的方式有关。而不是像这样在 中使用 中的元素:<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/**"/>

(实际上,我很惊讶一开始就存在的东西根本有效。


答案 2

在我的实验中,您不应包含要排除的文件的完整路径。这个不起作用:

<javac>
(...>
   <exclude name="${src.dir}/com/foo/blah/blah1/FILENAME.java"/>
(...)
</javac>

但是这个确实如此:

<javac>
(...>
   <exclude name="com/foo/blah/blah1/FILENAME.java"/>
(...)
</javac>

推荐