6

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

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

4 回答 4

12

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

<dirset dir="aDirectory">
    <include name="a/package/**"/>
    <exclude name="**/package/to/exclude**"/>
</dirset>
于 2010-02-13T14:20:59.967 回答
5

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

于 2011-11-24T07:14:05.660 回答
1

javac 任务隐含地包含 srcdir 中的所有文件,您只需向任务添加一个排除元素,例如:

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

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

于 2012-09-19T11:27:14.267 回答
1

Mike,告诉 javac 明确不访问某些文件的另一种方法是取消设置源路径。我只是想通了这个...

来自 Ant 手册:

注意:如果您希望只编译位于公共根目录下的某些包中的源文件,请使用包含/排除属性或 / 嵌套元素来过滤这些包。不要在 srcdir 属性(或嵌套元素)中包含包结构的一部分,否则 Ant 会在每次运行编译目标时重新编译源文件。有关更多信息,请参阅 Ant 常见问题解答。

如果您希望只编译明确指定的文件并禁用 javac 的默认搜索机制,那么您可以取消设置 sourcepath 属性:

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

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

于 2017-08-23T11:00:39.747 回答