Compilation de code Java 7 via Maven

155

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 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 -versionest ( which javapointe 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 version Java correcte

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

Sur cette machine, j'utilise zsh( echo $0renvoie -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

Quand je cours, mvn clean install --debugje vois qu'en fait 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.

James Raitsev
la source
2
Votre PATH n'a pas le /usr/binpremier dans sa liste de répertoires. Essayez javac -versionsans spécifier de répertoire.
Peter Lawrey
@PeterLawrey, je reçoisjavac 1.7.0_10
James Raitsev
2
Que echo $JAVA_HOMEvous dit-il?
Andrew Logvinov
2
Et votre variable JAVA_HOME? mvn utilisera JAVA_HOME. De plus, construisez-vous à partir de la ligne de commande ou à l'intérieur de l'IDE?
Lucas
8
Si vous exécutez Maven avec --debug, il devrait vous indiquer la ligne de commande exacte qu'il utilise pour exécuter javac(avec des tonnes d'autres choses). Ça dit quoi?
Emil Sit du

Réponses:

153

Vérifiez le mvnscript dans votre installation maven pour voir comment il construit la commande. Peut-être que vous ou quelqu'un d'autre avez codé JAVA_HOMEen dur un là-dedans et l' avez oublié.

Ryan Stewart
la source
8
Vous, monsieur, êtes le gagnant. En effet, quelqu'un a codé JAVA_HOME dans le script! MERCI
James Raitsev
21
Heh, pas que je me sois déjà fait ça avant ou quoi que ce soit ... :)
Ryan Stewart
4
Le mvnscript n'était pas compatible avec mon installation OSX du JDK 7 d'Oracle, et je n'ai rien fait d'extraordinaire pour le configurer (le script recherche un dossier Library/Java/JavaVirtualMachines/CurrentJDKqui n'existait pas pour moi (ce qui existait est à la jdk1.7.0_25.jdkplace de CurrentJDK). Non une solution élégante mais je viens de coder l'exportation et maintenant cela fonctionne (PS: maven sur OSX est à /usr/share/maven/bin/mvn)
Raekye
6
Mavericks OSX 1.9.2, avec maven installé via homebrew, le script mvn était situé à/usr/local/bin/mvn
StackExchange What The Heck
1
J'avais un ensemble JAVA_HOME et cela a donné l'indice. MERCI!! : D
Alfonso Nishikawa
109

essayez d'utiliser une version plus récente du plugin du compilateur maven:

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

De plus, la spécification du codage du fichier source dans maven est mieux faite globalement:

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

EDIT : Comme cette réponse retient toujours l'attention, je voudrais juste souligner que les dernières valeurs (à partir de la dernière édition) sont 3.2 pour le plugin du compilateur maven et 1.8 pour java, car les questions sur la compilation du code java 8 via maven sont liées à apparaîtra bientôt :-)

radai
la source
L'ajout de "<version> 3.0 </version>" a résolu le problème.
Sriram
@radai, sa 3.2 maintenant, mais idiot de continuer à se mettre à jour car il n'arrêtera jamais d'augmenter ...
Lucas
@Lucas - je ne veux pas être responsable des personnes qui s'en tiennent aux versions obsolètes, c'est tout. ne
pouvait
Pourquoi cette réponse a-t-elle près d'une centaine de votes positifs alors qu'elle n'est pas la bonne solution à la question posée? Je suis perdu ...
Zero3
48

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

tks spéciaux à @mkyong

EDIT: J'utilise maintenant: jEnv + sdkman

eliocapelati
la source
3
Cela a fonctionné pour moi. J'utilise un mac, avec maven de macports et le sun jdk. Apparemment, ce combo était délicat.
Quantum7
1
Bon travail. Merci pour toutes les commandes! Fonctionne maintenant sur Maveriks
Maksim
1
C'est la solution la plus simple et la plus élégante. Je vous remercie!
BK-
26

Veuillez 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 doit pointer la version jdk requise

utilisateur4010880
la source
19

Vous devez vérifier la version Maven:

mvn -version

Vous trouverez la version Java que Maven utilise pour la compilation. Vous devrez peut-être réinitialiser JAVA_HOME si nécessaire.

Loi Cao
la source
19

J'ai eu le même problème. J'ai trouvé que c'est parce que le script Maven regarde le lien CurrentJDK ci-dessous et trouve un 1.6 JDK. 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 vers 1.6.0.jdk

Pour y remédier, j'ai exécuté les commandes suivantes (vous devez vérifier votre version installée et vous 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
Chris McCarthy
la source
Si mvn clean install -debug affiche java 1.6, c'est la bonne réponse
Cetnar
4

Diagnostique:

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

Solution pour Debian:

Le script mvn définit la variable d'environnement JAVA_HOME en interne en recherchant javac (quel javac). Par conséquent, si vous avez plusieurs versions de java installées simultanément, par exemple JDK 6 et JDK 7 et utilisez le système Debian Alternatives pour choisir entre elles, même si vous avez changé l'alternative de "java" à JDK 7, mvn utilisera toujours JDK 6. Vous doivent également changer l'alternative pour "javac". Par exemple:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

ÉDITER:

En fait, 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 toutes les alternatives aux divers outils Java (il y en a une douzaine environ).

user323094
la source
Merci, juste ce que je cherchais
evandongen
Merci, j'étais confus après avoir défini la version java avec: update-alternatives --config javac
Leonard Saers
2

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

<version>3.0</version>

J'ai aussi vu ce qui suit:

<compilerVersion>1.7</compilerVersion>
Joop Eggen
la source
Ne marche pas. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project divs: Fatal error compiling: invalid target release: 1.7 -
James Raitsev
J'ai utilisé avec succès la version 2.3.2 pour compiler la 1.7 avant ... Mais toujours bon d'utiliser la dernière version si possible.
Lucas
Recherche plus loin. Vérifiez la gestion de votre plugin de dépendance si vous l'utilisez.
Joop Eggen
Ajout de <pluginDependency>, même problème
James Raitsev
S'il s'agit d'un projet de module, le projet parent peut valoir la peine d'être examiné. Cela ne peut pas être le cas ici. Maven fonctionne-t-il avec Java 1.7?
Joop Eggen
2

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

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

Redémarrez IDE.

Confirmez les paramètres du compilateur pour le projet - Aller à: Propriétés du projet -> Compilateur Java -> Décochez (Utiliser la conformité de l'environnement d'exécution 'JavaSE-1.6' sur le chemin de construction java.) Et sélectionnez 1.7 dans la liste déroulante. (Ignorer si déjà 1.7)

Redémarrez IDE.

Si le problème persiste - Exécutez des cas de test individuels en utilisant la commande dans le terminal -

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

Vous ne savez pas quel système d'exploitation est utilisé ici, mais vous pouvez éliminer beaucoup de version java en utilisant un debian / ubuntu avec update-java-alternatives pour définir le système jvm par défaut à l'échelle du système.

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

Bruce Edge
la source
2

faites un clic droit sur votre projet dans eclipse et ouvrez "Run Configurations" .. vérifiez la version 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.

ravinder reddy
la source
2

Pour une compilation spécifique qui nécessite une /etc/alternatives/javaJVM (autre que celle par défaut ), envisagez de préfixer la mvncommande avec JAVA_HOMEcomme ceci,

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

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

orme
la source
Cela a fonctionné le mieux pour moi, car il n'est pas nécessaire de modifier la source du projet6 téléchargé depuis GIT (ou SCM)
jwilleke
Cette réponse mérite plus de votes positifs. Cela m'a aidé à compiler un code nécessitant Java 7 sur ma machine où la valeur par défaut était Java 8 - sans avoir à installer et réinstaller Java7 et Java 8.
R11G
1

{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>
baybora.oren
la source
4
Vous ne devez pas coder en dur le chemin sur un code qui sera jamais partagé.
Jan Segre
@Jan Segre, ok je le change :)
baybora.oren
0

Ok, je viens de résoudre ce problème moi-même aussi. C'est plus important votre JAVA_HOME, si vous n'avez pas de version inférieure ou nulle par rapport 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 de l'inclure dans votre PATH.

Silviu Burcea
la source
0

Vous spécifiez peut-être une mauvaise version de java. java -version (dans votre terminal) pour vérifier la version de java que vous utilisez. Accédez à maven-compile-plugin pour la dernière version du compilateur maven Votre plugin peut apparaître comme ceci si vous utilisez java 6 et que la dernière version du plugin maven compiler est 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>
Henri
la source
0

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 création. Nettoyer. Et puis réinstallez. On dirait un problème d'autorisations silencieuses.

piperchester
la source
0

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

Jon Onstott
la source
0

J'ai eu ce problème en travaillant avec eclipse, j'ai dû changer le chemin de construction du projet pour qu'il fasse référence à jre 7

osama yaccoub
la source