首页 > 解决方案 > 在 Spring boot pom.xml 中指定 java 1.8 JDK 路径而不将 java_home 设置为 1.8 版本

问题描述

您好我有一个多模块项目,我需要在其中添加一个新模块,它是一个 SPRING BOOT 应用程序。所有其他模块都在 java 1.6 版上运行,但我需要使用 java 1.8 运行 Spring boot 模块。问题是我无法将 JAVA_HOME 从 1.6 更改为 1.8。我需要在 Spring Boot Application 的 POM.xml 中指定 Java 位置。

我尝试在 POM.xml 中提供编译器和版本的 JDK 路径,但出现错误 Unsupported major minor issue 像这样:

**org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:494)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:119)
... 20 more
Caused by: java.lang.UnsupportedClassVersionError: org/apache/maven/plugins/clean/CleanMojo : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)**

这是我正在使用的 POM。

 <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven- 
     4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
    <relativePath/>
    </parent>
    <groupId>com.data.service.risk</groupId>
    <artifactId>DataService</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>DataService</name>
    <description>Data service Project</description>
    
    <properties>
    <jdk.version>8</jdk.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <jdk>C:\software\tools\Java\jdk1.8.0_121</jdk>
    </properties>
    
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.2.2.RELEASE</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.3.RELEASE</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.3.RELEASE</version>
    </dependency>
    
    <dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
    </dependency>
    
    
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.2.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.2.2.RELEASE</version>
    <scope>test</scope>
    <exclusions>
    <exclusion>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    
    <!-- this is a java 6 compiled dependency-->
    <dependency>
    <groupId>com.test.data.risk</groupId>
    <artifactId>java_6_project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
    <version>6.1.19</version>
    <exclusions>
    <exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>servlet-api</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
    </dependency>
    
    
    </dependencies>
    
    
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
    <jvm>C:\software\tools\Java\jdk1.8.0_121\bin\java</jvm>
    <forkMode>once</forkMode>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <executable>C:\software\tools\Java\jdk1.8.0_121\bin\javac</executable>
    <fork>true</fork>
    </configuration>
    </plugin>
    
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    
    </plugin>
    </plugins>
    </build>    
    </project>

请让我知道如何在 POM.xml 中指定 JDK 位置,而无需将 JAVA_HOME 设置为 java 1.8 for Spring Boot Application

标签: javaspring-bootpom.xml

解决方案


这很简单。尝试将以下属性添加到 pom.xml。请注意,我添加了 java 11 。你可以添加你需要的版本。

<properties>
    <jdk.version>11</jdk.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

还要添加以下插件,指定您的 JDK 路径。例如:C:\Program Files\Java\jdk-11.0.6\bin\javac

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
      <verbose>true</verbose>
      <fork>true</fork>
      <executable><!-- path-to-javac --></executable>
      <compilerVersion>1.3</compilerVersion>
    </configuration>
  </plugin>
</plugins>

添加上述代码后,我的 Spring Boot 项目按预期工作。参考:http ://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html


推荐阅读