我看了一堆不同的例子,尝试了几种变体,但似乎无法正常工作。看来你不能用javac排除整个目录,只能用文件排除,我想这意味着你不能指定包?这就是我所拥有的:
<javac srcdir="src" destdir="WEB-INF/classes" excludes="path/to/excluded/package/*.java">
<classpath refid="compile.classpath"/> <!-- reference defined earlier -->
</javac>
答案 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源文件 目录但跳过示例。编译器甚至会产生错误 如果某些非示例文件引用它们。