La versión de Java cambia automáticamente a Java 1.5 después de la actualización de Maven

121

Estoy usando eclipse como IDE. Cuando hago clic derecho en el proyecto y luego hago clic en maven actualizar mi cambio de versión de Java a 1.5. Esto es lo que hice hasta ahora, seguí todos los pasos enumerados aquí

http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0-requires-java-1-6-or-newer-in-maven-projects/

  1. Cambié "ruta de compilación de Java" a "espacio de trabajo predeterminado jre 1.8.0_25"
  2. Luego cambió "compilador java" a 1.8
  3. Luego cambió "facetas del proyecto"> java> 1.8
  4. Se cambió la versión de java pom.xml a 1.8
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.1.3.v20140225</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Después de todo esto, cuando hago clic en "Actualización de Maven", mi versión de Java cambia a 1.5 automáticamente. También en los pasos anteriores, la versión de los dos primeros pasos también cambia a 1.5 automáticamente. ¿Cómo puedo arreglar esto?

asdlfkjlkj
fuente

Respuestas:

222

Abra su pom.xmlarchivo y agregue las siguientes líneas:

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

¿Dónde 1.8está la versión java de su JDK / JRE actual? Otra forma de hacer esto es agregar un <build>con el maven-compile-pluginas

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
</plugins>
</build>

EDITAR

Si está buscando una manera de hacer que funcione con las versiones 9+ de Java, eche un vistazo a la respuesta de @ JDelorean aquí y no olvide darle un voto positivo también :)

Jorge Campos
fuente
4
Creo que ya hice la segunda forma y también publiqué el código. No veo lo que cambió en ese código
asdlfkjlkj
1
Si. Cuando respondí, no había publicado el código. Entonces, agregue la primera parte de mi respuesta. La propertiesetiqueta. Si su POM ya tiene una propertiesetiqueta, simplemente agregue las etiquetas dentro de ella, debería funcionar bien.
Jorge Campos
@asdlfkjlkj ¿su eclipse está usando maven incrustado o una instalación externa de maven? ¿Otra pregunta que su eclipse apunta a un JRE o un JDK? Estas son dos preguntas sobre eclipse + maven que marcan la diferencia.
Jorge Campos
@JorgeCampos - Publiqué una nueva pregunta. ¿Tienes alguna idea sobre eso? stackoverflow.com/questions/42855512/…
Aishu
@JorgeCampos ¿dónde encuentro el maven-complier-pluginpara agregar el <build>? gracias
夢 の の 夢
23

Tuve el mismo problema cuando instalé Java 9. Mi proyecto usaría el entorno de ejecución J2SE-1.5 de forma predeterminada. Curiosamente, no se hace referencia al nivel de cumplimiento de Java 9 como las versiones anteriores, es decir, "1.8", sino como "9". Así que tuve que proporcionar mis propiedades y la configuración del complemento del compilador Maven en consecuencia:

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

y

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>9</source>
        <target>9</target>
    </configuration>
</plugin>

Esto parece haber resuelto el problema.

JDelorean
fuente
1
También es cierto para Java 10+ y me gustaría agregar que en un proyecto Maven de varios módulos solo se requiere en el POM principal.
mmeany
Con Java 9 y superior, hay una nueva --release <version>opción de compilador, que se prefiere a la fuente / destino. Esto se puede configurar con la maven.compiler.releasepropiedad o la <release>configuración en el complemento del compilador maven. Ver: stackoverflow.com/questions/43102787/…
Thomas Taylor
7

La causa raíz de este problema es que si por alguna razón Eclipse no puede resolver un valor válido para la maven.compiler.sourcepropiedad al generar / actualizar el archivo .classpath desde el pom, simplemente usará de forma predeterminada org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5.

Como respondió de manera experta @ jorge-campos , hay varias formas de establecer esa propiedad.

Sin embargo, la respuesta de Jorge no pareció funcionar para mí. Aquí estaban mis configuraciones:

<properties>
    <javaVersion>1.8</javaVersion>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

...

Exactamente. ${java.version}se nunca se va a resolver a la (completamente diferente) Propiedad javaVersiony Eclipse caso omiso de la propiedad y utiliza el valor predeterminado.

Lo que me lleva de vuelta a la parte " por cualquier motivo " con la que comencé; La estupidez del desarrollador puede ser una de esas razones.

