web-dev-qa-db-ja.com

JAVA_HOMEがMavenに壊されます

多数の既存の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"

私を困惑させるのは

  1. 環境設定の一部としてJava_HOME=C:\Java\jdk1.6.0_13があり、mvn.batが実行されると、取得した値とまったく同じになりますが、エラーメッセージに表示されるように、C:\Java\jdk1.6.0_13\jreとして表示されます。
  2. ant compileを実行すると、すべてが正常にコンパイルされます

おそらくmaven-antrun-pluginset Java_HOME=%Java_HOME%\jreのようなことをするということですか?バッチ/ビルドファイルを検索しましたが、その変更が発生する場所が見つかりません

39
Bostone

それは受け入れられた答えの外部リンクの欠点です。 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>
21
Lonzak

次のプロパティ定義をantbuild.xmlファイルに入れることで、これを修正することができました。

<property name="build.compiler" value="extJavac"/>
18
dvtoever