Hier ist eine sehr vereinfachte Version von dem, was ich versuche zu erreichen. Ich habe zwei Verzeichnisse, Directory1
und Directory2
. Beide Verzeichnisse enthalten Java-Quelldateien. Einige der Dateien in Directory2
können denselben vollqualifizierten Klassennamen wie die Dateien in Directory1
haben.Wie erzwinge ant javac Aufgabe, um die Klassendatei im Zielverzeichnis zu überschreiben?
Mit ant werden die Dateien in ein Verzeichnis namens CompileDirectory
, zuerst aus Directory1
und dann von Directory2
kompiliert. Ich möchte die Dateien in Directory2
kompiliert werden und überschreiben die kompilierten Klassendateien von Directory1
. Ameise scheint jedoch die Klassen zu ignorieren, die denselben vollqualifizierten Klassennamen haben.
Hier ist ein einfaches Beispiel -
Verzeichnisstruktur
$ ls -R
.:
build.xml CompileDirectory Directory1 Directory2
./CompileDirectory:
./Directory1:
A.java
./Directory2:
A.java
build.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 Run
$ 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
Wie man sehen kann, die javac2
Ziel oben tut nichts.
Wenn ich das Java-Programm ausführen, sehe ich, dass die Klassendatei die von Directory1 ist.
$ cd CompileDirectory/
$ java A
I am class A from directory 1
Gibt es eine Möglichkeit, die javac
Aufgabe in dem javac2
Ziel zu zwingen, die Quelldatei in Directory2
und überschreibt die Klassendatei im CompileDirectory
zu kompilieren?