[已解决] Error injecting: org.apache.maven.plugin.war.WarMojo com.google.inject.ProvisionException:
·
你遇到的这个错误是 Maven WAR 插件在 Java 模块化系统(JPMS)下的兼容性问题,根本原因是:
XStream 1.4.2(被
maven-war-plugin:2.4使用)试图通过反射访问java.util.TreeMap.comparator,这在 Java 9+ 中是不允许的,除非显式打开模块。
✅ 解决方案(任选其一)
✅ 方案 1:升级 maven-war-plugin 到 3.3.2+
这是最推荐的方式,新版插件已经修复了这个问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version> <!-- 或更高 -->
</plugin>
✅ 方案 2:降级 Java 到 8(不推荐)
如果你必须使用 maven-war-plugin:2.4,那就只能用 Java 8,因为它不兼容 Java 9+ 的模块系统。
✅ 方案 3:添加 JVM 参数(临时绕过)
如果你暂时不能升级插件,可以手动打开模块访问权限(不推荐长期使用):
export MAVEN_OPTS="--add-opens java.base/java.util=ALL-UNNAMED"
mvn clean package
✅ 总结
| 选项 | 说明 | 推荐程度 |
|---|---|---|
| ✅ 升级插件 | 兼容 Java 11/17/21 | ⭐⭐⭐⭐ |
| ❌ 降级 Java | 技术债,迟早要还 | ⭐ |
| ⚠️ 加 JVM 参数 | 临时绕过,非根本解决 | ⭐⭐ |
✅ 建议
直接升级 maven-war-plugin 到 3.3.2+,这是最干净、最可持续的解决方案。
更多推荐
所有评论(0)