web-dev-qa-db-fra.com

Compiler du code Java 7 via Maven

Mes listes de fichiers pom

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

Cependant, sur mvn clean install, je reçois

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/Java -version est (which Java points ici)

Java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac pointe également vers la bonne version de Java

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

J'utilise zsh sur cette machine (echo $0 renvoie -zsh)

Dans mon .zshrc, j'ai défini:

 33 # HOME
 34 Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${Java_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

Lorsque je lance mvn clean install --debug, je constate que j’utilise Java 6

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Où pourrait-il être défini? J'ai source (d) mon .zshrc plusieurs fois.

154
JAM

Vérifiez le script mvn dans votre installation Maven pour voir comment il construit la commande. Peut-être que vous ou quelqu'un d'autre avez codé en dur un Java_HOME et l'avez oublié.

153
Ryan Stewart

essayez d’utiliser une version plus récente du plugin maven compiler: 

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

en outre, il est préférable de spécifier globalement le codage du fichier source dans maven:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

EDIT: Comme cette réponse continue d'attirer l'attention, je voudrais juste signaler que les dernières valeurs (à la dernière édition) sont 3.2 pour le plugin maven compiler et 1.8 pour Java, ainsi que des questions sur la compilation de Java 8. le code via maven doit apparaître bientôt :-)

109
radai

J'ai eu le même problème et pour résoudre cela, je suis cet article de blog: http://www.mkyong.com/Java/how-to-set-Java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export Java_HOME=$(/usr/libexec/Java_home)

$ source .bash_profile

$ echo $Java_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

des tâches spéciales à @mkyong

EDIT: Maintenant, j'utilise: jEnv + sdkman

48
eliocapelati

S'il vous plaît vérifier votre pom.xml pour les balises ci-dessous

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

il faut pointer la version requise de jdk

26
user4010880

J'ai eu le même problème. J'ai constaté que c'est parce que le script Maven examine le lien CurrentJDK ci-dessous et trouve un JDK 1.6. Même si vous installez le dernier JDK, cela n’est pas résolu. Bien que vous puissiez simplement définir Java_HOME dans votre script $ HOME/.bash_profile, j'ai choisi de corriger le lien symbolique à la place comme suit:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Notez que CurrentJDK pointe sur 1.6.0.jdk

Pour résoudre ce problème, j’ai lancé les commandes suivantes (vous devriez vérifier votre version installée et l’adapter en conséquence).

Sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
19
Chris McCarthy

Vous devez vérifier la version de Maven:

mvn -version

Vous trouverez la version Java utilisée par Maven pour la compilation. Vous devrez peut-être réinitialiser Java_HOME si nécessaire.

18
Loi Cao

Diagnostics:

Vous pouvez voir quelle version de Java utilise Maven en exécutant "mvn --version"

Solution pour Debian:

Le script mvn définit la variable env Java_HOME en interne en recherchant javac (lequel javac). Par conséquent, si plusieurs versions de Java sont installées simultanément, par exemple, JDK 6 et JDK 7 et utilisez le système Alternatives Debian pour choisir entre eux, même si vous avez changé l'alternative pour "Java" en JDK 7, mvn utilisera toujours JDK 6. Vous devez également modifier l'alternative pour "javac". Par exemple.:

# update-alternatives --set javac /usr/lib/jvm/Java-7-openjdk-AMD64/bin/javac

MODIFIER:

En réalité, une solution encore meilleure consiste à utiliser update-Java-alternatives (par exemple).

# update-Java-alternatives -s Java-1.7.0-openjdk-AMD64

comme détaillé dans https://wiki.debian.org/JavaPackage , car cela changera all les alternatives à divers outils Java (il y en a une douzaine).

4
user323094

Pourriez-vous essayer un plugin plus récent? sur le site maven:

<version>3.0</version>

J'ai vu aussi ce qui suit:

<compilerVersion>1.7</compilerVersion>
2
Joop Eggen

