欠落しているアーティファクトcom.sun:tools:jar


91

入門チュートリアルに従っていますが、Mavenを使用してplaynプロジェクトをインポートした後、スタックします。64ビットWindows7で実行されているEclipseIndigoを使用しています。

インポートされたすべてのプロジェクトに同じエラーがあります。

Missing Artifact com.sun:tools:jar in all the pom.xml files.

フォーラムを数時間検索した後、私は試しました:

最新のJava1.6.029のインストール JREを使用するためのEclipseJava設定の変更JAVA_HOMEを指すように環境変数を\program files\Java\jdk1.6_029変更しますjdk1.6_029

私は本当にplaynを試してみたいのですが、なぜいくつかの投稿があるのか​​、解決策についてのコンセンサスの答えを見つけることができないようです。Sunが64ビットjdkから何かを削除したと言う人もいれば、xmlファイルを編集する必要があると言う人もいれば、変更したと言う人もいればJAVA_HOME、EclipseのVMオプションを変更する必要があると言う人もいます。

私はここで特に奇妙な設定をしていないので、これをクリアするための助けがあれば幸いであり、おそらく多くの人にとって役立つでしょう。

(編集)これが最初のプロジェクトのpom.xmlです。Eclipseは、次の行のエラーにフラグを立てます。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.googlecode.playn</groupId>
    <artifactId>playn-project</artifactId>
    <version>1.1-SNAPSHOT</version>
  </parent>

  <artifactId>playn-android</artifactId>
  <name>PlayN Android</name>
  <packaging>jar</packaging>

  <repositories>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>com.googlecode.playn</groupId>
      <artifactId>playn-core</artifactId>
      <version>${project.version}</version>
    </dependency>

    <!-- needed because Android uses the same JSON code as playn-java;
         that should be factored into a library shared by both backends -->
    <dependency>
      <groupId>com.googlecode.playn</groupId>
      <artifactId>playn-java</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
      <version>${android.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <sourceDirectory>src</sourceDirectory>
  </build>
</project>

コマンドラインからmavenを実行しても同じエラーが発生しますか?
Raghuram 2011

pom.xmlファイルを追加しました。コマンドラインを使用してMavenで何かを行う方法がわからないことをお詫びします。
boldinventions 2011

POMが壊れています。このようのgroupId、たartifactId、バージョンとして必須のタグがありません...親POMは、中央Mavenの中に存在していないモジュールのバージョンが....もある
マーク・オコナー

どういうわけか修正しましたか?これはどれも私にはうまくいかないようです(Windows7-64ビット-jdk1.6)
Ovidiu Latcu 2012年

これはよくある問題ですが、うまくいった答えを受け入れてもらえますか?
Roy Truelove 2013年

回答:


56

この同じ問題とその解決方法についてこの質問に投稿しましたが、関連性が高いと思われるため、ここにも貼り付けます(さらに拡張します)。

Windows 7でEclipseを使用しているときに、Eclipse設定のJREのリストからJREを削除し、そこにJDKを置いただけでも、同じ問題が発生しました。

(質問で述べたように)私がやらなければならなかったことは、Eclipseを起動するために使用するショートカットのコマンドラインを変更して、次のように-vm引数を追加することでした。

-vm "T:\Program Files\Java\jdk1.6.0_26\bin"

もちろん、JDKインストールのbinディレクトリを指すように調整します。これにより、Eclipse自体がJREではなくJDKを使用して実行され、tools.jar適切に検出できるようになります。

これは、何も指定されていない場合にEclipseがデフォルトのJREを見つける方法に関係していると思います。私はそれがJDKよりもJREを好む傾向があると推測しており(なぜ、私は知りません)、それが見つけた最初の互換性のあるJREを選びます。また、Vladiat0rの回答が示すように、Windowsレジストリキーから外れている場合HKLM\Software\JavaSoft\Java Runtime Environmentは、HKLM\Software\JavaSoft\Java Development Kitキーではなく最初にキーを探します。


10
これはWindows7で機能しました。eclipse.iniを使用するのではなく、ショートカットを変更して-vm "..."引数を追加する必要がありました。また、エラーが解消される前に、Mavenプロジェクトをワークスペースに再インポートする必要がありました。
キットメンケ2013

2
ここでも同じです-.iniのサイコロはありませんが、コマンドラインの-vm引数は機能しました。
Roy Truelove 2013年

1
eclipse.initを変更する方法を説明するために回答を編集しました。出典:wiki.eclipse.org/Eclipse.ini#-vm_value
OGrandeDiEnne 2015

1
ここでも同じです-ショートカットに-vmを追加するとうまくいきました。プロジェクトを再インポートする必要はありません。プロジェクト/メイヴン/更新するだけで十分です。
ルカシュDumiszewski

1
それを機能させるには、javaw.exeそのパスにも追加する必要がありました(完全に:) -vm "T:\Program Files\Java\jdk1.8.0_66\bin\javaw.exe";
Jacob van Lingen 2016年

27

単純なWebサービスアプリケーションの開発中にも同じ問題が発生しました。私の場合、jaxwsライブラリを取得するためにcodehousプラグインを追加する必要がありました。ただし、mavenpomはツールのjarファイルについて質問し続けました。

上記のコメントは正しいと言わざるを得ません。pomファイルに以下のエントリを含めることができます。

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

しかし、本番インスタンスにデプロイする必要がある場合はどうなりますか?パスをシステム環境変数への参照に置き換えることはできますが、少なくとも私にはそれでも見栄えがよくありません。

StackOverflowコメントで別の解決策を見つけました:

Maven3アーティファクトの問題

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>${struts2.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>tools</artifactId>
            <groupId>com.sun</groupId>
        </exclusion>
    </exclusions>
</dependency>

彼らは、ツールjarの除外ステートメントを含めることを提案しており、それは機能します。要約すると、依存関係内に除外ルールを含めて、tool.jarの問題が発生しないようにすることができます。

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>

3
ヒント:「mvndependency:tree」を使用して、除外を挿入する場所を見つけます。
ラース

に除外タグを追加しpom.xmlても機能しません。
user3437460

25

同じ問題が発生し、それを解決する方法は、の依存関係の場所をtools.jarに追加することでしたpom.xml。そのようです:

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

<systemPath>tools.jarファイルが配置されている場所に必ず変更してください。


42
これを行わないことを強くお勧めします。問題は解決しますが、他の開発者や環境を構築するための移植性はありません。他の答えを見てください、彼らはトリックをしているようです
Roy Truelove 2013年

systemPathを<systemPath> $ {java.home} /lib/plugin.jar </ systemPath>に変更したほうがいいかもしれません
Guilherme Santos

stackoverflow.com/questions/3080437/…には、これをポータブルな方法で行う方法があります。
vorburger 2016年

私はpom.xmlを次のように変更しました(java-md-docletの新しいバージョンを強制します)エラーは消えます:<dependencyManagement> <dependencies> <dependency> <groupId> com.github.iotaledger </ groupId> <artifactId> java- md-doclet </ artifactId> <version> 2.1.3 </ version> </ dependency> </ dependencies> </ dependencyManagement>
Samir 007

20

他の答えはどれも私のためにそれをしませんでした。Eclipseでpom.xmlの「依存関係階層」をチェックするのは何でしたか。フィルター「tools」を指定すると、tools.jarに実際に依存していることがわかりました。

Eclipseビュー

だから私にとっての犯人はこれでした:

<dependency>
    <groupId>com.github.markusbernhardt</groupId>
    <artifactId>robotframework-selenium2library-java</artifactId>
    <version>1.4.0.7</version>
    <scope>test</scope>
</dependency>

除外を追加すると修正されました:

<dependency>
    <groupId>com.github.markusbernhardt</groupId>
    <artifactId>robotframework-selenium2library-java</artifactId>
    <version>1.4.0.7</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <artifactId>tools</artifactId>
            <groupId>com.sun</groupId>
        </exclusion>
    </exclusions>  
</dependency>

除外にはマイナス面はないようです。


1
私のために働いて、問題は
java6

私はspotbugs-maven-pluginを私の犯人として特定しました、ありがとう!
timbru31

8

私とWindows7でも同じです。私は2行を追加することになりましたeclipse.ini

-vm 
C:\Program Files\Java\jdk1.6.0_35\bin

そこで使ってみました%JAVA_HOME%が、うまくいきませんでした。


2
将来の私への注意:これは-vmargs、VM起動引数として解釈される過去のものと同様に、行の前にある必要があります。だから:その直前に!
eis 2016

-vm前に使用するこのソリューション-vmargsが鍵です!。ありがとうございました!
テーバー

6

私はEclipse4.3設定でこの問題を解決しました-JREのライブラリにJDKライブラリを追加することによってのみ。

Windows->設定-> Java->インストールされたJRE-> JDKを選択し、編集->外部JARの追加をクリックしてtools.jar(JDK / libに配置)を追加します。


5

マシンのJDKバージョンを確認し、pom.xml両方で同じである必要があります

<dependency>
    <groupId>sun.jdk</groupId>
    <artifactId>tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>C:\Program Files\Java\jdk1.8.0_192\lib\tools.jar</systemPath>
</dependency>

4

それでもこの問題が発生する場合は、バージョンが11以上のJDKが原因である可能性があります。

tools.jarアーカイブは、これらのJDKの中のlibフォルダから削除されている(参照、この答え同様の質問への)を。その場合は、ライブラリに依存しない他のバージョンのライブラリを使用してみてくださいcom.sun:tools


3

しばらく苦労した後、私はついにeclipse.iniコマンドラインの代わりにこれを使用できるようになりました。最後にドキュメントを読んだ後、-vm引数は別の行にあり、引用符で囲まれておらず、-vmargsの前にある必要があることに気付きました。

-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe

2

同様のエラーが発生しました。これは、JDKがEclipseで適切に設定されていないためです。CucumberにはJREとともにJDKが必要なので、pom.xmlに以下の依存関係を追加します

<dependency>
  <groupId>com.sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar</systemPath>
</dependency>

1

pomファイルの有効なPOMタブに、次の派生パスが表示さ C:\Program Files\Java\jre6/../lib/tools.jarれます。これはWindowsでは有効なパスではないと思います。tools.jarをjre6 / libフォルダーとJava / libにコピーしようとしましたが成功しませんでした。

値「C:\ ProgramFiles \ Java \ jre6」は、レジストリから取得されます

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_30
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6

そして、JavaHomeキーをjdkJREがインストールされている場所に設定します。その後、すべてのコンパイラエラーがなくなりました。

JDKを再インストールしても修正されませんでした。JAVA_HOMEまたはjava.homeシステム環境変数を設定しても役に立ちませんでした。

私が見た他の代替手段は、各pom xmlファイルに正しいパスで依存関係を追加することですが、playn-samplesには、編集しなければならないばかげた苦痛であるファイルがたくさんあります。

これは効果的なPOMの結果であり、間違ったパスを示しています。

 <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.6</version>
      <scope>system</scope>
      <systemPath>C:\Program Files\Java\jre6/../lib/tools.jar</systemPath>
      <optional>true</optional>
    </dependency>

1

この依存関係をpom.xmlファイルに追加します。この助けを願っています。
では<systemPath>プロパティあなたは、JDKのlibパスを記述する必要があります。..

    <dependency>  
          <groupId>com.sun</groupId> 
           <artifactId>tools</artifactId>
        <version>1.4.2</version>
        <scope>system</scope>
        <systemPath>C:/Program Files/Java/jdk1.6.0_30/lib/tools.jar</systemPath>
        </dependency> 

1

eclipse.ini修正を使用することになりました:

openFile
-vm (Your Java Home JDK here)

たとえば、-vm C:\Java\JDK\1.6

JREもJDKに変更する必要がありました。

Eclipse IDEで、次の場所に移動します。

  1. ウィンドウ->設定->インストールされたJRE
  2. [追加]をクリックします(新しいJREを見つけるため)
  3. 標準のJVMを選択->次へ
  4. ディレクトリをクリックしてJREホームを見つけ、JDK_INSTALL_LOCATIONを配置して終了します。
  5. Javaプロジェクトのプロパティ-> Javaビルドパス->ライブラリ-> JREの選択->編集->ワークスペースのデフォルトJREの選択->終了に移動します
  6. プロジェクト->クリーンでワークスペース全体のクリーンアップを実行します。

EclipseIDEのすべてのWindowsインスタンスにこの問題があります。すべてのUbuntuベースのEclipseIDEは影響を受けません。そのため、Windowsインスタンスでこのメソッドを使用すると、問題が修正されます。の後-vmに必ず改行を追加し、Java SDKパスをnect行に配置し、ファイル内のの-vm前に新しく追加されたすべてのフラグを配置--vmargsしてくださいeclipse.ini
tom_mai78101

1

他のポスターが述べているように、ここでの問題は、Eclipseが使用しているJREがツールjarを見つけることができないことに関係しています。私は上記とは少し違う方向に進んで問題を解決しました。それは私のプロジェクトと環境のやり方によるものでした。

Eclipse4.5は実行時に少なくともJava7を必要とするため、C:\ java \ jre1.8.0_45にあるJava8JREを使用するようにシステムをセットアップしました。

次に、Java 6JDKで実行していることを前提としたPOMファイルを使用しています。

  <profiles>
    <profile>
      <id>default-profile</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <file>
          <exists>${java.home}/../lib/tools.jar</exists>
        </file>
      </activation>
      <properties>
        <toolsjar>${java.home}/../lib/tools.jar</toolsjar>
      </properties>
    </profile>
    <profile>
      <id>osx_profile</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <os>
          <family>mac</family>
        </os>
      </activation>
      <properties>
        <toolsjar>${java.home}/../Classes/classes.jar</toolsjar>
      </properties>
    </profile>
  </profiles>

  <dependencies>
    <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.6.0</version>
      <scope>system</scope>
      <systemPath>${toolsjar}</systemPath>
    </dependency>
  </dependencies>

POMファイルを変更することは許可されていないため、ジゲリーポケリーを行う必要がありました。Java 6 JDKからtools.jarをコピーし、ディレクトリC:\ java \ libを作成して、そこに貼り付けました。その後、Eclipseを再起動し、プロジェクトをクリーンアップしました。そして、VOILAエラーはなくなりました。

これは洗練された解決策ではなく、POMの設定方法を変更するのが適切な解決策だと思いますが、私にはできなかったので、これは機能します。


0

Windows7とEclipse3.7でも同じ問題が発生しましたが、起動して修正することができました。

eclipse.exe -vm "D:\ JDK6 \ bin"

cmdを起動してそのようにEclipseを起動するか、ショートカットを編集して「ターゲットセクション」の引数として-vm「D:\ JDK6 \ bin」を追加することができます。

補足として、eclipse.iniに-vm "D:\ JDK6 \ bin"を追加しようとしましたが、機能しませんでした。また、JRE6の「lib」ディレクトリにtools.jarが含まれていないため、JRE6の追加は機能しません。JDKだけがそうします。


0

上記のすべてを試した後、私はまだ同じ問題を抱えていました。

  • PATH環境変数はJDK1.7 \ binを指します
  • 私のJAVA_HOME環境変数がJDK1.7を指していた
  • 私のeclipse.iniには、JDK1.7を指すjavaw-vmエントリがありました。
  • 私のEclipse設定では、インストールされたJREとしてJDK1.7が使用されていました。
  • 私のプロジェクトビルドパスはJDK1.7を使用していました。

それから私は次のことを試みました、

  • コマンドプロンプトを開き、java-versionと入力します。JREバージョン1.8が表示されました。

  • コマンドプロンプトを開き、JDK 1.7 binディレクトリの場所に移動して、java-versionと入力しました。今回は正しく1.7を示しました。

次に、いくつかの場所を調べた後、上記の場所とは別に、Javaランタイム用の追加の場所があることがわかりました。

レジストリ

JREの場所が指定されているレジストリキーもあります

HKLM \ Software \ Javasoft \ Version

ここのエントリをJDK1.7を指すように変更しました

プログラムデータ

ディレクトリ「C:\ ProgramData \ Oracle \ Java \ javapath」はPATH環境変数に存在し、java、javawなどへのショートカットが含まれています...これらのショートカットのターゲットはすべてJRE1.8でした。(これが主な問題だったと思います)正しいJDKexeを指すようにショートカットを変更しました。

これがすべて行われたら。Eclipseを開くと、すべてのjdk.toolspom.xmlエラーが消えました。


0

この問題が発生しましたが、Windows上のJBossDevStudio9.1は32ビットプログラムであることがわかりました。Eclipse、つまりJBossDevStudioは、間違ったタイプのJVMでは機能しません。64ビットのEclipseには64ビットのJVMが必要であり、32ビットのEclipseには32ビットのJVMが必要です。したがって、インストールした64ビットJDKで実行するようにEclipseを構成することはできませんでした。

32ビットJDKをインストールし、そこからEclipseを実行すると、問題が解決しました。

少なくとも私のプロジェクトの1つでは、EclipseプロジェクトのプロパティでランタイムJDKを構成しようとしたもう1つのプロジェクトはまだ壊れています。



0

私の場合、Eclipseの実行構成からMavenビルドを実行していました。デフォルトのJRE構成をJDKインストールフォルダーを指すように変更した後でも、問題は修正されませんでした。その理由は、Mavenビルド-実行構成にJREタブがあるためです(下の画像を参照)。そして、それはまだ私のJREインストールを指しています。JDKインストールを指すように変更してから、Mavenビルドを実行しました。今回はうまくいきました。 ここに画像の説明を入力してください


0

この問題が発生した理由を理解しましょう。

$ mvn -version

Apache Maven 3.6.1(d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20:00:29 + 01:00)Mavenホーム:C:\ Program Files \ Apache \ maven-3.6.1 Javaバージョン:1.8.0_221、ベンダー:Oracle Corporation、ランタイム:C:\ Program Files \ Java \ jre1.8.0_221デフォルトロケール:en_GB、プラットフォームエンコーディング:Cp1252 OS名: "windows 10"、バージョン: "10.0"、アーチ: "amd64"、ファミリ: "windows"

Mavenの「mvn-version」コマンドは上記の出力を返します。

JAVA_HOME環境変数を指定しない場合、mavenはJavaランタイムパスを「C:\ ProgramFiles \ Java \ jre1.8.0_221」として取得することがわかります。そして、MavenはこのパスをJAVA_HOMEと見なします。そのため、コマンドプロンプトまたは任意のIDEからアプリケーションをビルドする場合、mavenはパス "%JAVA_HOME%.. \ lib \ tools.jar"でtools.jarファイルを探します。

tools.jarはJDKパスに存在するため、使用する前にこれをMavenに通知する必要があります。現在、マシンはすでに利用可能なjreを使用してビルドされていますが、jdkは開発にのみ必要です。これが、Mavenがjreパスを自動的に選択する理由である可能性があります。

さらにヘルプが必要な場合は、Mavenインストールパスで利用可能なコードmvn.cmdをお読みください。


0

問題は、システムがファイルtools.jarを見つけることができないことです

したがって、最初にファイルがディレクトリのJDKインストールにあることを確認してください。

ここに画像の説明を入力してください

他の人が正しく指摘したように、POM.xmlに以下のエントリを作成します

<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.8.0_241\lib\tools.jar</systemPath>
</dependency> 

次に、以下の手順に従って問題を解決します

1)プロジェクトを右クリックします

2)ビルドパスをクリックします

以下の画像のように、ワークスペースのデフォルトJREを選択し、[完了]をクリックします。

ここに画像の説明を入力してください


0

[設定]-> [Java]-> [インストールされたJRE]の下の[インストールされたJRE]をJDKホームに変更するとうまくいきました。

参考までに-JDK1.8を使用しています。



-1

の相対位置${java.home}/../lib/tools.jarC:\Program Files\Java\jdk1.6.0_29\lib\tools.jar作品の絶対パスに変更する。

で変更するだけで済みplayn/pom.xmlます。

これで、playn-samplesの場合、Vladiatorは正しいです。これは、変更するには多すぎるpomファイルです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.