我有以下目录结构:
MyApp/
src/main/java/
com/
myapp/
api/
IFizz
FizzLoader
impl/
core/
FizzImpl
Cat
Dog
Tree
...many other objects
src/test/java
...
build/
lib/
...
我只想编译src/main/java/com/myapp/api
和com.myapp.impl.core.FizzImpl
下的所有内容,这样Cat
、Dog
、Tree
等就不会被编译(因此被排除在外)。
在by Ant构建(build.xml
)中,我配置了以下main.compile.path
:
<path id="src.path">
<fileset dir="src/main/java/com/myapp/api">
<include name="**.*java"/>
</fileset>
</path>
<path id="lib.main.path">
<fileset dir="lib/main">
<include name="**/*.jar"/>
</fileset>
</path>
<path id="main.compile.path">
<path refid="src.path" />
<path refid="lib.main.path" />
<fileset dir="src/main/java" includes="com/myapp/impl/core/**/*" />
</path>
然后是以下main-compile
目标:
<target name="main-compile">
<javac includeantruntime="false" srcdir="src/main/java/com/myapp/api"
destdir="gen/bin/main" debug="on">
<classpath refid="main.compile.path"/>
</javac>
</target>
当我运行main-compile
时,我得到以下构建异常:
[javac] /home/myuser/eclipse/workspace/MyApp/src/main/java/com/myapp/api/FizzLoader.java:14: package com.myapp.impl.core does not exist
[javac] import com.myapp.impl.core.FizzImpl;
[javac] ...(omitting rest of trace but available upon request)
这里,FizzLoader
正在创建FizzImpl
的一个实例,因此我需要在编译路径上使用它。
为什么Ant看不到我选择性添加到main.compile.path
中的com.myapp.impl.core.FizzImpl
?提前感谢!
javac的类路径应该引用包含已编译类文件树根的目录和jar文件。它不应该引用Java文件。
类似地,源目录应该引用源文件的包树的根。不指向包树中与包相对应的目录。
您的编译任务应该看起来像
<target name="main-compile">
<javac includeantruntime="false"
srcdir="src/main/java"
destdir="${gen.bin.main.dir}"
debug="on"
includes="com/myapp/api/**/*.java, com/myapp/impl/core/FizzImpl/**/*.java">
<classpath refid="lib.main.path"/>
</javac>
</target>