Pourquoi Maven utilise JDK 1.6 mais ma version java est 1.7

159

Je suis nouveau sur maven, et aussi sur MacOS.

J'ai configuré maven dans mon terminal, et lors de l'obtention des paramètres de version (en utilisant mvn -v), il semble qu'il utilise JDK 1.6, alors que JDK 1.7 est installé. Y a-t-il quelque chose qui ne va pas?

Les commandes que j'entre sont les suivantes:

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"
Ninja
la source
2
Pouvez-vous publier vos variables PATH et JAVA_HOME?
Jeanne Boyarsky
@JeanneBoyarsky blues: helloworld Ninja $ echo $ JAVA_HOME blues: helloworld Ninja $ echo $ PATH / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin
Ninja
@JeanneBoyarsky est-ce que vous voulez, monsieur?
Ninja
3
Je suis une femme (donc me référer à «monsieur» est incorrect) et oui. Veuillez essayer de configurer votre JAVA_HOME. Votre problème semble similaire à celui-ci: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky
2
@JeanneBoyarsky Pardonnez ma grossièreté.L'URL que vous avez donnée est le problème que je rencontre.Merci beaucoup ~
Ninja

Réponses:

227

ajoutez ce qui suit à votre ~/.mavenrc:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

Deuxième solution:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

Gaurav Vaish
la source
oui, votre réponse est correcte .Le JAVAHOME est requis.Je modifie le / etc / profile à la place
Ninja
8
Eh bien, l'ajout à ~ / .mavenrc garantit que les autres applications ne sont pas affectées. Seul mvn reprend cette version de JDK. :)
Gaurav Vaish
43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla
1
La solution .mavenrc a parfaitement fonctionné pour moi. Je me suis également rendu compte que je n'avais installé que JDK 1.8 et non JRE 1.8. Merci Gaurav!
timothyclifford
2
Si vous utilisez jenv sur un mac, cela peut être: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"for ~/.mavenrcfile.
Eddy
46

Entrer dans

/System/Library/Frameworks/JavaVM.framework/Versions

et mettez à jour le CurrentJDKlien symbolique pour pointer vers

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Par exemple

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/ CurrentJDK

Maintenant, cela fonctionnera immédiatement.

Oskar
la source
1
L'astuce du lien symbolique CurrentJDK ne semble plus fonctionner avec maven 3.3.1, mais la modification de ~ / .mavenrc le fait.
Stefan L
41

Vous pouvez aussi faire,

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>
DEREK LEE
la source
5
Cela ne fonctionne pas si maven fonctionne avec java 6. Il plante juste avec[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey
27

Vous pouvez également indiquer explicitement à maven pour quelle version java compiler. Vous pouvez essayer d'ajouter le maven-compiler-pluginà votre pom.

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Si vous avez importé un projet maven dans un IDE, il existe probablement un paramètre maven dans votre IDE pour le compilateur par défaut utilisé par votre exécuteur maven.

redFIVE
la source
o , merci. mais je n'ai pas commencé. Je viens de 'mvn -v' ... la raison est que je n'assigne pas JAVA_HOME
Ninja
Notez que cela affecte uniquement votre code qui est compilé. J'ai rencontré ce problème et je suis venu ici parce qu'une bibliothèque externe que j'utilisais a été compilée pour Java 7 et Maven essayait de l'exécuter avec Java 6
Cela ne fonctionne pas si maven fonctionne avec java 6. Il plante juste avec[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey
Cela fonctionnera dans le cas où le paramètre maven dans votre IDE pour le compilateur par défaut est inférieur à 1,7, mais le jdk installé est supérieur à 1,7
John Doe
9

Ça m'a aidé. Ajoutez-le simplement dans votre pom.xml.

Par défaut, le plugin du compilateur maven utilise Java 1.5 ou 1.6, vous devez le redéfinir dans votre pom.xml.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
Sergey Luchko
la source
4

Pour les utilisateurs d'Eclipse. Si vous avez une configuration d'exécution qui nettoie le package par exemple.

Dans le panneau Exécuter la configuration, il existe un onglet JRE dans lequel vous pouvez spécifier le moteur d'exécution sur lequel il doit s'exécuter. Notez que cette configuration remplace tout ce qui se trouve dans le pom.xml.

Yonatan Abrego
la source
2

Veuillez vérifier la compatibilité. J'ai lutté avec mvn 3.2.1et jdk 1.6.0_37pendant de nombreuses heures. Toutes les variables ont été définies mais ne fonctionnaient pas. Enfin , je mis à jour jdk to 1.8.0_60et mvn 3.3.3et cela a fonctionné. Variables d'environnement comme suit:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;
Vikas Singh
la source
1

La solution de @MasterGaurav fonctionne parfaitement,

Je mets normalement le commutateur java dans une fonction zsh:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

Ensuite, vous pouvez exécuter java_lsdeux pour obtenir tous les jvm disponibles sur votre machine, exécuter java_use 1.7pour utiliser la version 1.7 pour java et maven.

Wei Qiu
la source