Detenga IntelliJ IDEA para cambiar el nivel de idioma de Java cada vez que se recarga el pom (o cambie el nivel de idioma predeterminado del proyecto)

145

Usando IntelliJ 12, tengo un proyecto java y uso maven con un pom.xml. Mi proyecto está utilizando java8, pero parece que el nivel de idioma predeterminado del proyecto se ha establecido en 6 al importar el proyecto.

Puedo cambiar el nivel de idioma a 8.0 (F4 -> Módulos -> Nivel de idioma), sin embargo, cada vez que edito mi pom.xml el nivel del proyecto vuelve a "usar el nivel de idioma del proyecto", y tengo que editar esta configuración nuevamente y de nuevo.

¿Hay algo que deba agregar al pom.xml para establecer el nivel de idioma predeterminado en 8.0?

Quentin
fuente
2
¿Su pom especifica el nivel de origen y destino en la configuración del complemento del compilador?
Mark Rotteveel
sí, fuente y destino establecidos en 1.8. Sin embargo, no se especificó durante la importación del proyecto
Quentin
@Quentin En tal situación, puede ser más fácil reclinar el proyecto en una nueva ubicación y dejar que IntelliJ lo importe de nuevo.
Thorbjørn Ravn Andersen

Respuestas:

174

Según el comentario de Mark, aquí está cómo hacerlo:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
vikingsteve
fuente
10
el complemento está presente en el pom, con el objetivo 1.8, pero no cambia nada :(
Quentin
2
¿Tienes habilitada la importación automática de tu pom maven? ¿Ha verificado los poms de los padres (y abuelos), ¿hay alguna configuración 1.6 que pueda ser conflictiva?
vikingsteve
1
De hecho, el proyecto principal se define con spring-boot-starter-parent-1.1.9.RELEASE.pom.xml y en pluginManagement, el complemento de compilador maven está configurado en 1.6 ... Intenté anular esta configuración sin ningún éxito. Parece que Spring Boot 1.2.RC ya no incluye el complemento compilador maven, lo intentaré. - La importación automática está habilitada.
Quentin
Genial, ese podría ser el motivo. Si especifica la misma versión del complemento del compilador maven, podría ser posible anular la configuración de origen / destino. Quizás intente eso en su proyecto root pom.xml.
vikingsteve
2
En mi caso esto no funcionó. Tuve que eliminar la configuración mencionada en esta respuesta y en su lugar agregar lo siguiente:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
genónimo
99

Una versión más corta de la respuesta de vikingsteve es:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
DieterDP
fuente
66
Una molestia menos!
Artur Cichosz
44
Esta no era solo una versión corta, sino una necesaria en mi caso. La respuesta de vikingsteve no funcionó para mí. Así que eliminé esa configuración y usé esta.
genónimo
23

Creo que esto tiene que ver con un conflicto conceptual entre el complemento del compilador Maven y la idea IntelliJ. Aparentemente, las versiones más nuevas del complemento del compilador tienen un nivel predeterminado de 1.5 (consulte http://maven.apache.org/plugins/maven-compiler-plugin/ ). Entonces, si el complemento del compilador se usa en absoluto en un proyecto, y el nivel del compilador no se establece explícitamente en el pom.xml, cada vez que se procese nuevamente el POM, el nivel volverá al valor predeterminado.

Por lo tanto, hay un conflicto conceptual que Intellij IDEA ignora. El IDE todavía le permite a uno configurar el proyecto y la configuración del módulo, pero no proporciona ninguna advertencia o retroalimentación de que esta configuración está controlada por pom.xml. Las soluciones serían permitir explícitamente anular la configuración del complemento del compilador de POM (tal vez no sea sabio porque lo que sucede cuando usa maven en la línea de comando), o desactivar los controles en el IDE cuando esta configuración del POM está vigente.

La solución en este momento es establecer el nivel de compilador deseado en el complemento del compilador en el pom, la reimportación, en lugar de intentar establecerlo en la configuración del módulo.

Peter N. Steinmetz
fuente
1
Convenido. La falta de retroalimentación de que las configuraciones en IDEA simplemente serán ignoradas y reimportadas desde el POM es muy confusa, especialmente cuando se usa un POM principal.
Gillfish
9

Estoy actualizando un proyecto de JDK 8 a JDK 10+. Tenía las propiedades del compilador especificadas correctamente de la siguiente manera:

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

Sin embargo, el proyecto Idea seguiría restableciendo el nivel de idioma a 8.

Eventualmente descubrí que el proceso de importación de Idea Maven estaba usando JDK 8 para importar el proyecto que limitaba el nivel de idioma a <= 8.

Para solucionarlo , actualicé la propiedad 'JDK para importador' en Configuración -> Compilación, Ejecución, Implementación -> Herramientas de compilación -> Maven -> Importar para usar JDK 11.

ingrese la descripción de la imagen aquí

danw
fuente
Resuelto mi problema Parece que IntelliJ actualizó su JRE interno con las versiones posteriores (en algún lugar alrededor de 2019.2). Bastante difícil de rastrear ...
Hasan Aslam
8

Hay dos formas de hacerlo, agregue cualquiera de ellas en su archivo pom.xml:

Primero: Agregar propiedades

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

segundo- Agregar complemento

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Avísame si te ayuda.

Anuj Teotia
fuente
He hecho ambas cosas y el compilador todavía se restablece a 1.5 cada vez que intento ejecutar mvn compile desde IntelliJ. Sin embargo, funciona bien cuando se ejecuta desde la línea de comandos fuera de IntelliJ.
user26270
1
en IntelliJ, recuerde volver a importar la configuración de Maven después de la modificación. La solución funcionó para mi.
Pierluigi Vernetto
4

Ninguna de las soluciones ayudó en mi caso. No necesitaba especificar ninguna versión de Java en mi pom.xml.

Necesitaba abrir el <project-name>.imlarchivo y cambiar la versión JDK allí.

Original:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Actualizado:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Esto no tiene ningún sentido. En ningún momento he especificado una versión JDK para Java 1.5.

Kleinfreund
fuente
Esto, por sí solo, resolvió el problema para mí en IntelliJ 2019.3, sin requerir que cambie nada en mi pom o en cualquier otro lugar. Del mismo modo, nunca especifiqué JDK 1.5 en ninguna parte.
Michael Christoff
Ejemplo: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León
1

Luché mucho con este problema, debido a la construcción de microservicios con Dropwizard. Finalmente descubrí que tenía mis propiedades de compilación en el archivo pom incorrecto (El servicio principal pom.xml).

Entonces, aunque los otros paquetes son más como bibliotecas , no pude usar la sintaxis de Java 8.

Cuando refactoricé el complemento de compilación en el .pom.xmlarchivo "global" , todos los contenedores secundarios pudieron usar la nueva sintaxis.

Puede ayudar a alguien que tiene problemas con proyectos de contenedores múltiples

usuario3677636
fuente
0

Para mí, la solución de actualizar el POM (complementos más propiedades) a la versión requerida del compilador de Java (1_7 en mi caso) funcionó. Sin embargo, como el archivo .iml para cada proyecto se generó con pom original (con la versión de compilador predeterminada de 1_5 como se explicó anteriormente) tiene una versión JDK de 1_5, esto todavía anula la versión de pom.

Eliminé la carpeta .idea manualmente e importé el módulo a IntelliJ con una reimportación desde el pom actualizado. Cuando reimporté el Módulo desde POM actualizado, pude ver que los archivos iml tenían la versión JDK actualizada (1_7 en mi caso).

Shirish Sakhare
fuente