多数の既存のJavaプロジェクトを統合されたMavenビルドで後付けしています。各プロジェクトは成熟しており、Antベースのビルドを確立しているため、maven-antrun-plugin
を使用して既存のbuild.xml
を次のように実行します。
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<tasks>
<ant antfile="build.xml" target="compile" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
mvn compile
を実行すると、ビルドが次のメッセージで失敗します。
[INFO] An Ant BuildException has occured: The following error occurred
while executing this line:
build.xml:175: Unable to find a javac compiler;
com.Sun.tools.javac.Main is not on the classpath.
Perhaps Java_HOME does not point to the JDK.
It is currently set to "C:\Java\jdk1.6.0_13\jre"
私を困惑させるのは
Java_HOME=C:\Java\jdk1.6.0_13
があり、mvn.bat
が実行されると、取得した値とまったく同じになりますが、エラーメッセージに表示されるように、C:\Java\jdk1.6.0_13\jre
として表示されます。ant compile
を実行すると、すべてが正常にコンパイルされますおそらくmaven-antrun-plugin
がset Java_HOME=%Java_HOME%\jre
のようなことをするということですか?バッチ/ビルドファイルを検索しましたが、その変更が発生する場所が見つかりません
それは受け入れられた答えの外部リンクの欠点です。 Codehausがシャットダウンしたため、ソリューションはなくなりました。参考までに、リンクの背後にあるコンテンツを次に示します。基本的には、<dependencies>...</dependencies>
ブロックをantrunプラグインにコピーするだけで済みます...
maven-antrun-pluginは、実行全体のJava_HOMEがJDKであっても、Java_HOMEをJDKのjreサブディレクトリに設定してantを実行します。 JDKのtools.jarのプロジェクトレベルで依存関係を作成する方法については、他の場所にドキュメントがありますが、これはプラグインであるantrunの助けにはなりません。次のプロファイルがその役割を果たします。パス内の「..」は、「jre」ディレクトリを過ぎてlibディレクトリに移動します。
<profiles>
<profile>
<id>tools.jar</id>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.Sun</groupId>
<artifactId>tools</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>${Java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
次のプロパティ定義をantbuild.xmlファイルに入れることで、これを修正することができました。
<property name="build.compiler" value="extJavac"/>