opiniones - 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)
intellij opiniones (9)
Usando IntelliJ 12, tengo un proyecto java y uso maven con un pom.xml. Mi proyecto está usando 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?
Creo que esto tiene que ver con un conflicto conceptual entre el complemento del compilador Maven y la idea de 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 el POM se vuelva a procesar, 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 POM (tal vez no sea sabio porque lo que sucede cuando se 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.
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.
Finalmente, descubrí que el proceso de importación de Idea Maven estaba usando JDK 8 para importar el proyecto, lo 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.
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.
Luché mucho con este problema, debido a la construcción de microservicios con Dropwizard.
Eventualmente descubrí que tenía mis propiedades de compilación en el archivo
pom
incorrecto (
pom.xml
del servicio principal).
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 archivo "global"
.pom.xml
", todos los contenedores secundarios pudieron usar la nueva sintaxis.
Puede ayudar a alguien que tiene problemas con proyectos de contenedores múltiples
Ninguna de las soluciones ayudó en mi caso.
No necesitaba especificar ninguna versión de Java en mi
pom.xml
.
Necesitaba abrir el archivo
<project-name>.iml
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 sentido en absoluto. En ningún momento he especificado una versión JDK para Java 1.5.
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).
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>
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>
Debía seguir un paso adicional, además de configurar las propiedades de compilación de maven , agregar el complemento compilador de maven y modificar la versión de Java en el archivo .iml . (cada uno ya documentado en las otras respuestas). También debe configurar la versión del compilador en la configuración .