web-dev-qa-db-fra.com

Artefact manquant com.Sun: tools: jar

J'ai suivi le didacticiel de démarrage, mais je suis bloqué après avoir importé le projet playn à l'aide de Maven. J'utilise Eclipse Indigo sous Windows 7 64 bits.

Tous les projets importés ont la même erreur:

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

Après quelques heures de recherche sur les forums, j'ai essayé:

Installation de la dernière version de Java 1.6.029 Modification de ma variable d’environnement Java_HOME pour pointer sur \program files\Java\jdk1.6_029 Modification de mes préférences Eclipse Java pour utiliser le code JRE jdk1.6_029.

J'aimerais vraiment expérimenter avec playn, mais je ne parviens pas à trouver de réponse à la question sur certains messages. Certaines personnes disent que Sun a supprimé quelque chose du jdk 64 bits, d'autres que vous devez modifier vos fichiers xml, de nombreuses personnes ont affirmé que vous aviez modifié votre Java_HOME et une autre vous avait dit de modifier vos options VM pour Eclipse.

Toute aide pour résoudre ce problème serait appréciée, et éventuellement utile pour beaucoup, car je n’ai pas de configuration particulière ici.

(edit) Voici le pom.xml dans le premier projet. Eclipse signale une erreur dans la ligne qui dit:

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

Je viens de poster sur cette question à propos de ce même problème et de la façon dont je l'ai résolu, mais je vais le coller (et le développer) ici aussi, car cela semble plus pertinent.

J'avais le même problème lorsque j'utilisais Eclipse dans Windows 7, même lorsque j'ai supprimé le JRE de la liste des JRE dans les paramètres Eclipse et que le JDK venait juste d'arriver.

Ce que j'ai fini par devoir faire (comme vous l'avez mentionné dans votre question) était de modifier la ligne de commande du raccourci que j'utilise pour lancer Eclipse afin d'y ajouter l'argument -vm de la manière suivante:

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

Bien sûr, vous devez ajuster cela pour qu'il pointe vers le répertoire bin de votre installation JDK. Eclipse lui-même s'exécute à l'aide du JDK au lieu de JRE, ce qui lui permet de trouver le tools.jar correctement.

Je pense que cela a à voir avec la façon dont Eclipse trouve son JRE par défaut quand aucun n'est spécifié. Je suppose qu'il a tendance à préférer le JRE au JDK (pourquoi, je ne sais pas) et choisit le premier JRE compatible qu'il trouve. Et si elle se détache des clés de registre Windows, comme le suggère la réponse de Vladiat0r, il cherche d'abord la clé HKLM\Software\JavaSoft\Java Runtime Environment au lieu de la clé HKLM\Software\JavaSoft\Java Development Kit.

53
Kanmuri

J'ai rencontré le même problème et la façon dont j'ai pu le résoudre était d'ajouter l'emplacement de dépendance tools.jar dans le pom.xml. Ainsi:

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

Assurez-vous de remplacer le <systemPath> par l'emplacement où se trouve votre fichier tools.jar.

23
Denny

J'ai eu le même problème lors du développement d'une application de service Web simple. Dans mon cas, j'ai dû ajouter un plug-in Codehous afin d'obtenir les bibliothèques jaxws. Cependant, Maven Pom a continué à poser des questions sur le fichier de fichiers d'outils. 

Je dois dire que les commentaires ci-dessus sont corrects, vous pouvez inclure l'entrée ci-dessous dans le fichier 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>

Mais que va-t-il se passer lorsque vous devez déployer sur une instance de production? Vous pouvez remplacer le chemin par une référence à une variable d’environnement système, mais cela n’a toujours pas l’air attrayant, du moins pour moi.

J'ai trouvé une autre solution dans un commentaire StackOverflow:

Maven 3 Problème d'artefact

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

Ils suggèrent d'inclure une déclaration d'exclusion pour le bocal à outils et cela fonctionne. En résumé, vous pouvez inclure une règle d’exclusion dans votre dépendance et éviter d’avoir le problème tool.jar:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.Sun</groupId>
            </exclusion>
        </exclusions>
21
Cristian Colorado

Aucune des autres réponses ne l'a fait pour moi. Qu'est-ce que c'était que de vérifier la "hiérarchie de dépendance" du fichier pom.xml dans Eclipse, où donner un filtre "tools" a révélé que j'avais une réelle dépendance à tools.jar:

 Eclipse View

Donc le coupable pour moi était la suivante:

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

L'ajout d'une exclusion l'a corrigé:

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

L'exclusion ne semble pas avoir d'inconvénient.

13
eis

J'ai résolu ce problème dans les paramètres d'Eclipse 4.3 - uniquement en ajoutant des bibliothèques JDK aux bibliothèques de JRE.

Allez dans Windows -> Paramètres -> Java -> JRE installés -> sélectionnez JDK et cliquez sur Édition -> cliquez sur Ajouter des JAR externes et ajoutez tools.jar (placés dans JDK/lib)

6
Sealsix

La même chose avec moi et Windows 7. J'ai fini par ajouter deux lignes à Eclipse.ini:

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

J'ai essayé d'utiliser %Java_HOME% ici, mais cela n'a pas fonctionné.

5
Jakub Adamek

Après avoir lutté pendant un moment, j'ai finalement réussi à utiliser ceci avec Eclipse.ini au lieu de la ligne de commande. Après avoir enfin lu la documentation , je me suis rendu compte que l'argument -vm devait se trouver sur une ligne distincte, sans guillemets, et devant tout -vmargs:

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

Vérifiez la version du JDK sur votre machine et dans pom.xml, les deux doivent être identiques.

<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>
3
arunkumar sambu

Comme d'autres affiches l'ont déclaré, le problème ici est lié à la JRE qu'Eclipse utilise pour ne pas pouvoir trouver le bocal à outils. J'ai résolu le problème en prenant une direction un peu différente de celle énoncée ci-dessus, et cela était dû à la façon dont mes projets et mon environnement.

Eclipse 4.5 nécessite au moins Java 7 pour l'exécution, j'ai donc configuré mon système pour utiliser un JRE Java 8 situé à l'emplacement C:\Java\jre1.8.0_45.

Ensuite, j'utilise un fichier POM qui suppose que je travaille avec un JDK Java 6. 

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

Je ne suis pas autorisé à modifier le fichier POM, j'ai donc dû faire un peu de joker. J'ai copié le fichier tools.jar à partir de mon JDK Java 6, créé le répertoire C:\Java\lib et le collé à cet emplacement. J'ai ensuite redémarré Eclipse et nettoyé mon projet. Et les erreurs VOILA ont disparu.

Ce n'est pas une solution élégante, et je penserais que la bonne solution serait de changer la configuration du POM, mais comme je n'ai pas pu le faire, cela fonctionne. 

1
Rick Velilla II


<systemPath>.

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

J'ai une erreur similaire . C'est parce que JDK n'est pas correctement défini dans Eclipse . Le concombre a besoin de JDK avec JRE, ajoutez donc une dépendance inférieure à votre 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
user1140969

Dans l'onglet POM effectif des fichiers pom, je vois le chemin de dérivation suivant: C:\Program Files\Java\jre6/../lib/tools.jar et je pense que ce n'est pas un chemin valide dans Windows. J'ai essayé de copier le fichier tools.jar dans le dossier jre6/lib ainsi que dans Java/lib sans succès.

La valeur "C:\Program Files\Java\jre6" provient du registre. 

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

Et définissez la clé JavaHome sur l'emplacement d'installation de votre JDK JRE. Alors toutes les erreurs du compilateur sont parties.

La réinstallation du JDK n'a pas résolu le problème. La définition de la variable d’environnement système Java_HOME ou Java.home n’a pas aidé.

L’autre alternative que j’ai vue consiste à ajouter la dépendance avec le bon chemin dans chaque fichier pom xml, mais les échantillons playn contiennent beaucoup de fichiers qu’il est très pénible d’éditer.

Ce sont les résultats POM effectifs, qui montrent le chemin FAUX!

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

J'ai eu le même problème sur Windows 7 et Eclipse 3.7 J'ai réussi à le réparer en commençant par 

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

Vous pouvez démarrer une cmd et lancer Eclipse comme cela, ou vous pouvez modifier votre raccourci et ajouter -vm "D:\JDK6\bin" en tant qu'argument dans la "section cible".

Sidenote, j'ai aussi essayé d'ajouter -vm "D:\JDK6\bin" à Eclipse.ini mais cela n'a pas fonctionné . Et l'ajout de JRE6 ne fonctionnera pas car il ne contient pas tools.jar dans "lib". annuaire. Seul JDK le fait.

0
Tiberiu Rogojan

J'ai utilisé le correctif Eclipse.ini:

openFile
-vm (Your Java Home JDK here)

Par exemple, -vm C:\Java\JDK\1.6.

Devait aussi changer JRE en JDK:

Dans Eclipse IDE, accédez à:

  1. Fenêtre -> Préférences -> JRE installés 
  2. Cliquez sur Ajouter (pour localiser le nouveau JRE)
  3. Sélectionnez JVM standard -> suivant 
  4. Cliquez sur Répertoire pour localiser JRE home, mettez JDK_INSTALL_LOCATION et terminez.
  5. Allez dans les propriétés de votre projet Java -> Chemin de construction Java -> Bibliothèques -> sélectionnez JRE -> Édition -> sélectionnez JRE par défaut de Workspace -> cliquez
  6. Effectuez un nettoyage complet de votre espace de travail avec project -> clean.
0
ahaaman

Comprenons pourquoi ce problème est arrivé:

