¿Es posible configurar maven-compiler-plugin
para que funcione tanto con JDK 8 y JDK 12? No estoy seguro de si es relevante, pero es un proyecto de Primavera de arranque.
1. La configuración
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<release>8</release>
</configuration>
</plugin>
es compilables bajo JDK-12, pero bajo JDK-8 falla:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project xxxx:
Fatal error compiling: invalid flag: --release
2. La configuración
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
que no ve <release>8</release>
parámetro es compilable bajo JDK-8, pero bajo JDK-12 falla:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project xxxx:
Fatal error compiling: CompilerException: NullPointerException
Todas las posibles fuentes de Internet me encontré con consejos para usar el <release>8</release>
parámetro a ser capaz de evitar el error bajo JDK-12, pero esto desactiva la compilability bajo JDK-8.
La compatibilidad de nuestro origen y de destino es Java 8, y tenemos que construir el código con el bien a secasmvn clean install
(sin proporcionar un perfil!) En las máquinas de los desarrolladores con JDK-12, sino también en Jenkins, donde todavía tenemos que mantener JDK -8, y también tenemos algunos desarrolladores conservadores :)
En primer lugar debe definir el experto compilador-plugin dentro de la pluginManagement como esto:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<...>
...
y además utilizando el perfil que se activa automáticamente con la apariencia siguiente:
<profiles>
<profile>
<id>jkd-12-compile</id>
<activation>
<jdk>12</jdk>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>8</release>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>jdk-8-compile</id>
<activation>
<jdk>[,8]</jdk>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
Uno no suele ser un mvn clean install
no es necesario. Normalmente sólo se necesita mvn clean verify
...