我有以下目录结构:
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
等等不要编译(因而被排除在外)。
在Ant build(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没有看到我有选择地添加到com.myapp.impl.core.FizzImpl
的{{1}}?提前谢谢!
答案 0 :(得分:1)
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>