Eclipse中Maven update用Java9、compile用Java8致Generated类导入错误
问题根源
升级新版Spring后,框架默认引入了适配Java 9+的注解处理过渡依赖,结合Eclipse Maven插件执行update操作时优先读取全局JDK配置、优先级高于项目pom局部配置的特性,导致Generated注解的导入路径被自动识别为高版本的javax.annotation.processing.Generated,而compile阶段因为pom的编译配置生效,就会恢复为Java 8对应的路径。
解决方案
1. 强制pom.xml固定Java版本与注解依赖
在pom.xml中明确指定编译级别为Java 8,同时手动引入Java 8对应的javax.annotation-api依赖,优先级覆盖Spring自带的高版本适配依赖,配置示例如下:
<!-- 全局属性固定编译版本 --> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.release>8</maven.compiler.release> </properties> <dependencies> <!-- 手动引入Java 8官方annotation包,优先级高于Spring自带的依赖 --> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency> <!-- Spring Boot项目可额外排除starter中自带的annotation依赖,避免冲突 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
2. 修改Eclipse Maven运行时配置
- 打开
Window > Preferences > Java > Installed JREs,仅保留Java 8版本的JDK/JRE处于勾选状态,取消或删除所有高版本JDK配置 - 进入
Window > Preferences > Maven > Installations,点击对应Maven版本的Runtime按钮,绑定运行时JDK为上一步配置的Java 8 - 右键项目进入
Properties > Project Facets,将Java版本设置为1.8,保存配置
3. 关闭Eclipse自动导入修正
- 打开
Window > Preferences > Java > Editor > Save Actions,取消勾选Organize imports,避免Maven update后编辑器自动改写导入路径 - 也可单独针对当前项目配置:右键项目进入
Properties > Java Editor > Save Actions,勾选Enable project specific settings后关闭自动整理导入功能
配置完成后执行Maven clean,再执行Maven update验证导入语句是否不再被改写,执行Maven compile确认编译正常。
内容的提问来源于stack exchange,提问作者suomi
相关产品推荐
相关产品推荐

