Hadoop mit Eclipse / Maven bauen - Fehlendes Artefakt jdk.tools:jdk.tools:jar:1.6

74

Ich versuche, clouderas org.apache.hadoop: hadoop-client: 2.0.0-cdh4.0.0 aus cdh4 maven repo in einem maven-Projekt in Eclipse 3.81, m2e-Plugin, mit oracles jdk 1.7.0_05 unter win7 zu importieren

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.0.0-cdh4.0.0</version>
</dependency>

Ich erhalte jedoch den folgenden Fehler:

The container 'Maven Dependencies' references non existing library 'C:\Users\MyUserId\.m2\repository\jdk\tools\jdk.tools\1.6\jdk.tools-1.6.jar'

Genauer gesagt, Maven gibt an, dass das folgende Artefakt fehlt

Missing artifact jdk.tools:jdk.tools:jar:1.6

Wie kann man das lösen?

jvataman
quelle

Antworten:

95

jdk.tools:jdk.tools(oder com.sun:toolsoder wie auch immer Sie es nennen) ist eine JAR-Datei, die mit JDK verteilt wird. Normalerweise fügen Sie es Maven-Projekten wie folgt hinzu:

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <scope>system</scope>
    <systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>

Weitere Informationen zum Hinzufügen von Abhängigkeiten finden Sie in den Maven-FAQtools.jar

Oder Sie können manuell tools.jarim lokalen Repository installieren, indem Sie:

mvn install:install-file -DgroupId=jdk.tools -DartifactId=jdk.tools -Dpackaging=jar -Dversion=1.6 -Dfile=tools.jar -DgeneratePom=true

und dann wie Cloudera darauf verweisen, mit:

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.6</version>
</dependency>
npe
quelle
7
Vielleicht möchten Sie hinzufügen, dass Ihr Befehl maven von Ihrem Ordner jdk (Version 6) / lib ausgeführt werden muss.
Dan W
1
Für den absoluten Pfad unter Windows: Der Standard-Backslash muss durch den FWD-Schrägstrich ersetzt werden - C: / Programme / Java / jdk1.7.0_67 / lib / tools.jar
Benutzer 923227
Das ist großartig ... aber der Befehl mvn install hat mir einen Build-Fehler verursacht. Das Hinzufügen von Anführungszeichen für die Attribute hat für mich funktioniert.
abhijitcaps
2
@abhijitcaps Wenn Sie tools.jarin Programmdateien auf den vollständigen Pfad verweisen, enthält dieser Pfad Leerzeichen und muss in Anführungszeichen gesetzt werden, ja. Es ist einfacher, einfach in dieses Verzeichnis zu navigieren und mvn install:install-filevon dort aus zu
starten
Versuchen Sie: - - mvn install: Installationsdatei -DgroupId = jdk.tools -DartifactId = jdk.tools -Dversion = 1.6 -Dpackaging = jar -Dfile = "C: \ Programme \ Java \ jdk \ lib \ tools.jar" oder überprüfen Sie maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
Yogesh Borkhade
103

Das Problem liegt in der Eclipse Maven-Unterstützung, die entsprechende Frage ist hier .

Unter Eclipse wird die java.homeVariable auf die JRE gesetzt, mit der Eclipse gestartet wurde, nicht auf die Build-JRE. Die Standardsystem-JRE von C:\Program Filesenthält das JDK tools.jarnicht und wird daher nicht gefunden.

Um das Problem zu beheben, müssen Sie Eclipse mithilfe der JRE aus dem JDK starten, indem Sie Folgendes hinzufügen eclipse.ini( vorher -vmargs !):

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll

Aktualisieren Sie dann die Maven-Abhängigkeiten (Alt-F5) (Nur das Aktualisieren des Projekts reicht nicht aus).

