28 votes

JAVA_HOME est malmené par Maven

Je suis en train de rétrofiter un tas de projets Java existants avec une construction Maven unifiée. Comme chaque projet est mature et a une construction établie basée sur Ant, j'utilise maven-antrun-plugin pour exécuter les build.xml existants de la manière suivante:

            maven-antrun-plugin

                    compile

                        run

Quand j'exécute mvn compile, la construction échoue avec ce message:

[INFO] Une Ant BuildException s'est produite: L'erreur suivante s'est produite
       lors de l'exécution de cette ligne :
build.xml:175: Impossible de trouver un compilateur javac ;
com.sun.tools.javac.Main n'est pas dans le classpath.
Peut-être que JAVA_HOME ne pointe pas vers le JDK.
Il est actuellement défini sur "C:\Java\jdk1.6.0_13\jre"

Ce qui me surprend, c'est

  1. J'ai JAVA_HOME=C:\Java\jdk1.6.0_13 dans ma configuration d'environnement et lorsque mvn.bat est exécuté, c'est exactement la valeur que j'obtiens, cependant, comme vous pouvez le voir dans le message d'erreur, cela apparaît comme C:\Java\jdk1.6.0_13\jre
  2. Si j'exécute ant compile, tout se compile très bien

Cela signifie-t-il que peut-être maven-antrun-plugin fait quelque chose comme set JAVA_HOME=%JAVA_HOME%\jre? J'ai recherché dans mes fichiers batch/construction mais je ne trouve pas où ce changement se produit

29voto

Drew Wills Points 4768

Le problème est que Maven2 démarre le plugin antrun avec le JRE et non pas le JDK. Ce lien contient plus d'informations, y compris une solution.

22voto

Lonzak Points 1408

C'est le revers des liens externes dans une réponse acceptée. Codehaus a fermé et la solution a disparu. Pour référence, voici le contenu derrière le lien - vous devez essentiellement copier le bloc ... dans votre plugin antrun...

Le plugin maven-antrun exécute ant avec JAVA_HOME configuré sur le sous-répertoire jre du JDK, même si le JAVA_HOME pour l'exécution globale est un JDK. Il existe une documentation ailleurs sur la création d'une dépendance au niveau du projet pour tools.jar du JDK, mais cela n'aide pas antrun, qui est un plugin. Le profil suivant fait le travail. Les '..' dans le chemin remontent passé le répertoire 'jre' vers le répertoire lib.

          tools.jar

              org.apache.maven.plugins
              maven-antrun-plugin

                  com.sun
                  tools
                  1.5.0
                  system
                  ${java.home}/../lib/tools.jar

9voto

dvtoever Points 1377

J'ai pu résoudre ce problème en insérant la définition de propriété suivante dans mon fichier ant build.xml :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X