【发布时间】:2022-01-15 13:35:29
【问题描述】:
下面我将详细描述我遇到的问题。我知道 Stackoverflow 中还有其他线程,但我的问题尚未解决,因此我测试了大部分建议。
说明 我使用 Spring REST 接口(参见下面的代码)制作了一个程序,但我在使用 Maven 编译代码时遇到了问题(参见问题部分)。使用我的 IDE Eclipse 编译代码没有问题。
问题 当我在 Windows 的命令行中使用 Maven 编译代码时: mvn clean compile 我收到错误消息: 错误:无效的目标版本:1.17。 Maven 和 Java 拥有最新版本和环境。变量 JAVA_HOME 设置为正确的 Java 安装路径: C:>回显%JAVA_HOME% C:\Program Files\Java\jdk-17.0.1
C:>java -版本 java版本“17.0.1”2021-10-19 LTS Java(TM) SE 运行时环境 (build 17.0.1+12-LTS-39) Java HotSpot(TM) 64 位服务器 VM(内部版本 17.0.1+12-LTS-39,混合模式,共享)
C:>mvn -version 阿帕奇 Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537) Maven 主页:C:\tobbe\apache-maven-3.8.4 Java 版本:17.0.1,供应商:Oracle Corporation,运行时:C:\Program Files\Java\jdk-17.0.1 默认语言环境:sv_SE,平台编码:Cp1252 操作系统名称:“windows 10”,版本:“10.0”,arch:“amd64”,家族:“windows”
我尝试了几个不同版本的 Java 和 Maven,但都出现了同样的错误。我已经减少了 POM 中的源/目标,当版本在 11-17 之间时,我得到了同样的错误,并且更低的版本给出了源代码编译错误,因为可能版本太低了。
这是我的 pom.xml:
<?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.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>tobbe</groupId>
<artifactId>stocks-rest</artifactId>
<packaging>jar</packaging>
<version>1.0.1-SNAPSHOT</version>
<properties>
<java.version>17</java.version>
<maven.compiler.source>1.17</maven.compiler.source>
<maven.compiler.target>1.17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>tobbe</groupId>
<artifactId>Stocks_Backend</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
还有我的代码:
/**
* Version 1.0.2
*/
package Rest;
import java.awt.AWTException;
import java.awt.HeadlessException;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.lang.instrument.IllegalClassFormatException;
import java.net.MalformedURLException;
import java.util.List;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import Enums.Market;
import Enums.REA_Stock_State;
import Enums.Stock_State;
import REA.REAMain;
import REA.REAStock;
import Stocks.Logger;
import mExceptions.ElementSizeException;
@SpringBootApplication
@RestController
public class StocksRestApi
{
private Logger iLogger = null;
public StocksRestApi()
{
iLogger = new Logger();
}
public static void main(String[] args)
{
SpringApplication.run(StocksRestApi.class, args);
}
@GetMapping(value="/logdata")
public String logdata()
{
List<String> dataLogList = iLogger.getLogData();
String dataLog = "";
if(dataLogList.size() == 0)
{
dataLog = "Run http://localhost:8080/rea first";
}
for(String row: dataLogList)
{
dataLog += row;
}
return dataLog;
}
}
问题 为什么我在使用 Maven 编译代码时会得到无效的目标版本 1.17?
【问题讨论】:
-
我建议使用
<maven.compiler.release>17</maven.compiler.release>... 问题是使用17而不是1.17自JDK9 以来已更改...如答案中所述... -
更正版本会导致我在 Eclipse 中没有得到的源代码的编译错误:/C:/tobbe/eclipse/student-services/src/main/java/Rest/StocksRestApi.java: [28,19] 包 mExceptions 不存在 [ERROR] /C:/tobbe/eclipse/student-services/src/main/java/Rest/StocksRestApi.java:[83,91] 找不到符号 [ERROR] 符号: class ElementSizeException [ERROR] 位置:class Rest.StocksRestApi 其中:import mExceptions.ElementSizeException;和公共字符串 rea() 抛出 ElementSizeException
-
Eclipse中配置了哪个JDK版本?其次,如果这是一个看起来像这样的 Spring Boot 应用程序,则使用 maven-assembly-plugin 是错误的。为此使用 spring-boot-maven-plugin..
-
Eclipse 中也选择了 1.17,我现在没有安装其他 Java JDK。我有插件汇编器,因为我想从 Maven 创建一个可执行的 jar。由于导入失败,我仍然无法编译项目。缺少的类在 m2 的 jar 中,所以我不明白为什么编译失败(在 Eclipse 中工作)。这是一个自己的异常,在导入时失败:。
-
包异常;公共类 ElementSizeException 扩展异常 { public ElementSizeException(String aErrorMsg) { super(aErrorMsg); } }