ツールの依存関係を追加しようとすると、pom.xmlで1つの奇妙な問題が発生し、コンパイル時の例外が発生します。以下のように表示されるjar(アーティファクトcom.Sun:tools:jar:1.6.0がありません)
Java_HOME変数を次のように設定しました。
Java_HOME:C:\ Program Files\Java\jdk1.6.0_34
JDK1.6の実際のパスにハードコーディングすると、以下のようなエラーは見つかりません。
<dependency>
<groupId>com.Sun</groupId>
<artifactId>tools</artifactId>
<version>1.6.0</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.6.0_34\lib\tools.jar</systemPath>
</dependency>
しかし、私はその良い習慣ではないことを知っています。このエラーを解決するためのガイダンスを要求してください。
Java.home
は、通常jreディレクトリを指すシステムプロパティであり、存在しないjarを指しているため、エラーが発生します。
Pomファイル内の環境変数を参照する場合は、以下の構文を使用してください。
${env.variable_name}
あなたの場合、それは以下に見られるように${env.Java_HOME}
であるはずです
<dependency>
<groupId>com.Sun</groupId>
<artifactId>tools</artifactId>
<version>1.6.0</version>
<scope>system</scope>
<systemPath>${env.Java_HOME}/lib/tools.jar</systemPath>
</dependency>
更新: lexicoreが述べたように、MAC JDKのファイル構造が異なるため、これはMACでは機能しません。
Mavenでは、$ {Java.home}は、JDK自体ではなく、JDKによって使用されるJREディレクトリを指します。この質問を参照してください:
だから代わりに
${Java.home}/lib/tools.jar
これは、使用すべきJDKディレクトリを前提としています
${Java.home}/../lib/tools.jar
ただし、これはソリューションの半分にすぎません。問題は、Macではディレクトリ構造が異なることです。ビルドをクロスプラットフォームで確実に機能させるには、ユーザープロファイルを使用する必要があります。
この質問を参照してください:
そして、具体的には、 この回答 (これはIS正解であり、OPによって受け入れられたものではありません)。
これは、Oracleが POMの1つ でそれを処理する方法です。
<!-- JDK dependencies -->
<dependency>
<groupId>com.Sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>${tools.jar}</systemPath>
</dependency>
そして、profiles
:
<profile>
<id>default-tools.jar</id>
<activation>
<file>
<exists>${Java.home}/../lib/tools.jar</exists>
</file>
</activation>
<properties>
<tools.jar>${Java.home}/../lib/tools.jar</tools.jar>
</properties>
</profile>
<profile>
<id>default-tools.jar-mac</id>
<activation>
<file>
<exists>${Java.home}/../Classes/classes.jar</exists>
</file>
</activation>
<properties>
<tools.jar>${Java.home}/../Classes/classes.jar</tools.jar>
</properties>
</profile>
Macでは、JDKのファイル構造が異なります。これが、これらのプロファイルを定義する必要がある理由です。
次の投稿も参照してください。