Compilación de código Java 7 a través de Maven

155

Mis listas de archivos 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>
  ...

Sin embargo mvn clean install, me sale

[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 -versiones ( which javaseñala aquí)

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 también apunta a la versión correcta de Java

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

En esta máquina, estoy usando zsh( echo $0devoluciones -zsh)

En mi .zshrc, he definido:

 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

Cuando estoy corriendo mvn clean install --debugveo que, de hecho, uso 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

¿Dónde se podría definir? Tengo fuente (d) mi .zshrc varias veces.

James Raitsev
fuente
2
Su RUTA no tiene /usr/binprimero en su lista de directorios. Intente javac -versionsin especificar un directorio.
Peter Lawrey
@ PeterLawrey, consigojavac 1.7.0_10
James Raitsev
2
Que echo $JAVA_HOMEte dice
Andrew Logvinov
2
¿Qué pasa con su variable JAVA_HOME? mvn usará JAVA_HOME. Además, ¿está construyendo desde la línea de comandos o desde IDE?
Lucas
8
Si ejecuta Maven con --debug, debería decirle la línea de comando exacta que está utilizando para ejecutar javac(junto con toneladas de otras cosas). ¿Qué dice?
Emil Sit

Respuestas:

153

Verifique el mvnscript en su instalación de Maven para ver cómo está construyendo el comando. Quizás usted u otra persona hayan codificado un código JAVA_HOMEallí y se hayan olvidado.

Ryan Stewart
fuente
8
Usted señor es el ganador. De hecho, alguien codificó JAVA_HOME dentro del script. GRACIAS
James Raitsev
21
Je, no es que me haya hecho eso antes ni nada ... :)
Ryan Stewart
44
El mvnscript no era compatible con mi instalación OSX de JDK 7 de Oracle, y no hice nada sofisticado para configurarlo (el script busca una carpeta Library/Java/JavaVirtualMachines/CurrentJDKque no existía para mí (lo que sí existe es en jdk1.7.0_25.jdklugar de CurrentJDK). una solución elegante pero acabo de codificar la exportación y ahora funciona (PD: maven en OSX está en /usr/share/maven/bin/mvn)
Raekye
66
Mavericks OSX 1.9.2, con maven instalado a través de homebrew, el script mvn estaba ubicado en/usr/local/bin/mvn
StackExchange What The Heck
1
Tenía un conjunto JAVA_HOME y esto me dio la pista. ¡¡GRACIAS!! : D
Alfonso Nishikawa
109

intente usar una versión más nueva del complemento compilador maven:

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

Además, la especificación de la codificación del archivo fuente en Maven se realiza mejor globalmente:

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

EDITAR : Como esta respuesta sigue recibiendo atención, me gustaría señalar que los últimos valores (a partir de la última edición) son 3.2 para el complemento del compilador Maven y 1.8 para Java, ya que las preguntas sobre la compilación del código Java 8 a través de Maven están vinculadas a aparece pronto :-)

radai
fuente
Agregar "<version> 3.0 </version>" solucionó el problema.
Sriram
@radai, es 3.2 ahora, pero tonto para seguir actualizando ya que nunca dejará de aumentar ...
Lucas
@Lucas: simplemente no quiero ser responsable de las personas que se apegan a versiones obsoletas, eso es todo. no podría vivir conmigo mismo :-)
radai
¿Por qué esta respuesta tiene casi cien votos a favor cuando no es la solución correcta a la pregunta planteada? Estoy perdido ...
Zero3
48

Tuve el mismo problema y para resolver esto sigo este artículo del 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 especiales para tks @mkyong

EDITAR: ahora estoy usando: jEnv + sdkman

eliocapelati
fuente
3
Esto funcionó para mí. Estoy usando una mac, con maven de macports y sun jdk. Aparentemente ese combo fue complicado.
Quantum7
1
Buen trabajo. Gracias por todos los comandos! Funciona ahora en Maveriks
Maksim
1
Esta es la solución más fácil y elegante. ¡Gracias!
BK-
26

Por favor revisa tu pom.xml para las siguientes etiquetas

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

debe apuntar la versión jdk requerida

usuario4010880
fuente
19

Tienes que verificar la versión de Maven:

mvn -version

Encontrará la versión de Java que Maven usa para la compilación. Es posible que deba restablecer JAVA_HOME si es necesario.

Loi Cao
fuente
19

Yo tuve el mismo problema. Descubrí que esto se debe a que el script Maven mira el enlace CurrentJDK a continuación y encuentra un 1.6 JDK. Incluso si instala el último JDK, esto no se resuelve. Si bien podría configurar JAVA_HOME en su script $ HOME / .bash_profile, elegí arreglar el enlace simbólico de la siguiente manera:

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

Tenga en cuenta que CurrentJDK apunta a 1.6.0.jdk

Para solucionarlo, ejecuté los siguientes comandos (debe verificar su versión instalada y adaptarla en consecuencia).

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
fuente
Si mvn clean install -debug muestra java 1.6, esta es la respuesta correcta
cetnar
4

Diagnósticos:

Puede ver qué versión de Java utiliza Maven ejecutando "mvn --version"

Solución para Debian:

