How to exclude a source package using javac in Ant?

女生的网名这么多〃 提交于 2020-01-03 09:25:30

问题


I've looked at a bunch of different examples, and tried several variations, but can't seem to get this working correctly. It also appears that you can't exclude an entire directory with javac, but only files, which I suppose means you can't specify a package? Here is what I have:

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

回答1:


You can exclude whole directories or directory trees with "**" and exclude. Example

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



回答2:


Please note that excludes does not work if any of the files in "src" (or in "includes" if specified) have dependency in the files specified in excludes. So first ensure that files excluded are not referred in any of the include files.




回答3:


The javac task implicity includes all files in the srcdir and you can just add an exclude element to the task, for example:

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

This would not compile any of the classes in the my.package.test package.




回答4:


Mike, another way to to tell javac to explicitly not access certain files is to unset sourcepath. I just figured this out...

From the Ant manual:

Note: If you wish to compile only source files located in certain packages below a common root, use the include/exclude attributes or / nested elements to filter for these packages. Do not include part of your package structure in the srcdir attribute (or nested elements), or Ant will recompile your source files every time you run your compile target. See the Ant FAQ for additional information.

If you wish to compile only files explicitly specified and disable javac's default searching mechanism then you can unset the sourcepath attribute:

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

That way the javac will compile all java source files under "${src}" directory but skip the examples. The compiler will even produce errors if some of the non-example files refers to them.



来源:https://stackoverflow.com/questions/2257639/how-to-exclude-a-source-package-using-javac-in-ant

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!