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

Lau*_*ves 16 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/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>
Run Code Online (Sandbox Code Playgroud)

这主要是我想要做什么,但(作为注释说)我想要的文件中
${src.dir}/com/foo/bar/quux/dontwant/通过该任务编译(但我想一切${src.dir}/com/foo/bar/quux/此任务中进行编译).

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

Lau*_*ves 17

有几个人建议使用<exclude>.这不符合我的任务指定方式.trashgod的答案链接到本页的第六个例子,它让我了解了如何重构我的任务规范.

看起来我的问题与我指定源文件的方式有关.而不是使用a中的<pathelement>元素<src>,如下所示:

<src>
   <pathelement location="${src.dir}/com/foo/bar/baz/" />
   <pathelement location="${src.dir}/com/foo/bar/quux/" />
</src>
Run Code Online (Sandbox Code Playgroud)

我转而使用<src>带路径的单个,然后使用一组<include>元素,如下所示:

<src path="${src.dir}" />
<include name="com/foo/bar/baz/**" />
<include name="com/foo/bar/quux/**" />
Run Code Online (Sandbox Code Playgroud)

这似乎在功能上相同,但与以下内容的使用兼容<exclude>:

<exclude name="${src.dir}/com/foo/bar/quux/dontwant/**"/>
Run Code Online (Sandbox Code Playgroud)

(实际上,我很惊讶首先在那里工作的东西.)


May*_*gus 11

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

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

但是这个确实:

<javac>
(...>
   <exclude name="com/foo/blah/blah1/FILENAME.java"/>
(...)
</javac>
Run Code Online (Sandbox Code Playgroud)


mat*_*asf 5

尝试

<javac>
(...>
<exclude name="${src.dir}/com/foo/bar/quux/dontwant/*" />
(...)
</javac>
Run Code Online (Sandbox Code Playgroud)


tra*_*god 5

我不确定其余的,但<exclude/>嵌套元素应该在Javac任务中工作.见第六个例子.

附录:基于目录的任务**中讨论了模式,包括符号.

<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>
Run Code Online (Sandbox Code Playgroud)