Eclipse Maven更新项目后JRE自动降级为J2SE-1.5的解决方法
问题背景
- 开发环境:Eclipse IDE Oxygen 4.7.3a 搭配 RTC Client v6.0.5 开发Spring Boot项目,RTC作为代码仓库存放项目代码
- 故障现象:右键点击项目,依次选择
Maven > Update Project并勾选 Force Update of Snapshots/Releases 选项执行项目更新后,JRE System Library会从工作区默认的java-11-openjdk自动降级为J2SE-1.5,每次更新后都需要手动修改Java Build Path为openjdk-11,影响开发效率。 - 项目
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.5.6</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.xx.rt.edgeservice.discoveryserver</groupId> <artifactId>rt-edge-service-discovery</artifactId> <version>0.0.1-SNAPSHOT</version> <name>rt-edge-service-discovery</name> <description>XX Service Discovery</description> <properties> <java.version>11</java.version> <spring-cloud.version>2020.0.4</spring-cloud.version> <jacoco.version>0.8.6</jacoco.version> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath> <sonar.language>java</sonar.language> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.4.0.905</version> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <executions> <execution> <id>jacoco-initialize</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-site</id> <phase>package</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> </project>
根因说明
该问题是Eclipse m2e插件的默认机制导致:当m2e无法从Maven配置中明确解析到Java编译版本时,会默认回退到J2SE-1.5的兼容配置。当前使用的Eclipse Oxygen版本发布时间早于Java 11正式GA,自带的m2e插件无法正确识别Spring Boot父POM中通过java.version属性传递的编译版本,加上RTC客户端默认会对项目配置文件加写锁,导致m2e更新项目时无法写入正确的JRE关联配置,最终触发JRE版本降级。
解决步骤
按优先级依次执行以下操作,即可永久解决该问题:
- 显式配置maven-compiler-plugin版本
不要仅依赖Spring Boot父POM的属性传递,在pom.xml的<build><plugins>节点下手动添加编译插件的明确配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>11</source> <target>11</target> <release>11</release> </configuration> </plugin>
- 修正Eclipse全局JDK配置
- 打开
Window > Preferences > Java > Installed JREs,确认java-11-openjdk已正确添加,且被勾选为工作区默认JRE - 进入
Window > Preferences > Java > Compiler,将Compiler compliance level手动设置为11,不要保留默认值
- 打开
- 清理旧配置后重新更新项目
- 关闭Eclipse中当前打开的项目,进入项目根目录,删除
.classpath文件和.settings文件夹 - 右键点击项目文件,在RTC相关选项中取消配置文件的只读锁定,确保Eclipse有写入权限
- 重新打开Eclipse,执行
Maven > Update Project,勾选Force Update of Snapshots/Releases即可正常关联JDK 11
- 关闭Eclipse中当前打开的项目,进入项目根目录,删除
补充说明:如果以上操作完成后问题仍复现,说明当前Eclipse Oxygen版本对Java 11的兼容存在缺陷,升级m2e插件到1.18及以上版本,或直接升级Eclipse到2020-09及以后的正式版本即可彻底解决兼容问题。
内容的提问来源于stack exchange,提问作者Sridhar
相关产品推荐
相关产品推荐

