首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置maven-编译器-plugin,使其同时适用于JDK-8和JDK-12 (在Spring项目中)

配置maven-编译器-plugin,使其同时适用于JDK-8和JDK-12 (在Spring项目中)
EN

Stack Overflow用户
提问于 2019-03-28 18:32:32
回答 2查看 3.5K关注 0票数 3

是否可以配置maven-compiler-plugin,使其既可以用JDK 8运行,又可以使用 JDK 12工作?我不确定它是否相关,但这是一个Spring项目。

1.配置

代码语言:javascript
复制
<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下失败:

代码语言:javascript
复制
[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.配置

代码语言:javascript
复制
<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下失败:

代码语言:javascript
复制
[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,还有一些保守的开发人员:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-28 22:01:11

首先,您应该在pluginManagement中定义maven编译器插件,如下所示:

代码语言:javascript
复制
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
      <...>
    ...

此外,使用自动激活的配置文件,如下所示:

代码语言:javascript
复制
  <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..。

票数 4
EN

Stack Overflow用户

发布于 2019-08-28 15:25:42

tad更简单的解决方案依赖于使用属性,而不是显式配置条目。它不会因为任何它不支持的事情而抱怨。

代码语言:javascript
复制
<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<profiles>
  <profile>
    <id>jdk9+</id>
    <activation>
      <jdk>[9,)</jdk>
    </activation>
    <properties>
      <maven.compiler.release>8</maven.compiler.release>
    </properties>
  </profile>
</profiles>

享受吧!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55404641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档