web-dev-qa-db-fra.com

JAVA_HOME sur OSX avec Eclipse et Maven

J'ai récemment mis en place une machine OSX et j'ai du mal à faire en sorte que Maven récupère Java_HOME lors de l'exécution dans Eclipse.

J'ai déjà fait les choses suivantes:

  1. Définissez Java_HOME dans ~/.bash_profile avec export Java_HOME=$(/usr/libexec/Java_home)
  2. Spécifiez le VM pour Eclipse dans Eclipse.ini à -vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/Java
  3. Définissez Java_HOME dans /etc/mavenrc avec echo Java_HOME=\/usr/libexec/Java_home -v 1.7` | Sudo tee -a/etc/mavenrc`

Depuis l'interface de ligne de commande, tout semble conforme aux attentes. Java -version imprime:

Java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

echo $Java_HOME imprime:

/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

mvn -v imprime:

Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 17:22:22+0200)
Maven home: /usr/local/Cellar/maven/3.1.1/libexec
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9", Arch: "x86_64", family: "mac"

Exécuter mvn install dans un projet à partir de la CLI fonctionne également. Cependant, il en va de même pour Eclipse:

Failed to execute goal org.Apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar (attach-javadocs) on project suppress-warnings: MavenReportException: Error while creating archive: Unable to find javadoc command: The environment variable Java_HOME is not correctly set.

Dans Eclipse > Preferences > Java > Installed JREs, je vois que JDK 7 avec le même emplacement que celui spécifié dans Java_HOME est défini par défaut et également utilisé pour mon projet. La commutation entre le runtime Maven intégré et l'installation externe donne les mêmes résultats.

Où ou comment dois-je définir Java_HOME pour qu'un processus Maven démarré à partir d'Eclipse obtienne le bon emplacement Java_HOME?

12
user3054594

Le problème est que sous Mac OSX, les variables d’environnement définies dans .bashrc ou .bash_profile ne sont exportées que dans des environnements de terminaux. Une application graphique intégrée, telle qu'Eclipse, ne les voit pas et, par conséquent, aucune configuration d'exécution exécutée à partir d'Eclipse.

La solution consiste à créer (s'il n'existe pas) ou à éditer un fichier /etc/launchd.conf et d'y ajouter la ligne suivante:

setenv Java_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

Bien sûr, modifié pour votre valeur Java_HOME réelle. (notez que l'astuce couramment utilisée dans .bash_profile avec $(/usr/libexec/Java_home) ne fonctionne pas dans launchd.conf - ou du moins, je ne pouvais pas le faire fonctionner)

Après cela, vous devrez redémarrer la machine. Après le redémarrage, les configurations d'exécution M2E Maven pourront voir la variable Java_HOME et s'exécuter correctement. 

13
Jeen Broekstra

Cela ne fonctionne plus dans YOSEMITE pour les applications graphiques! Comme Eclipse, ou tout ce qui a commencé avec Spotlight. (.bash_profile, launchd.conf ne fonctionne que pour les sessions de terminal.) Avant de démarrer Eclipse, ouvrez simplement une fenêtre de terminal et donnez la commande suivante:

launchctl setenv Java_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(Avec votre chemin d'installation! Peut-être fonctionne-t-il avec $ (/ usr/libexec/Java_home) au lieu du chemin complet également.)

Consultez l'excellent article sur la solution permanente ici: La définition de variables d'environnement via launchd.conf ne fonctionne plus sous OS X Yosemite?

3

Je ne peux pas commenter Jeen Broekstra répond parce que je suis un novice :-(

Sa solution est bonne, il ne reste plus qu’à être améliorée.

Dans /etc/launchd.conf il suffit de mettre l'instruction

getenv Java_HOME

Puis, dans /etc/bashrc

export Java_HOME=`/usr/libexec/Java_home`

Ensuite, reconnectez-vous (il n'est pas nécessaire de redémarrer ;-) et Eclipse fonctionne comme prévu w.r.t. Maven.

3
Roberto Pose

Eclipse vous permet de spécifier des variables d'environnement de lancement. Faites-le là.

2
Rob

Cette solution a fonctionné le mieux pour moi: 

  • ajoutez le fichier/etc/mavenrc.
  • ajoutez Java = "/ chemin/à/votre/jdk" dans le fichier.
  • pas besoin de redémarrer ou de vous déconnecter, Maven récupère immédiatement la modification.

Voir plus de détails dans ce blog .

2
Christopher Yang

Dans Eclipse, vérifiez que le JRE de Maven est sélectionné correctement dans un JDK.

Le JRE (Java Runtime) Maven Runner doit spécifier un JDK (pas un JRE) , car la commande javadoc n’est pas incluse dans le JRE. Par conséquent, Use Internal JRE ne fonctionne pas avec maven attach-javadocs.

0
Florian Z.
  1. Dans votre répertoire personnel: (/ Users/{nom d'utilisateur})

  2. nano .bash_profile et ajoutez la ligne ci-dessous:

    exportation
    Java_HOME =/Bibliothèque/Java/JavaVirtualMachines/1.6.0_31-b04-413.jdk/Contenu/Accueil`

  3. Assurez-vous que le chemin "/Library/Java/JavaVirtualMachines/1.6.0_31-b04-413.jdk/Contents/Home"exist.

0
openmike

Recherchez le maven-javadoc-plugin artifactId dans le fichier pom.xml imprimant l'erreur et ajoutez le fichier Java.home en tant que configuration javadocExecutable: 

<plugin>
    ...
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
      <javadocExecutable>${Java.home}/../bin/javadoc</javadocExecutable>
    </configuration>
    ...
</plugin>

Raison: utiliser la valeur 'Java.home' propre à l'application est la meilleure approche, car elle supprime la dépendance vis-à-vis du jeu de variables locales des systèmes d'exploitation qui peut ou non différer dans un autre conteneur.

0
feistyfawn

J'ai rencontré le même problème. J'ai essayé la solution de Robert et Jeen, mais pour une raison quelconque, elle n'a pas fonctionné. Une solution très simple qui a fonctionné pour moi a été d'ajouter Java_HOME en tant que variable d'environnement dans Eclipse. Dans la configuration maven du projet Eclipse, ajoutez Java_HOME dans la liste des variables d'environnement.

0
Sarfaraz Khan

Un moyen simple de résoudre ce problème, ajoutez la configuration suivante à pom.xml

<javadocExecutable>${Java.home}/../bin/javadoc</javadocExecutable>

code complet:

<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
                <show>private</show>
                <nohelp>true</nohelp>
                <aggregate>true</aggregate>
                <charset>UTF-8</charset>
                <encoding>UTF-8</encoding>
                <docencoding>UTF-8</docencoding>
                <javadocExecutable>${Java.home}/../bin/javadoc</javadocExecutable>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>javadoc</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
0
Hanley Tang

Vous recherchez probablement ~/.MacOSX/environment.plist

Ajoutez une nouvelle ligne à environment.plist pour définir votre Java_HOME préféré, par exemple.

Java_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home

les envvars définis ici seront "vus" par des applications incluant Eclipse

0
bgausden