David Avendasora
fuente
1
Cómo cambiar org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / J2SE-1.5
aName
El voto negativo por decir "la estupidez del desarrollador puede ser una de esas razones".
Luke Hutchison
En mi caso, estoy usando Maven / Tycho para crear complementos de Eclipse, y el valor predeterminado anterior se deriva en última instancia del entorno de ejecución especificado en el archivo MANIFEST.MF. Cambiar el entorno de ejecución a JavaSE-1.8 solucionó el problema.
mat101
3

Agregue estas líneas a su pom.xml, luego haga clic con el botón derecho en su Biblioteca del sistema JRE -> Propiedades -> Configure su entorno de ejecución correcto en Java 1.8 o la versión que desea configurar.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin> 
Avinav Mishra
fuente
Falta <build> <plugins> ... su respuesta aquí ... </plugins> </build> que la hace una respuesta más clara para las personas.
Kyle Bridenstine
1

Tuve este problema. En mi caso, la etiqueta <properties> y las etiquetas anidadas que Jorge Campos menciona arriba estaban en el lugar equivocado. Si los coloco entre las etiquetas <hostversion> y <dependencies> en el archivo pom.xml, este comportamiento se detuvo.

Eso se puede recoger en Eclipse si la validación de estos archivos está activada.

nsandersen
fuente
1

Encuentro un problema similar en una de las máquinas de mi compañero de equipo. Estaba usando una versión antigua de Eclipse, creo que estaba usando Keppler. Proyecto después de ser actualizado, cambie la versión de JRE a 1.5.

La simple actualización de Eclipse a la última versión resuelve este problema.

usuario902383
fuente
Si no. Estoy ejecutando Neon, la configuración de mi espacio de trabajo es 1.8, pero cuando importo (o actualizo) un proyecto de Maven, Eclipse insiste en usar J2SE-1.5.
Antares42
@ Antares42, ¿puedes construir desde la línea de comandos sin problemas? ¿Qué versión de m2e estás usando?
user902383
1
Puedo construir usando la línea de comando (o más bien "Ejecutar como -> Compilación Maven ...") sin problemas. Pero tan pronto como hago "Maven -> Actualizar proyecto" obtengo las bibliotecas JRE como se mencionó y Eclipse no puede construir el proyecto. Aunque todavía puedo construir usando Maven. Una vez que agrego una maven.compiler.sourcepropiedad como se menciona en una respuesta anterior, todo funciona bien. Mi versión de m2e es 1.7.1-20161104-1805.
Antares42
1

En mi caso (antiguo JBoss Developer Studio), el problema era que los entornos JRE no incluían 1.8 (solo 1.7). Cuando cambié la maven-compiler-pluginversión a 1.7 y realicé el proyecto de actualización de maven, actualizó la biblioteca del sistema Eclipse JRE a 1.7. ingrese la descripción de la imagen aquí

Entonces, la solución es obtener una versión IDE más nueva que incluya un entorno JRE integrado que sea 1.8 o posterior, o intentar instalarlo manualmente (consulte https://stackoverflow.com/a/35204314 )

codificador ciego9734
fuente
0

Me permito actualizar ese tema con Java 11.

Instalé OpenJDK11 en mi computadora y quería usarlo en una aplicación.

Tuve problemas porque Eclipse siempre cambiaba mi JRE a JavaSE-1.5 cuando actualizaba mi proyecto con Maven.

Había configurado todo como dijiste, pero siempre seleccionaba directamente en mi ruta de compilación Java "java-11-openjdk.x86_64" como uno de mis JRE alternativos. Arreglé mi problema seleccionando en "Entorno de ejecución" JavaSE-10 (pero tienes que hacer doble clic en él y luego elegir como JRE compatible tu versión OpenJDK11) como se muestra en la imagen. Configuración del entorno de ejecución

El proyecto usará Java 11 gracias a eso (imagen) pero debe escribir 10 para la versión de java en el pom.xml y también configurar java 10 en las Facetas del proyecto.

Claeyssic
fuente
0

Resolví el problema al instalar la actualización de eclipse "JAVA 12" del mercado. Hace que mi eclipse pase de Kepler a Luna.

Después de eso, pude configurar 1.8 como JDK estándar, solucionando el problema de "actualización de maven".

Andrea La Rosa
fuente
-3

Cambié Eclipse de kepler a neon y luego actualicé mi proyecto con Maven -> Actualizar proyecto.

puja
fuente