私は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>
誰かがこれに対する動的な解決策を提案できますか?
これはEclipse Mavenサポートのバグです。 Eclipseは、 Maven specs に従って、すべてのグローバルMavenプロパティをサポートしていません。
仕様によると:
$ {Java.home}は、現在のJRE_HOME環境へのパスを指定します。たとえば、取得する相対パスを使用します
少なくともEclipse 4.3.1ではそうではありませんが、ここでJava.home
は常に、ビルドJREではなくEclipseの起動に使用されたJREを指します。
この問題を解決するには、次のようなものをEclipse.ini
(before-vmargs
!)に追加して、JDKからJREを使用してEclipseを起動する必要があります。
-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll
Java_HOMEがEclipseのJREを指すように設定されているようです。
システムスコープの依存関係を使用しないでください。 tools.jarのすべてのコードは、実行中のJVMを介して既に利用可能になります。この依存関係を完全に削除する必要があります。
また、Mavenが使用しているランタイムを確認するために
mvn -v
それでもツールjarへの依存関係が問題として残っている場合は、追加した依存関係の1つにその依存関係があります(品質が非常に悪い)。実行されているものを見つけるには
mvn dependency:tree
または、それが失敗した場合は、上記のコマンドの問題がなくなるまで、次々に依存関係を削除してください。
そして、どこから来たのかがわかったら、次に何をすべきかを決めることができます。 1つの方法は、ツールを取り込む依存関係の除外を使用することです。
Java_HOME環境変数を追加するときに、パスにスペースが含まれている場合は、すべてを引用符で囲む必要があります。
Maven $ {Java.home}プロパティは、Eclipseの実行に応じて異なる場所から設定および取得されます。
ワークスペース用に選択されたデフォルトのJREから
ウィンドウ>設定> Java>インストールされたJRE
特定のEclipseプロジェクトから、
Javaビルドパス>ライブラリ> JREシステムライブラリ
実行構成から。
実行構成>特定の実行構成> JRE
JREホームパスがJDKまたはJDKの下のJREを指していることを忘れないでください
EclipseでMavenを実行しているように聞こえます。 EclipseはJava_HOMEを参照しません。
Eclipse設定でJREを目的のJDKに設定していることを確認してください。
間違ったMavenインストールを使用している可能性があります。 [ウィンドウ]> [設定]> [Maven]> [インストール]で切り替えます。私はFedora Mavenをインストールするように設定しました。デフォルト(m2eに組み込まれたバージョン)に戻すと、問題が修正されました。
この問題の原因は、Fedora MavenのインストールでFedoraのOpenJDKが使用されていたためと思われます。