在 Maven 中设置 Java 版本,系统 Java 版本为 11.0

Posted

技术标签:

【中文标题】在 Maven 中设置 Java 版本,系统 Java 版本为 11.0【英文标题】:Setting the Java Version in Maven with system Java version as 11.0 【发布时间】:2020-04-12 22:11:36 【问题描述】:

我目前在本地机器上使用 jdk 版本为 11,使用 JAVA_HOME 设置。

我需要运行一个 java_version 为 9 的 maven 项目。 做同样的事情参考了https://www.baeldung.com/maven-java-version

这是我的 pom.xml 文件

<properties>
    <java.version>8</java.version>
    <maven.compiler.plugin.version>3.8.0</maven.compiler.plugin.version>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>$maven.compiler.plugin.version</version>
            <configuration>
                <release>8</release>
            </configuration>
        </plugin>
    </plugins>
</build>

然后我运行命令“mvn clean install”,生成的 jar 文件在其清单文件中的 java-version 为 11。 这是生成的jar的Manifest文件的sn-p

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.5.0
Built-By: test
Build-Jdk: 11.0.2

为什么它仍然选择java版本为11,为什么不是8?

【问题讨论】:

您可以执行mvn -v 来检查您的Maven 配置的Java 版本(~/.mvnrc)。此外,请注意 release 作为标志只能由 Java-9(值 9)及更高版本标识。除此之外,Java-8 应该是 1.8 而不是 8 我不确定您是否知道这一点:您构建的 JDK 和您构建的 Java 版本可能不同。 for Java 8 with JDK 11 是完全可以构建的。 【参考方案1】:

在 POM &lt;properties&gt; 部分中设置 java.version 不会更改用于编译 maven-compiler-plugin 的 Java 版本。它被 Spring Boot 使用(有关相关讨论,请参阅 Specifying java version in maven - differences between properties and compiler plugin)。

您的构建仍然使用安装在您机器上的 JDK 11(这反映在清单属性 Build-Jdk: 11.0.2),但是,您的代码实际上是使用 Java 8 的源代码和目标代码编译的。 JDK 11 知道如何针对 JDK 8 等早期版本进行编译,因此您的构建工作正常。

【讨论】:

假设您的 PC 中某处有 jdk1.8,那么如果您运行 JAVA_HOME=/path/to/jdk1.8/ mvn build,那么构建将从 1.8 开始 @VishwaRatna 是的,但是您仍然可以使用 JDK 11 来针对 8、9 或 10 进行编译。无需切换 JDK。 是的,总是有向后兼容性的。【参考方案2】:

您可以随时为特定项目显式更改 java 版本,以使其编译为您想要的版本。

使用JAVA_HOME=/path/to/jdk1.8/ mvn build

除此之外,您还可以在 pom 中明确设置版本。

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

【讨论】:

以上是关于在 Maven 中设置 Java 版本,系统 Java 版本为 11.0的主要内容,如果未能解决你的问题,请参考以下文章

在 Maven 2 的命令行中设置插件的版本

在基于 Visual Studio Code Maven 的 Java 项目中设置类路径

如何在 Maven 发布插件中设置 SCM 标签?

eclipse 中设置maven插件创建Java工程以及创建web工程

在tomcat7 maven插件中设置ENV变量

如何修改maven依赖包的版本