You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetBeans 13搭配Tomcat 10运行Maven项目时打包错误求助

解决Maven War插件2.3与高版本JDK兼容问题

问题描述

已安装NetBeans、Tomcat 10,Tomcat可在localhost正常运行,JDK环境变量配置完成,pom.xml中配置了Maven插件,但创建并运行示例项目时出现以下错误:

--- maven-war-plugin:2.3:war (default-war) @ mavenproject1 ---
        Error injecting: org.apache.maven.plugin.war.WarMojo
        com.google.inject.ProvisionException: Unable to provision, see the following errors:
        
        1) Error injecting constructor, java.lang.ExceptionInInitializerError
          at org.apache.maven.plugin.war.WarMojo.<init>(Unknown Source)
          while locating org.apache.maven.plugin.war.WarMojo
        
        1 error
            at com.google.inject.internal.InternalProvisionException.toProvisionException (InternalProvisionException.java:226)
            at com.google.inject.internal.InjectorImpl$1.get (InjectorImpl.java:1053)
            ...
        Caused by: java.lang.ExceptionInInitializerError
            at com.thoughtworks.xstream.XStream.setupConverters (XStream.java:679)
            ...
        Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module
            ...
        Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war (default-war) on project mavenproject1: Execution default-war of goal org.apache.maven.plugins:maven-war-plugin:2.3:war failed: Unable to load the mojo 'war' in the plugin 'org.apache.maven.plugins:maven-war-plugin:2.3' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: null
        -----------------------------------------------------
        realm =    plugin>org.apache.maven.plugins:maven-war-plugin:2.3
        strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
        urls[0] = file:/C:/Users/selim/.m2/repository/org/apache/maven/plugins/maven-war-plugin/2.3/maven-war-plugin-2.3.jar
        ...
Number of foreign imports: 1
import: Entry[import  from realm ClassRealm[maven.api, parent: null]]

-----------------------------------------------------
: ExceptionInInitializerError: Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module @f2276c9
-> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

错误原因

maven-war-plugin:2.3依赖的XStream版本过旧,不支持JDK 9及以上的模块系统(JPMS)。JDK 9+的模块系统默认限制了对私有字段的反射访问,导致插件在尝试访问TreeMap.comparator私有字段时被阻止,抛出InaccessibleObjectException。

解决方法

方法1:升级maven-war-plugin到兼容版本(推荐)

在项目的pom.xml中更新maven-war-plugin的版本至3.3.2及以上(该版本已适配JDK 9+的模块系统):

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <!-- 使用兼容高版本JDK的稳定版本 -->
            <version>3.3.2</version>
        </plugin>
    </plugins>
</build>

更新后重新执行Maven构建命令,问题即可解决。

方法2:临时添加JVM反射权限参数(应急方案)

如果暂时无法升级插件,可通过给Maven添加JVM参数绕过模块系统的反射限制:

  • 打开NetBeans,依次进入工具 > 选项 > Java > Maven
  • 在执行标签页的VM选项输入框中添加:
    --add-opens java.base/java.util=ALL-UNNAMED
    
  • 保存配置后重新运行项目。

注意:此方案仅为临时应急,长期来看升级插件是更规范、更安全的解决方式。

内容的提问来源于stack exchange,提问作者SelimSezer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:00:59