faites un clic droit sur votre projet dans Eclipse et ouvrez "Run Configurations" .. vérifiez la version de jre ici . Parfois, cela ne changera pas par défaut dans Eclipse, même après avoir changé la version dans le chemin de construction.

2
ravinder reddy

Essayez de modifier les paramètres du compilateur Java dans Propriétés dans Eclipse.

Goto: Préférences-> Java-> Compilateur-> Niveau de conformité du compilateur-> 1.7 Appliquer Ok.

Redémarrez l'IDE.

Confirmez les paramètres du compilateur pour le projet - Allez à: Propriétés du projet-> Compilateur Java-> Désélectionnez (utiliser la conformité de l'environnement d'exécution 'JavaSE-1.6' sur le chemin de génération Java.) Et sélectionnez 1.7 dans le menu déroulant. (Ignorer si déjà 1.7)

Redémarrez l'IDE.

Si le problème persiste, exécutez des cas de test individuels à l’aide de la commande terminal-

mvn -Dtest=<test class name> test
2
Mithun Khatri

Vous ne savez pas exactement ce que le système d'exploitation est utilisé ici, mais vous pouvez éliminer beaucoup de versions Java qui se trouvent dans un fichier debian/ubuntu avec update-Java-alternatives pour définir le système par défaut de jvm.

#> update-Java-alternatives -l
Java-1.6.0-openjdk-AMD64 1061 /usr/lib/jvm/Java-1.6.0-openjdk-AMD64
Java-1.7.0-openjdk-AMD64 1071 /usr/lib/jvm/Java-1.7.0-openjdk-AMD64
Java-6-Sun 63 /usr/lib/jvm/Java-6-Sun
Java-7-Oracle 1073 /usr/lib/jvm/Java-7-Oracle

Pour en définir un nouveau, utilisez:

#> update-Java-alternatives -s Java-7-Oracle

Pas besoin de définir Java_HOME pour la plupart des applications.

2
Bruce Edge

{Java_1_4_HOME}/bin/javacyVous pouvez également essayer ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{Java_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>
1
baybora.oren

Pour une compilation spécifique nécessitant une machine virtuelle Java (non définie par défaut, /etc/alternatives/Java), envisagez de préfixer la commande mvn avec Java_HOME comme ceci,

Java_HOME=/usr/lib/jvm/Java-7-openjdk-AMD64/ mvn package

Nous supposons ici que la valeur par défaut est Java 8, alors que pour le projet spécifique concerné, nous avons besoin de Java 7.

1
elm

Vous spécifiez peut-être une version incorrecte de Java . Java -version (dans votre terminal) pour vérifier la version de Java que vous utilisez . Allez à maven-compile-plugin pour le dernier compilateur maven version Votre plugin peut ressembler à ceci si vous utilisez Java 6 et que la dernière version du plugin maven compiler est la version 3.1.

<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
0
Henry

Aucune des réponses précédentes n'a complètement résolu mon cas d'utilisation. 

Nécessaire pour supprimer le répertoire en cours de construction. Nettoyer. Et puis réinstallez. Ressemble à un problème d'autorisations silencieuses.

0
piperchester

J'ai eu ce problème dans IntelliJ IDEA 14 jusqu'à ce que je sois entré dans le menu Fichier -> Structure du projet, changeant le SDK du projet en 1.7 et le niveau de langue du projet en 7.

0
Jon Onstott

Ok, je viens de résoudre ce problème moi aussi. Il est plus important que votre Java_HOME, si vous n'avez pas une version inférieure ou aucune version comparée aux propriétés source/cible du plugin Maven, vous obtiendrez cette erreur.

Assurez-vous d’avoir une bonne version dans votre Java_HOME et qu’elle soit incluse dans votre PATH.

0
Silviu Burcea

J'avais ce problème lorsque je travaillais avec Eclipse, je devais modifier le chemin de génération du projet afin qu'il se réfère à jre

0
osama yaccoub