首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制maven使用不同的java版本。

强制maven使用不同的java版本。
EN

Stack Overflow用户
提问于 2021-11-03 11:12:25
回答 1查看 991关注 0票数 0

我有一个使用Java1.8的现有项目,我的JAVA_HOME被设置为Java1.8,因此maven使用Java1.8,现在我们的项目决定开始使用运行在Java11上的SonarQube 9.x,除了运行我们的代码的任何扫描/分析之外,它还需要Java 11。

所以我需要做的是:

#1使用默认jdk ( 1.8 )编译代码( mvn干净安装)

#2使用jdk 11进行声纳扫描( mvn声纳:声纳)

要执行#2,需要maven使用jdk 11,而执行#1则需要maven使用JDK1.8。

在阅读了有关SO的各种问题后,出现了“工具链”。

因此,将toolchains.xml添加到我的“m2”文件夹中:

代码语言:javascript
复制
<?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中添加了工具链插件

代码语言:javascript
复制
<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干净安装时,可以在日志中看到java 11‘似乎是被使用的:

信息-maven-工具链-插件:1.1:工具链(默认)@ TreeSurveyAPI -信息所需的工具链: jdk供应商=‘sun’版本=‘1.11’找到匹配的工具链类型jdk: JDKC:\construction\tools\jdk-11.0.12 INFO --maven-编译器-插件:3.7.0:编译(默认-编译)@ TreeSurveyAPI --编译器中的信息工具链-编译器-插件: JDKC:\construction\tools\jdk-11.0.12所检测到的更改-重新编译模块!将11个源文件编译到C:\construction\xxx\XYZ-main\target\classes的信息

因此,maven和工具链似乎正在使用Java 11编译代码。但是,在针对已编译的类文件执行javap之后,主要版本显示为52 ( Java 8)

代码语言:javascript
复制
javap -verbose Abc.class | findstr "major"

以下是我的问题:

#1在上述情况下,既然工具链指向java 11,那么代码不应该用java 11编译吗?为什么要使用java 8呢?

#2如何有条件地使用java 8 Vs java 11 (使用java 8编译和构建,并使用java 11运行声纳任务)?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-11-03 11:19:41

您也可以在java 11上运行您的项目。它将运行java 8代码,在99%的情况下没有问题。这就是我会做的。因此,升级项目java版本似乎是最简单的解决方案。

如果这不起作用,请查看此回答

此外,如果您需要快速更改JVM版本,用于各种任务和各种文件夹,则可以使用此工具

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

https://stackoverflow.com/questions/69823845

复制
相关文章

相似问题

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