私は入門チュートリアルに従っていましたが、Mavenを使用してplaynプロジェクトをインポートした後に行き詰まりました。 64ビットWindows 7で実行されているEclipse Indigoを使用しています。
インポートされたプロジェクトにはすべて同じエラーがあります。
Missing Artifact com.Sun:tools:jar in all the pom.xml files.
フォーラムを数時間検索した後、私は試しました:
最新のJava 1.6.029のインストールJava_HOME
環境変数を\program files\Java\jdk1.6_029
を指すように変更するEclipse Java設定を変更してJRE jdk1.6_029
を使用する。
私は本当にplaynを試してみたいのですが、なぜいくつかの投稿があるのか、解決策についてコンセンサスの答えを見つけることができないようです。 Sunは64ビットjdkから何かを削除したと言う人もいれば、xmlファイルを編集する必要があると言う人もいれば、Java_HOME
を変更する必要があると言う人もいれば、VMオプションを変更する必要があると言う人もいますEclipseの場合。
ここで特に奇妙な設定をしているわけではないので、これを解消するための助けをいただければ幸いです。
(編集)最初のプロジェクトの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>
この質問 に投稿しましたが、この同じ問題とそれを解決した方法についてですが、関連性が高いと思われるので、ここにも貼り付けます(そして展開します)。
Windows 7でEclipseを使用する場合、Eclipse設定のJREのリストからJREを削除し、そこにJDKがあっただけでも、同じ問題がありました。
私がやらなければならなかったのは(質問で言及したように)、Eclipseを起動するために使用するショートカットのコマンドラインを変更して、-vm引数を次のように追加することでした:
-vm "T:\Program Files\Java\jdk1.6.0_26\bin"
もちろん、yourJDKインストールの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
キーを最初に探します。
単純なWebサービスアプリケーションの開発中にも同じ問題が発生しました。私の場合は、jaxwsライブラリを取得するためにcodehousプラグインを追加する必要がありました。しかし、maven pomはツール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コメントで別のソリューションを見つけました。
<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>
同じ問題にぶつかり、それを解決する方法は、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ファイルがある場所に必ず変更してください。
他の答えのどれも私のためにそれをしませんでした。 Eclipseでpom.xmlの「依存関係階層」をチェックし、「ツール」というフィルターを指定すると、tools.jarに実際に依存していることがわかりました。
私の犯人はこれでした:
<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>
除外には欠点はないようです。
Eclipse 4.3設定でこの問題を解決しました-JDKライブラリをJREのライブラリに追加することによってのみ。
移動ウィンドウ->設定-> Java->インストールされたJRE-> JDKを選択して[編集]をクリック-> [外部JARの追加]をクリックしてtools.jarを追加(JDK/libに配置)
私とWindows 7でも同じです。最終的にEclipse.ini
に2行追加しました。
-vm
C:\Program Files\Java\jdk1.6.0_35\bin
そこで%Java_HOME%
を使用してみましたが、うまくいきませんでした。
マシンの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>
しばらく苦労した後、ようやくコマンドラインではなくEclipse.ini
で動作するようになりました。 ドキュメント を最後に読んだ後、-vm引数は別の行に、引用符で囲まず、-vmargsの前になければならないことに気付きました。
-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe
他のポスターが述べているように、ここでの問題は、Eclipseが使用しているJREがツールjarを見つけられないことに関係しています。上記で述べたものとは少し異なる方向に進むことで問題を解決しました。それは、私のプロジェクトと環境の方法が原因でした。
Eclipse 4.5では、ランタイムに少なくともJava 7が必要なので、C:\ Java\jre1.8.0_45にあるJava 8 JREを使用するようにシステムをセットアップしました。
次に、Java 6 JDKで実行していると想定する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のセットアップ方法を変更することだと思いますが、できませんでしたが、これは機能します。
このdependecyを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>
同様のエラーが発生しました。これは、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>
POMファイルの有効なPOMタブに、次の派生パスが表示されます:C:\Program Files\Java\jre6/../lib/tools.jar
そして、Windowsでは有効なパスではないと思います。 tools.jarをjre6/libフォルダーとJava/libにコピーしようとしましたが、成功しませんでした。
値「C:\ Program Files\Java\jre6」はレジストリから取得されます
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_30
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6
そして、jdk JREがインストールされている場所にJavaHomeキーを設定します。その後、すべてのコンパイラエラーがなくなりました。
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>
私はWindows 7とEclipse 3.7で同じ問題を抱えていました
Eclipse.exe -vm "D:\ JDK6\bin"
Cmdを起動してEclipseを起動するか、ショートカットを編集して-vm "D:\ JDK6\bin"を「ターゲットセクション」の引数として追加します。
補足として、Eclipse.iniに-vm "D:\ JDK6\bin"を追加しようとしましたが、動作しませんでした。また、JRE6の追加は、lib。ディレクトリにtools.jarが含まれていないため機能しません。 JDKのみが行います。
Eclipse.ini修正を使用して終了しました:
openFile
-vm (Your Java Home JDK here)
たとえば、-vm C:\Java\JDK\1.6
。
JREもJDKに変更する必要がありました。
EclipseでIDEに移動します:
この問題が発生した理由を理解しましょう。
$ mvn-バージョン
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"、Arch: "AMD64"、ファミリー: "windows"
Maven「mvn -version」コマンドは上記の出力を返します。
Java_HOME環境変数を指定しない場合、mavenはJavaランタイムパスを「C:\ Program Files\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をお読みください。
私の場合、Eclipse Run ConfigurationsからMaven Buildを実行していました。デフォルトのJRE構成をJDKインストールフォルダーを指すように変更した後でも、この問題は修正されませんでした。その理由は、Maven Build-Run ConfigurationにJREタブがあるためです(下の画像を参照)。そして、それはまだ私のJREインストールを指していました。 JDKインストールを指すように変更し、Mavenビルドを実行しました。今回は、うまくいきました。 ここに画像の説明を入力
システムからJREをアンインストールし、JDKのみを残すことで問題を解決しました。 Oracle JDKインストーラーはJDKとJREの両方をインストールするため、JDKの再インストールでは不十分です
ところで、このバグがトラブルの原因であるように思えます: ビルドJREの代わりにEclipse JREのJava.homeが使用されます
上記のすべてを試した後、私はまだ同じ問題を抱えていました。
次に、私は次を試しました、
コマンドプロンプトを開き、Java -versionと入力します。 JREバージョン1.8が表示されました。
コマンドプロンプトを開き、JDK 1.7 binディレクトリの場所に移動して、Java -versionと入力しました。今回は1.7が正しく表示されました。
その後、いくつかの場所を掘り下げた後、上記の場所の他に、Javaランタイム用の追加の場所があることがわかりました。
レジストリ
JREの場所が指定されているレジストリキーもあります
HKLM\Software\Javasoft\Version
JDK 1.7を指すようにここのエントリを変更しました
ProgramData
ディレクトリ「C:\ ProgramData\Oracle\Java\javapath」はPATH環境変数にあり、Java、javawなどへのショートカットが含まれています。これらのショートカットのターゲットはすべてJRE 1.8でした。 (これが主な問題だったと思う)正しいJDK exeを指すようにショートカットを変更しました。
これがすべて完了したら。 Eclipseを開いて、すべてのjdk.tools pom.xmlエラーが消えました。
この問題が発生しましたが、Windows上のJBossDevStudio 9.1は32ビットプログラムであることがわかりました。 Eclipse、つまりJBossDevStudioは、間違ったタイプのJVMでは動作しません。 64ビットEclipseには64ビットJVMが必要で、32ビットEclipseには32ビットJVMが必要です。したがって、インストール済みの64ビットJDKで実行するようにEclipseを構成することはできませんでした。
32ビットJDKをインストールし、Eclipseを実行して問題を解決しました。
少なくとも私のプロジェクトの1つについては、EclipseプロジェクトのプロパティでランタイムJDKを設定しようとした他のプロジェクトはまだ壊れています。