开发者

How to exclude a source package using javac in Ant?

开发者 https://www.devze.com 2022-12-19 21:43 出处:网络
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 w

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>


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>


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.


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消