El script mvn establece la variable env JAVA_HOME internamente al buscar javac (que javac). Por lo tanto, si tiene varias versiones de Java instaladas simultáneamente, por ejemplo, JDK 6 y JDK 7 y utiliza el sistema de alternativas de Debian para elegir entre ellas, aunque haya cambiado la alternativa de "Java" a JDK 7, mvn seguirá utilizando JDK 6. Usted también tengo que cambiar la alternativa para "javac". P.ej:

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

EDITAR:

En realidad, una solución aún mejor es usar update-java-alternative (eg)

# update-java-alternatives -s java-1.7.0-openjdk-amd64

como se detalla en https://wiki.debian.org/JavaPackage , porque esto cambiará todas las alternativas a varias herramientas Java (hay una docena más o menos).

usuario323094
fuente
Gracias, justo lo que estaba buscando
evandongen
Gracias, estaba confundido después de configurar la versión de Java con: update-alternative --config javac
Leonard Saers
2

¿Podría probar un complemento más nuevo? en el sitio maven:

<version>3.0</version>

También vi lo siguiente:

<compilerVersion>1.7</compilerVersion>
Joop Eggen
fuente
No funciona. [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
He usado con éxito 2.3.2 para compilar 1.7 antes ... Pero siempre es bueno usar lo último si es posible.
Lucas
Busqué más. Verifique su administración de complementos de dependencia si la usa.
Joop Eggen
Se agregó <pluginDependency>, mismo problema
James Raitsev
Si se trata de un proyecto de módulo, puede valer la pena analizar el proyecto principal. Este no puede ser el caso aquí. ¿Maven se está ejecutando con Java 1.7?
Joop Eggen
2

Intente cambiar la configuración del compilador Java en Propiedades en Eclipse-

Ir a: Preferencias-> Java-> Compilador-> Nivel de cumplimiento del compilador-> 1.7 Aplicar Ok

Reiniciar IDE.

Confirme la configuración del compilador para el proyecto: vaya a: Propiedades del proyecto-> Compilador de Java-> Desmarque (Use Cumplimiento del entorno de ejecución 'JavaSE-1.6' en la ruta de compilación de Java) y seleccione 1.7 en el menú desplegable. (Ignorar si ya es 1.7)

Reiniciar IDE.

Si el problema persiste, ejecute casos de prueba individuales usando el comando en la terminal.

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

No estoy seguro de qué sistema operativo está en uso aquí, pero puede eliminar una gran cantidad de versiones de Java en un debian / ubuntu con update-java-alternative para configurar el sistema jvm predeterminado en todo el sistema.

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

Para configurar uno nuevo, use:

#> update-java-alternatives -s java-7-oracle

No es necesario configurar JAVA_HOME para la mayoría de las aplicaciones.

Bruce Edge
fuente
2

haga clic derecho sobre su proyecto en eclipse y abra "Ejecutar configuraciones" ... verifique la versión jre allí. algunas veces esto no cambiará por defecto en eclipse, incluso después de cambiar la versión en el buildpath.

ravinder reddy
fuente
2

Para una compilación específica que requiere una /etc/alternatives/javaJVM (no predeterminada ), considere prefijar el mvncomando JAVA_HOMEasí,

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

Aquí asumimos que el valor predeterminado es Java 8, mientras que para el proyecto específico en cuestión requerimos Java 7.

olmo
fuente
Esto funcionó mejor para mí, ya que no es necesario realizar cambios en la fuente del proyecto6 descargado de GIT (o SCM)
jwilleke
Esta respuesta merece más votos a favor. Me ayudó a compilar un código que requería Java 7 en mi máquina donde el valor predeterminado era Java 8, sin tener que instalar y reinstalar Java7 y Java 8.
R11G
1

{JAVA_1_4_HOME} / bin / javacy puedes probar también ...

<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
fuente
44
No debe codificar la ruta en ningún código que alguna vez se comparta.
Jan Segre
@ Jan Segre, ok, lo cambio :)
baybora.oren
0

Ok, también resolví este problema por mi cuenta. Es más importante su JAVA_HOME, si no tiene una versión inferior o ninguna en comparación con las propiedades de origen / destino del complemento Maven, obtendrá este error.

Asegúrese de tener una buena versión en su JAVA_HOME y tenerla incluida en su RUTA.

Silviu Burcea
fuente
0

Es posible que esté especificando una versión incorrecta de Java. Java -version (en su terminal) para verificar la versión de Java que está utilizando. Vaya a maven-compile-plugin para obtener la última versión del compilador de maven Su complemento puede aparecer así si está utilizando java 6 y la última versión del complemento del compilador de maven es 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>
Enrique
fuente
0

Ninguna de las respuestas anteriores resolvió por completo mi caso de uso.

Necesario para eliminar el directorio que se estaba creando. Limpiar. Y luego reinstalar. Parece un problema de permisos silenciosos.

Piperchester
fuente
0

Tuve este problema en IntelliJ IDEA 14 hasta que entré en el menú Archivo -> Estructura del proyecto, cambiando el SDK del proyecto a 1.7 y el nivel de idioma del proyecto a 7.

Jon Onstott
fuente
0

Tuve este problema al trabajar con eclipse, tuve que cambiar la ruta de compilación del proyecto para que se refiera a jre 7

osama yaccoub
fuente