java - Buiding Hadoop con Eclipse / Maven-Manufatto mancante jdk.tools:jdk.tools:jar:1.6




maven-2 cloudera (11)

Sto cercando di importare il file org.apache.hadoop di cloudera: hadoop-client: 2.0.0-cdh4.0.0 da cdh4 maven repo in un progetto di maven in eclissi 3.81, m2e plugin, con oracle's jdk 1.7.0_05 su win7 usando

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

tuttavia, ottengo il seguente errore:

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

più specifico, Maven afferma che manca il seguente artefatto

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

Come risolvere questo?


Answers

Se puoi vivere senza tools.jar ed è incluso solo come dipendenza concatenata, puoi escluderlo dal progetto incriminato:

<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>


grazie a npe, aggiungendo

<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>

a pom.xml ha fatto il trucco.


jdk.tools:jdk.tools (o com.sun:tools , o qualunque cosa tu lo chiami) è un file JAR che è distribuito con JDK. Di solito lo aggiungi a progetti di maven come questo:

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

Vedi, le FAQ di Maven per aggiungere dipendenze a tools.jar

In alternativa, è possibile installare manualmente tools.jar nel repository locale utilizzando:

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

e quindi fare riferimento come ha fatto Cloudera, utilizzando:

<dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.6</version>
</dependency>

Il problema è nel supporto di Eclipse Maven, la domanda correlata è here .

Sotto Eclipse, la variabile java.home è impostata sul JRE che è stato utilizzato per avviare Eclipse, non per il build JRE. Il JRE di sistema predefinito da C:\Program Files non include JDK, quindi tools.jar non viene trovato.

Per risolvere il problema devi avviare Eclipse usando JRE dal JDK aggiungendo qualcosa come questo a eclipse.ini ( prima di -vmargs !):

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

Quindi aggiorna le dipendenze Maven (Alt-F5) (L'aggiornamento del progetto non è sufficiente).


Questo ha funzionato per me:

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>

Se jdk.tools è presente nel repository .m2. Ancora ottieni l'errore qualcosa del genere:

Manufatto mancante: jdk.tools ..... c: ... / jre / ..

In buildpath-> configure build path -> Libraries.Just modifica la libreria di sistema JRE da JRE a JDK.


Ho anche affrontato questo problema perché ho appena installato JRE non con JDK . Quindi, aggiungere dipendenza per jdk.tools non può risolverlo perché tools.jar non esisteva nella mia directory $ {JAVA_HOME} / lib / .

Ora ho scaricato e installato JDK per sistemarlo.


forse sistema installa il pacchetto jdk, ma forse alcuni strumenti di sviluppo o plugin.

Trovo questo problema sotto opensuse ENV. e installo java-1_6_0-openjdk-devel

il problema è scomparso ..


Uso qui sotto nel mio progetto MR.

<exclusions>
                <exclusion>
                    <artifactId>jdk.tools</artifactId>
                    <groupId>jdk.tools</groupId>
                </exclusion>
</exclusions>

Per me, niente ha funzionato fino a quando ho apportato questa modifica al mio pom.xml:

<build>
...
    <plugins>
    ...
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <fork>true</fork>
                <executable>C:\Program Files\Java\jdk1.7.0_45\bin\javac.exe</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

Altre note

Ho potuto vedere che m2e stava eseguendo in un JRE, non nel JDK. Nulla di ciò che ho fatto ha cambiato questa situazione, inclusa l'aggiunta a eclipse.ini:

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

Alla fine non ho mai avuto m2e da ​​eseguire in un JDK, ma impostare il compilatore Java esplicitamente (come sopra) ha fatto il trucco.





java maven maven-2 hadoop cloudera