ここでは、私が達成しようとしているものの非常に単純化されたバージョンです。私は2つのディレクトリ、Directory1
とDirectory2
を持っています。どちらのディレクトリにもJavaソースファイルが含まれています。 Directory2
の一部のファイルは、Directory1
のファイルと完全に同じクラス名を持つことができます。ant javacタスクが強制的に宛先ディレクトリのクラスファイルを上書きする方法はありますか?
antを使用すると、ファイルはDirectory1
からDirectory2
から最初にCompileDirectory
というディレクトリにコンパイルされます。 のファイルをコンパイルして、コンパイルしたクラスファイルをDirectory1
から上書きします。しかし、antは、同じ完全修飾クラス名を持つクラスを無視するようです。
ディレクトリ構造からわかるように
$ 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の実行
$ 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
CompileDirectory
でクラスファイルをDirectory2
でソースファイルをコンパイルし、上書きするjavac2
ターゲットにjavac
タスクを強制する方法はありますか?