【发布时间】:2016-03-25 15:33:44
【问题描述】:
这是我想要实现的一个非常简化的版本。我有两个目录,Directory1 和 Directory2。这两个目录都包含 Java 源文件。 Directory2 中的某些文件可以与Directory1 中的文件具有相同的完全限定类名。
使用 ant,文件被编译到名为 CompileDirectory 的目录中,首先从 Directory1,然后从 Directory2。我希望编译Directory2 中的文件并覆盖Directory1 中的已编译类文件。但是,ant 似乎忽略了具有相同完全限定类名的类。
这是一个简单的例子 -
目录结构
$ ls -R
.:
build.xml CompileDirectory Directory1 Directory2
./CompileDirectory:
./Directory1:
A.java
./Directory2:
A.java
构建.xml
<project name="TestProject" default="build" basedir=".">
<target name="build" depends="javac1, javac2" />
<target name="javac1">
<javac srcdir="${basedir}/Directory1" destdir="CompileDirectory" includeantruntime="false"/>
</target>
<target name="javac2">
<javac srcdir="${basedir}/Directory2" destdir="CompileDirectory" includeantruntime="false"/>
</target>
</project>
蚂蚁跑
$ ant -buildfile build.xml
Buildfile: ...(path).../build.xml
javac1:
[javac] Compiling 1 source file to ...(path).../CompileDirectory
javac2:
build:
BUILD SUCCESSFUL
Total time: 0 seconds
可以看出,上面的javac2 目标什么也不做。
当我运行 Java 程序时,我看到类文件来自 Directory1。
$ cd CompileDirectory/
$ java A
I am class A from directory 1
有没有办法强制javac2目标中的javac任务编译Directory2中的源文件并覆盖CompileDirectory中的类文件?
【问题讨论】: