web-dev-qa-db-fra.com

Maven ne sélectionne pas correctement Java_HOME

Je suis sur l'environnement Windows et utilise maven pour compiler mon projet. Bien que je vienne de créer le projet et d’ajouter les dépendances de différentes libararies.

Comme je les ai ajoutés, maven a commencé à se plaindre du tools.jar manquant. J'ai donc ajouté ci-dessous à mon pom.xml:

<dependency>
  <groupId>com.Sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>${Java.home}/../lib/tools.jar</systemPath>
</dependency>

Quand j'ai lancé l'installation de maven, j'ai eu une erreur pour le pot manquant comme ci-dessous:

[ERROR] Failed to execute goal on project GApp: Could not resolve dependencies for project GApp:GApp:war:0.0.1-SNAPSHOT: Could not find artifact com.Sun:tools:jar:1.6 at specified path C:\Program Files\Java\jre6\lib\tools.jar -> [Help 1]

Le problème est que le tools.jar est dans "C:\Program Files\Java\jdk1.6.0_26\lib" et qu'il est correctement défini dans la variable d'environnement Java_HOME mais le maven est toujours à la recherche dans le dossier jre comme dans le message d'erreur "C:\Program Files\Java\jre6\lib\tools.jar".

C:\>echo %Java_HOME%
C:\Program Files\Java\jdk1.6.0_26

Fait intéressant : lorsque j'ai défini le chemin complet dans la dépendance, cela a fonctionné correctement. Mais je ne veux pas coder durement.

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

Quelqu'un peut-il suggérer une solution dynamique pour cela?

24
Garry

C'est un bogue du support Eclipse Maven. Eclipse ne prend pas en charge toutes les propriétés Maven globales selon les spécifications Maven .

Selon les spécifications:

$ {Java.home} spécifie le chemin d'accès à l'environnement JRE_HOME actuel utiliser avec des chemins relatifs pour obtenir par exemple

Au moins dans Eclipse 4.3.1, ce n’est pas le cas, ici Java.home pointe toujours sur le JRE utilisé pour lancer Eclipse}, et non sur le JRE de construction.

Pour résoudre le problème, vous devez démarrer Eclipse à l'aide du JRE de JDK en ajoutant quelque chose comme ceci à Eclipse.ini (avant-vmargs!):

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

Il semble que votre Java_HOME soit configuré pour pointer vers le JRE dans Eclipse.

2
Maddy

Vous ne devez JAMAIS utiliser les dépendances de la portée du système. Tout le code dans tools.jar sera déjà disponible uniquement via la machine virtuelle Java en cours d'exécution. Vous devriez supprimer cette dépendance complètement .. 

De plus, afin de vérifier ce que Maven utilise à l'exécution, il suffit d'appeler

mvn -v

Si vous rencontrez toujours une dépendance au fichier jar en tant que problème, l'une des dépendances que vous avez ajoutées a cette dépendance (et sa qualité est vraiment mauvaise). Pour savoir lequel est utilisé 

mvn dependency:tree

ou si cela échoue, supprimez simplement une dépendance après l'autre jusqu'à ce que la commande ci-dessus ait résolu le problème. 

Ensuite, quand vous savez d'où ça vient, vous pouvez décider quoi faire. Un chemin serait d'utiliser une exclusion sur la dépendance qui tire les outils.

2
Manfred Moser

La propriété Maven $ {Java.home} est définie et prise à différents endroits en fonction de votre exécution Eclipse: 

  • à partir du JRE par défaut sélectionné pour l'espace de travail

    Fenêtre> Préférences> Java> JRE installés

  • du projet spécifique Eclipse, 

    Chemin de construction Java> Bibliothèques> Bibliothèque système JRE

  • à partir de la configuration d'exécution.

    Configurations d'exécution> Configuration d'exécution spécifique> JRE

Rappelez-vous que vos chemins d’accueil JRE pointent vers un JDK ou un JRE sous JDK

1
Alejandro

On dirait que vous utilisez Maven dans Eclipse. Eclipse ne consulte pas Java_HOME.

Assurez-vous que vous avez défini votre JRE dans les préférences Eclipse sur votre JDK souhaité.

0
groodt

Lorsque vous ajoutez la variable d'environnement Java_HOME, s'il y a des espaces dans le chemin, vous devez envelopper le tout entre guillemets.

0
gordy

Vous utilisez peut-être une mauvaise installation Maven. Basculez-le dans Fenêtre> Préférences> Maven> Installations. Le mien a été installé chez Fedora Maven; revenir à la valeur par défaut (la version intégrée à m2e) corrige le problème pour moi.

Je suppose que ce problème est dû au fait que l'installation de Fedora Maven utilisait OpenJDK de Fedora, ce qui place probablement tools.jar dans un emplacement étrange (tout ce qui concerne OpenJDK de Fedora est étrange et non standard). Maven ne peut donc pas le trouver.

0
Luke Hutchison