如何在Ant中使用javac排除源包?

时间:2010-02-13 13:20:05

标签: ant javac

我看了一堆不同的例子,尝试了几种变体,但似乎无法正常工作。看来你不能用javac排除整个目录,只能用文件排除,我想这意味着你不能指定包?这就是我所拥有的:

<javac srcdir="src" destdir="WEB-INF/classes" excludes="path/to/excluded/package/*.java">
    <classpath refid="compile.classpath"/> <!-- reference defined earlier -->
</javac>

4 个答案:

答案 0 :(得分:12)

您可以使用“**”排除整个目录或目录树并排除。实施例

<dirset dir="aDirectory">
    <include name="a/package/**"/>
    <exclude name="**/package/to/exclude**"/>
</dirset>

答案 1 :(得分:5)

请注意,如果“src”中的任何文件(或“如果指定”包含“中的任何文件)在excludes中指定的文件中具有相关性,则排除不起作用。因此,首先要确保排除的文件不会在任何包含文件中引用。

答案 2 :(得分:1)

javac任务隐含包括srcdir中的所有文件,您只需将exclude元素添加到任务中,例如:

<javac destdir="build" srcdir="src" >
    <exclude name="**/my/package/test/*.java" />
</javac>

这不会编译my.package.test包中的任何类。

答案 3 :(得分:0)

Mike,告诉javac明确不访问某些文件的另一种方法是取消设置sourcepath。我只想出来......

来自Ant手册:

  

注意:如果您只想编译某些源文件   在公共根目录下的包,使用包含/排除属性或   /嵌套元素来过滤这些包。做   不包括srcdir属性中的部分包结构(或   嵌套元素),或Ant将每次重新编译源文件   你运行编译目标的时间。有关其他信息,请参阅Ant FAQ   信息。

     

如果您希望仅编译显式指定的文件并禁用   javac的默认搜索机制然后你可以取消设置源路径   属性:

<javac sourcepath="" srcdir="${src}" destdir="${build}" >
    <include name="**/*.java"/>
    <exclude name="**/Example.java"/>
</javac>
  

这样javac将编译“$ {src}”下的所有java源文件   目录但跳过示例。编译器甚至会产生错误   如果某些非示例文件引用它们。