Configurar maven-compilador-plugin por lo que funciona tanto con JDK-8 y JDK-12 (en el proyecto de Primavera de arranque)

Honza Židek:

¿Es posible configurar maven-compiler-pluginpara 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 :)

khmarbaise:

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 installno es necesario. Normalmente sólo se necesita mvn clean verify...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=314210&siteId=1
Recomendado
Clasificación