Eclipse中Maven项目pom.xml首行报错:Cannot access defaults field of Properties
问题根源
这个错误是因为Maven核心插件(比如maven-compiler-plugin)版本太老,没法兼容JDK11的API改动——JDK9之后对Properties类的defaults字段做了访问限制,旧插件还在直接调用这个字段,所以触发报错。
具体修复步骤
显式配置兼容JDK11的Maven编译器插件
在你的pom.xml里添加<build><plugins>节点,指定maven-compiler-plugin的版本为3.8.1及以上(这个版本开始支持JDK11),同时如果是war项目,也更新maven-war-plugin到兼容版本:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> </plugins> </build>更新Eclipse的Maven版本
打开Eclipse的Window > Preferences > Maven > Installations,确认用的是Maven3.6.0及以上版本(旧版Maven核心不支持JDK11)。如果没有,手动下载高版本Maven后添加进来设为默认,然后右键项目选Maven > Update Project,勾选强制更新选项刷新配置。确认项目JDK配置
右键项目打开Properties,先检查Java Build Path > Libraries,确保JRE是JDK11;再看Java Compiler,把编译合规等级设为11,同时勾选“使用Java Build Path上的JavaSE-11执行环境的合规性”。
补充说明
你现在pom.xml里指定的maven-jar-plugin:3.1.0是兼容JDK11的,但问题出在默认的maven-compiler-plugin版本太低,必须显式指定高版本才能解决这个报错。
内容的提问来源于stack exchange,提问作者IA Nadir

