web-dev-qa-db-fra.com

Pourquoi Maven utilise JDK 1.6 alors que ma Java -version est 1.7

Je suis nouveau sur Maven, et aussi sur MacOS.

J'ai installé maven dans mon terminal, et lors de l'obtention des paramètres de version (avec 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 celles-ci:

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"
155
Ninja

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

226
Gaurav Vaish

Entrer dans

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

et mettez à jour le lien symbolique CurrentJDK vers lequel pointer

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

45
Oskar

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>
40
DEREK LEE

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 compilateur IDE par défaut utilisé par votre coureur maven.

27
redFIVE

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

Par défaut, le plugin maven compiler 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>
9
Sergey Luchko

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, un onglet JRE permet de spécifier le moteur d'exécution à exécuter. Notez que cette configuration remplace ce qui se trouve dans le fichier pom.xml.

4
Yonatan Abrego

Je suis en retard par rapport à cette question, mais je pense que la meilleure façon de gérer les versions de JDK sur MacOS consiste à utiliser le script décrit à l'adresse suivante: http://www.jayway.com/2014/01/15/how-to -switch-jdk-version-sur-mac-os-x-maverick /

2
Yuri

S'il vous plaît vérifier la compatibilité. J'ai lutté avec mvn 3.2.1 et jdk 1.6.0_37 pendant plusieurs heures. Toutes les variables ont été définies mais ne fonctionnaient pas. Enfin, j'ai mis à niveau jdk to 1.8.0_60 et mvn 3.3.3 et 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;
2
Vikas Singh

La solution de @MasterGaurav fonctionne parfaitement,

Je mets normalement le chose 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_ls deux obtenir tout le JVM disponible sur votre ordinateur, exécuter Java_use 1.7 pour utiliser la version 1.7 à la fois pour Java et maven.

1
Wei Qiu