You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本降级。

解决步骤

按优先级依次执行以下操作,即可永久解决该问题:

  1. 显式配置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>
  1. 修正Eclipse全局JDK配置
    • 打开 Window > Preferences > Java > Installed JREs,确认java-11-openjdk已正确添加,且被勾选为工作区默认JRE
    • 进入 Window > Preferences > Java > Compiler,将Compiler compliance level手动设置为11,不要保留默认值
  2. 清理旧配置后重新更新项目
    • 关闭Eclipse中当前打开的项目,进入项目根目录,删除.classpath文件和.settings文件夹
    • 右键点击项目文件,在RTC相关选项中取消配置文件的只读锁定,确保Eclipse有写入权限
    • 重新打开Eclipse,执行Maven > Update Project,勾选Force Update of Snapshots/Releases即可正常关联JDK 11

补充说明:如果以上操作完成后问题仍复现,说明当前Eclipse Oxygen版本对Java 11的兼容存在缺陷,升级m2e插件到1.18及以上版本,或直接升级Eclipse到2020-09及以后的正式版本即可彻底解决兼容问题。

内容的提问来源于stack exchange,提问作者Sridhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:54:23