Java11升级至17后Maven-war-plugin:2.2 API不兼容报错求助
问题解决:Maven War插件Java 17兼容错误
背景信息
- 公司项目已从Java 11升级至17,同步更新了以下内容:Eclipse版本、Java版本、surefire插件配置、settings.xml中的
mirrorOf标签 - 当前环境版本详情:
- Java版本:17
- Java Home:
C:\Program Files\Java\jdk-17.0.5 - Java路径:
C:\Program Files\Java\jdk-17.0.5\bin - pom.xml中指定Java版本:17
- 系统安装Maven版本:3.8.5
- MAVEN_HOME:
C:\project\Softwares\Maven\apache-maven-3.8.5\bin - pom.xml中指定Maven版本:3.8.1
报错信息
Unable to load the mojo 'war' in the plugin 'org.apache.maven.plugins:maven-war-plugin:2.2' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: Cannot access defaults field of Properties
解决方案
问题根源
maven-war-plugin:2.2版本过于老旧,不支持Java 17的反射访问限制。Java 17收紧了反射权限,旧版本插件代码尝试访问Properties类的defaults字段,触发权限禁止错误。
修复步骤
- 在pom.xml中升级maven-war-plugin至兼容Java 17的版本,推荐使用3.3.2及以上版本,配置示例:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build>
- 执行命令
mvn clean install重新构建项目,验证错误是否消除。
额外建议
检查项目中其他Maven插件(如maven-compiler-plugin、maven-surefire-plugin)的版本,确保均使用支持Java 17的版本,避免后续出现同类兼容问题。
内容的提问来源于stack exchange,提问作者Ruchi
相关产品推荐
相关产品推荐

