web-dev-qa-db-ja.com

MavenがJava_HOMEを正しく選択しない

私はWindows環境でmavenを使用してプロジェクトをコンパイルしています。プロジェクトを作成し、さまざまなライブラリの依存関係を追加しましたが。

私が追加したように、mavenは行方不明tools.jarので、以下に私のpom.xml

<dependency>
  <groupId>com.Sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>${Java.home}/../lib/tools.jar</systemPath>
</dependency>

Mavenインストールを実行すると、不足しているjarのエラーが次のように表示されました。

[ERROR] Failed to execute goal on project GApp: Could not resolve dependencies for project GApp:GApp:war:0.0.1-SNAPSHOT: Could not find artifact com.Sun:tools:jar:1.6 at specified path C:\Program Files\Java\jre6\lib\tools.jar -> [Help 1]

問題は、tools.jarは「C:\Program Files\Java\jdk1.6.0_26\lib "に正しく設定され、Java_HOME環境変数ですが、エラーメッセージ「C:\Program Files\Java\jre6\lib\tools.jar "。

C:\>echo %Java_HOME%
C:\Program Files\Java\jdk1.6.0_26

興味深い:依存関係でフルパスを設定すると、うまくいきました。しかし、私はそれをハードコーディングしたくありません。

<dependency>
  <groupId>com.Sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>C:\Program Files\Java\jdk1.6.0_26\lib\tools.jar</systemPath>
</dependency>

誰かがこれに対する動的な解決策を提案できますか?

26
Garry

これはEclipse Mavenサポートのバグです。 Eclipseは、 Maven specs に従って、すべてのグローバルMavenプロパティをサポートしていません。

仕様によると:

$ {Java.home}は、現在のJRE_HOME環境へのパスを指定します。たとえば、取得する相対パスを使用します

少なくともEclipse 4.3.1ではそうではありませんが、ここでJava.homeは常に、ビルドJREではなくEclipseの起動に使用されたJREを指します。

この問題を解決するには、次のようなものをEclipse.inibefore-vmargs!)に追加して、JDKからJREを使用してEclipseを起動する必要があります。

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll
36
rustyx

Java_HOMEがEclipseのJREを指すように設定されているようです。

2
Maddy

システムスコープの依存関係を使用しないでください。 tools.jarのすべてのコードは、実行中のJVMを介して既に利用可能になります。この依存関係を完全に削除する必要があります。

また、Mavenが使用しているランタイムを確認するために

mvn -v

それでもツールjarへの依存関係が問題として残っている場合は、追加した依存関係の1つにその依存関係があります(品質が非常に悪い)。実行されているものを見つけるには

mvn dependency:tree

または、それが失敗した場合は、上記のコマンドの問題がなくなるまで、次々に依存関係を削除してください。

そして、どこから来たのかがわかったら、次に何をすべきかを決めることができます。 1つの方法は、ツールを取り込む依存関係の除外を使用することです。

2
Manfred Moser

Java_HOME環境変数を追加するときに、パスにスペースが含まれている場合は、すべてを引用符で囲む必要があります。

1
gordy

Maven $ {Java.home}プロパティは、Eclipseの実行に応じて異なる場所から設定および取得されます。

  • ワークスペース用に選択されたデフォルトのJREから

    ウィンドウ>設定> Java>インストールされたJRE

  • 特定のEclipseプロジェクトから、

    Javaビルドパス>ライブラリ> JREシステムライブラリ

  • 実行構成から。

    実行構成>特定の実行構成> JRE

JREホームパスがJDKまたはJDKの下のJREを指していることを忘れないでください

1
Alejandro

EclipseでMavenを実行しているように聞こえます。 EclipseはJava_HOMEを参照しません。

Eclipse設定でJREを目的のJDKに設定していることを確認してください。

0
groodt

間違ったMavenインストールを使用している可能性があります。 [ウィンドウ]> [設定]> [Maven]> [インストール]で切り替えます。私はFedora Mavenをインストールするように設定しました。デフォルト(m2eに組み込まれたバージョン)に戻すと、問題が修正されました。

この問題の原因は、Fedora MavenのインストールでFedoraのOpenJDKが使用されていたためと思われます。

0
Luke Hutchison