Rustyx
quelle
9
Vielen Dank. Nur ein kleiner Kommentar für die Leser: Denken Sie daran, dass ein Zeilenumbruch zwischen -vmund dem tatsächlichen Parameterwert erforderlich ist.
Daniel Fernández
1
Hatte dies gerade [jdk]\jre\bin\javaw.exestattgefunden, als Eclipse das automatisch erkannte , und wenn es so ausgeführt wurde, kann Maven die tools.jar nicht finden. Musste Eclipse explizit so ändern, dass es mit [jdk]\bin\javaw.exeMaven ausgeführt wird, um richtig zu finden, was es das com.sun:tools:1.8Glas nennt
Alex
1
Ich muss betonen, was @Alex sagt: Verwenden Sie den JDK-Bin, nicht den JRE-Bin für den -vmin der eclipse.ini. @rustyx zeigt zeigt den Pfad zum [jdk_path] / jre / bin und für mich hat dies dazu geführt, dass ich tools.jar nicht gefunden habe - obwohl ich auf javaw.exe und nicht auf die DLL verwiesen habe. Als ich es änderte C:/Program Files/Java/jdk1.8.0_51/bin/javaw.exe und Eclipse startete, Alt-F5, und der Fehler verschwand. Ich war überrascht zu erfahren, dass es zwei verschiedene ausführbare Javaw-Dateien mit unterschiedlichen Prüfsummen im JDK gibt.
David Lotts
1
Wenn Sie systemPath richtig angeben , dh mit "../" beginnen, tritt dieses Problem nicht auf. Mavens java.homeVariable sollte auf die JRE zeigen , nicht auf JDK. Die Umgebungsvariable JAVA_HOMEsollte dagegen auf das JDK verweisen.
Rustyx
Die 45 Personen, die diesen m2e-Bug getroffen haben, sollten im Eclispe-Bug-Tracker - bugs.eclipse.org/bugs/show_bug.cgi?id=432992
icyitscold
37

dank npe hinzufügen

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.7.0_05</version>
    <scope>system</scope>
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

zu pom.xml hat den Trick gemacht.

jvataman
quelle
10

Wenn Sie ohne tools.jar leben können und es nur als verkettete Abhängigkeit enthalten ist, können Sie es aus dem fehlerhaften Projekt ausschließen:

<dependency>
    <groupId>org.apache.ambari</groupId>
    <artifactId>ambari-metrics-common</artifactId>
    <version>2.1.0.0</version>
    <exclusions>
        <exclusion>
            <artifactId>jdk.tools</artifactId>
            <groupId>jdk.tools</groupId>
        </exclusion>
    </exclusions>
</dependency>
Adam LaStrange
quelle
6

Das hat bei mir funktioniert:

    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.7.0_05</version>
        <scope>system</scope>
        <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency>
Ravi Macha
quelle
1

Ich benutze unten in meinem MR-Projekt.

<exclusions>
                <exclusion>
                    <artifactId>jdk.tools</artifactId>
                    <groupId>jdk.tools</groupId>
                </exclusion>
</exclusions>
Suman
quelle
Dies erklärt nicht, wo dies zu setzen ist
MikeKulls
0

Vielleicht Systeminstallation JDK-Paket, aber vielleicht einige Entwicklungstools oder Plugin.

Ich finde dieses Problem unter opensuse env. und ich installiere java-1_6_0-openjdk-devel

Das Problem ist verschwunden.

liuyang1
quelle
0

Ich war auch mit diesem Problem konfrontiert, weil ich nur JRE installiert habe, nicht mit JDK . Das Hinzufügen einer Abhängigkeit für jdk.tools kann für mich nicht behoben werden , da tools.jar in meinem Verzeichnis $ {JAVA_HOME} / lib / nicht vorhanden war .

Jetzt habe ich JDK heruntergeladen und installiert , um es zu beheben.

Katastrophe
quelle
0

Ändern Sie die installierten JREs in Ihrer Eclipse. Fenster> Einstellungen> Java> Installierte JREs, ändern Sie den Speicherort von jre in% JAVA_HOME% / jre, jedoch nicht in C: \ Programme \ Java \ jre7

Sondy Woo
quelle
0

Wenn die Datei jdk.tools im .m2-Repository vorhanden ist. Trotzdem erhalten Sie den Fehler ungefähr so:

fehlendes Artefakt: jdk.tools ..... c: ... / jre / ..

Ändern Sie im Buildpath-> configure build path -> Libraries. Ändern Sie einfach die JRE-Systembibliothek von JRE in JDK.

Divya Rakshu
quelle
-3

Ok, wenn Sie Windows verwenden

  1. Gehen Sie zu C: \ Programme \ Java \ jdk1.8.0_40 \ lib (die jdk-Version kann für Sie anders sein)

  2. Stellen Sie sicher, dass tools.jar vorhanden ist (andernfalls laden Sie es herunter)

  3. Kopieren Sie diesen Pfad "C: \ Programme \ Java \ jdk1.8.0_40".

  4. In pom.xml

    <dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.8.0_40</version>
    <scope>system</scope>
    <systemPath>C:/Program Files/Java/jdk1.8.0_40/lib/tools.jar</systemPath>
    </dependency>
    
  5. Wiederaufbauen und rennen! BINGO!

Lokesh
quelle
5
Füge das niemals in deinen Pom ein, wenn du mit anderen Leuten arbeitest :)
Alex