$ mvn -version

Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20: 00: 29 + 01: 00) Maven home: C:\Program Files\Apache\maven-3.6.1 Java version: 1.8.0_221 , fournisseur: Oracle Corporation, exécution: C:\Program Files\Java\jre1.8.0_221 Paramètres régionaux par défaut: en_GB, codage de la plate-forme: Cp1252 Nom du système d'exploitation: "windows 10", version: "10.0", Arch: "AMD64", famille : "les fenêtres"

La commande "mvn -version" Maven retourne au-dessus de la sortie.

Nous pouvons voir que maven obtient le chemin d’exécution Java sous la forme "C:\Program Files\Java\jre1.8.0_221" si vous ne spécifiez pas la variable d’environnement Java_HOME. Et puis maven suppose que ce chemin est Java_HOME. C'est pourquoi lors de la création de l'application à partir de la commande Prompt ou de tout IDE, maven recherche le fichier tools.jar dans le chemin "% Java_HOME% ..\lib\tools.jar".

tools.jar est présent dans le chemin JDK, nous devons donc le mentionner à maven avant de l'utiliser. Maintenant, quelques machines sont construites avec jre déjà disponible, mais jdk n’est requis que pour le développement. C'est peut-être pour cette raison que maven choisit jre path automatiquement.

Pour plus d’aide, veuillez lire le code mvn.cmd disponible dans le chemin d’installation de maven.

0
Sambit Swain

Dans mon cas, j’exécutais Maven Build à partir d’Eclipse Run Configurations. Même après avoir modifié la configuration JRE par défaut pour qu'elle pointe vers le dossier d'installation JDK, le problème n'a pas été résolu pour moi. La raison en est qu’il existe un onglet JRE dans la configuration Maven Build - Run (voir l’image ci-dessous). Et cela pointait toujours vers mon installation JRE. Je l'ai modifié pour indiquer l'installation du JDK, puis j'ai exécuté Maven Build. Cette fois, cela a fonctionné . entrez la description de l'image ici

0
user8058203

J'ai résolu le problème en désinstallant JRE de mon système et en ne laissant que JDK. Réinstaller JDK ne suffit pas, car le programme d'installation Oracle JDK installe à la fois JDK et JRE

BTW, il me semble que ce bogue est responsable des problèmes: Java.home du JRE Eclipse est utilisé à la place de la construction JRE

0
michaldo

Après avoir essayé tout ce qui précède, j'avais toujours le même problème.

  • La variable d’environnement PATH pointe sur JDK 1.7\bin
  • Ma variable d’environnement Java_HOME a été pointée vers le JDK 1.7
  • Mon Eclipse.ini avait l'entrée javaw -vm pointant vers JDK 1.7
  • Ma préférence Eclipse avait JDK 1.7 en tant que JRE installé.
  • Mon chemin de génération de projet utilisait JDK 1.7.

Puis j'ai essayé ce qui suit,

  • Ouvrez une invite de commande et tapez Java -version. Il m'a montré une version 1.8 de JRE.

  • Ouvrez une invite de commande et allez à l'emplacement du répertoire bin du JDK 1.7 et saisissez Java -version. Cette fois, il a montré correctement 1.7.

Puis, après avoir creusé à quelques endroits, j’ai constaté qu’en dehors des emplacements susmentionnés, il existait des emplacements supplémentaires pour le runtime Java.

Registre

Il existe également une clé de registre dans laquelle l'emplacement de JRE est spécifié sous

HKLM\Software\Javasoft\Version

J'ai changé les entrées ici pour pointer sur le JDK 1.7

Données de programme

Le répertoire "C:\ProgramData\Oracle\Java\javapath" est présent dans la variable d’environnement PATH et contient des raccourcis vers Java, javaw, etc. ... La cible de ces raccourcis était JRE 1.8. ( Je pense que c’était le principal problème ) J’ai modifié les raccourcis pour indiquer le bon exe de JDK.

Une fois que tout cela a été fait. J'ai ouvert Eclipse toutes les erreurs jdk.tools pom.xml ont disparu.

0
Ash R

J'ai eu ce problème et il s'avère que JBossDevStudio 9.1 sur Windows est un programme 32 bits. Eclipse, et donc le JBossDevStudio, ne fonctionne pas avec le type de machine virtuelle incorrect. Eclipse 64 bits nécessite une machine virtuelle Java 64 bits et Eclipse 32 bits nécessite une machine virtuelle Java 32 bits. Ainsi, configurer Eclipse pour fonctionner avec mon JDK 64 bits installé ne fonctionnait pas.

L'installation d'un JDK 32 bits et l'exécution d'Eclipse à partir de cela ont résolu le problème.

Au moins pour l'un de mes projets, un autre où j'avais essayé de configurer un JDK d'exécution dans les propriétés du projet Eclipse est toujours endommagé.

0
Samuel Åslund