java - Maven 使用了错误的 java 版本
问题描述
我正在尝试在 centOS 8 上构建一个 maven 项目。我希望 maven 使用 Java 版本 15。运行时mvn package
出现以下错误:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
(default-compile) on project systembrett-backend: Fatal error compiling: invalid target release: 15 -> [Help 1]
所以我怀疑 maven 使用了错误的 Java 版本,因为当我mvn package -X
为调试日志做的时候,它开始于:
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_275, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.1.1.el8_3.x86_64", arch: "amd64", family: "unix"
所以看起来,maven 使用的是 Java 1.8 版。但是mvn -version
说:
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 15.0.2, vendor: AdoptOpenJDK, runtime: /opt/jdk-15.0.2+7
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.1.1.el8_3.x86_64", arch: "amd64", family: "unix"
JAVA_HOME
是/opt/jdk-15.0.2+7
和PATH
是/opt/jdk-15.0.2+7/bin:/home/username/.local/bin:/home/username/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
。
我认为 maven 通过检查来选择 java 版本JAVA_HOME
,但显然它正在使用其他版本进行构建。有谁知道如何告诉 Maven 正确的版本?谢谢!
解决方案
以下是我用来解决此类问题的步骤列表:
- Linux 通常使用
alternatives
以确保使用正确的默认 Java 环境。如同:
$ alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
+ 1 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.191-2.6.15.4.el7_5.x86_64/jre/bin/java)
* 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre/bin/java)
也尝试一下,javac
因为它可能不会以相同的方式配置:
$ alternatives --config javac
- 对于你的
maven
例子,JAVA_HOME
应该足够了。
您的输出mvn -version
证明您已正确配置它。从您的 Java 中删除PATH
以确保JAVA_HOME
并mvn
找到正确的 Java。
- 也可以配置需要的
pom.xml
编译器,类似:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
- 另一件事可能是您没有使用相同的 ENV(不同的终端可能没有导出相同的环境变量 - 我假设您在 CentOS 上,您已经遇到过这种情况)。您必须退出终端并重新进入以使默认变量生效。
当使用不同的 JRE 和 JDK 时,您通常会遇到这种情况(更多:maven 安装的运行时为 JRE 而不是 JDK)
推荐阅读
- javascript - 从 JavaScript 淡入淡出动画中删除空格 - 故障排除
- python - python数据框列应用一个函数
- css - 为什么在 css 中打印时背景图像不起作用?
- c# - 禁用放置在gridview页脚中的链接
- python - Linux(armv7l)上多处理池中的 Scikit-learn train_test_split 不起作用
- python - 如何在 Python 中为 hadoop 中的 mapreduce 进行 Group By 和排序
- javascript - 使用 JavaScript 验证 HTML 选择元素(必须检查每个选项值)?
- php - 在循环中取消设置某个元素后,在循环中重置 PHP 中的数组
- c# - 如何在不使用锁的情况下测量方法的两次调用之间的间隔?
- python - 需要计算数据框列时使用 dask 进行并行计算