你遇到的这个错误是 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+,这是最干净、最可持续的解决方案。

更多推荐