web-dev-qa-db-ja.com

Maven:アーティファクトcom.Sun:tools:jar:1.6.0のコンパイル時例外がPOM.xmlにありません

ツールの依存関係を追加しようとすると、pom.xmlで1つの奇妙な問題が発生し、コンパイル時の例外が発生します。以下のように表示されるjar(アーティファクトcom.Sun:tools:jar:1.6.0がありません

Issue

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>

しかし、私はその良い習慣ではないことを知っています。このエラーを解決するためのガイダンスを要求してください。

5
sTg

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では機能しません。

13
coderplus

Mavenでは、$ {Java.home}は、JDK自体ではなく、JDKによって使用されるJREディレクトリを指します。この質問を参照してください:

MavenのJava_home

だから代わりに

${Java.home}/lib/tools.jar

これは、使用すべきJDKディレクトリを前提としています

${Java.home}/../lib/tools.jar

ただし、これはソリューションの半分にすぎません。問題は、Macではディレクトリ構造が異なることです。ビルドをクロスプラットフォームで確実に機能させるには、ユーザープロファイルを使用する必要があります。

この質問を参照してください:

Maven依存関係としてのJDK tools.jar

そして、具体的には、 この回答 (これは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のファイル構造が異なります。これが、これらのプロファイルを定義する必要がある理由です。

次の投稿も参照してください。

3
lexicore