java - 强制 maven 使用不同的 java 版本
问题描述
我有使用 Java 1.8 的现有项目 我的 JAVA_HOME 设置为 Java 1.8 结果 maven 使用 Java 1.8 ,这很好 现在我们的项目决定开始使用在 Java 11 上运行的 SonarQube 9.x 除了运行任何扫描/分析我们的代码 - 它也需要 Java 11
所以这就是我需要做的:
#1 使用默认 jdk ( 1.8 ) ( mvn clean install ) 编译代码
#2 使用 jdk 11 ( mvn sonar:sonar ) 运行声纳扫描
要执行 #2 需要 maven 使用 jdk 11,而要执行 #1 需要 maven 使用 jdk 1.8。
在阅读了关于 SO 的各种问题后,遇到了“工具链”
所以将 toolchains.xml 添加到我的“m2”文件夹中:
<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>1.11</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>C:\construction\tools\jdk-11.0.12</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>C:\Program Files\Java\jdk1.8.0_191</jdkHome>
</configuration>
</toolchain>
在我的项目 pom.xml 中添加了工具链插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>1.11</version>
<vendor>sun</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
现在,当我运行 maven clean install 时,可以在日志中看到“似乎”使用了 java 11:
[信息] --- maven-toolchains-plugin:1.1:toolchain (默认) @ TreeSurveyAPI ---
[INFO] 所需工具链:jdk [ vendor='sun' version='1.11' ] [INFO] 找到类型 jdk 的匹配工具链:JDK [C:\construction\tools\jdk-11.0.12]
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ TreeSurveyAPI --- [INFO] maven-compiler-plugin 中的工具链:JDK[C:\construction\tools\jdk-11.0 .12] [INFO] 检测到更改 - 重新编译模块![INFO] 编译11个源文件到C:\construction\xxx\XYZ-main\target\classes
因此,maven 和工具链“似乎”正在使用 Java 11 来编译代码。但是,在对已编译的类文件执行 javap 后,将主要版本指示为 52 ( Java 8 )
javap -verbose Abc.class | findstr "major"
所以这是我的问题:
#1 在上述情况下,因为工具链指向 java 11 不应该用 java 11 编译代码吗?为什么使用 java 8 ?
#2 如何有条件地使用 java 8 Vs java 11(使用 java 8 编译和构建并使用 java 11 运行声纳任务)?
谢谢
解决方案
推荐阅读
- html - 如何将图像标签插入 html 字符串?
- python - C++ 中的嵌入式 Python 不能两次导入 pandas
- c# - 通过从 resx 文件中翻译的字符串获取名称
- amazon-web-services - AWS 负载均衡器 - 所有 EC2 实例均未通过运行状况检查并显示已停止服务。为什么?
- r - 选择下拉元素会导致错误:“元素当前不可见,可能无法操作”
- google-bigquery - BigQuery 加入需要大量时间
- javascript - 单击按钮时无法在laravel ajax中下载文件
- c# - C# 使用 JsonConverter 将 Json List 转换为 List 对象
- ajax - 出现的原因是什么 - 对象 url 未定义?
- ssl - HEROKU 免费层 SSL:您需要在 Hobby 或 Professional dynos 上运行才能使用 SNI SSL