Сконфигурируйте maven-compiler-plugin, чтобы он работал как с JDK-8, так и с JDK-12 (в проекте Spring Boot) - PullRequest
0 голосов
/ 28 марта 2019

Можно ли настроить maven-compiler-plugin, чтобы он работал и с JDK 8 и JDK 12? Я не уверен, что это актуально, но это проект Spring Boot.

1. Конфигурация

<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>

компилируется под JDK-12, но под JDK-8 происходит сбой:

[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. Конфигурация

<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>

, в котором отсутствует параметр <release>8</release>, компилируется в JDK-8, но в JDK-12 происходит сбой:

[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

Во всех возможных интернет-источниках я обнаружил совет использовать параметр <release>8</release>, чтобы избежать ошибки в JDK-12, но это отключает компиляцию в JDK-8.

Нашей исходной и целевой совместимостью является Java 8, и нам нужно собрать код со старым добрым простым mvn clean install (без предоставления профиля!) На машинах разработчиков с JDK-12, но также и в Jenkins, где нам все еще нужно хранить JDK-8, и у нас также есть несколько консервативных разработчиков:)

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

сначала вы должны определить плагин maven-compiler-plugin в менеджере плагинов следующим образом:

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
      <...>
    ...

и, кроме того, используя автоматически активируемый профиль, который выглядит следующим образом:

  <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>

Один обычно не mvn clean install не нужен. Вам обычно нужно только mvn clean verify ...

0 голосов
/ 29 марта 2019

Вы можете использовать профили Maven и активировать их в зависимости от JDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...