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

在Java 9与Maven 3.5环境下执行单元测试及应用的问题

解决Java 9环境下Maven运行单元测试失败的问题

你猜的没错!核心问题确实是**--add-modules java.xml.bind参数只被加到了编译阶段,没传递到测试运行阶段**。Java 9开始JAXB相关模块(java.xml.bind)被从默认JDK类路径中移除,变成了可选模块——这就导致编译时能找到它,但运行单元测试时JVM找不到该模块,直接抛出异常。

下面给你两个可行的解决办法,按需选择:

方法一:统一配置编译和测试阶段的JVM参数

在你的pom.xml里,同时给负责编译的maven-compiler-plugin和负责运行测试的maven-surefire-plugin加上--add-modules java.xml.bind参数,确保编译和运行阶段都能加载这个模块:

<build>
    <plugins>
        <!-- 编译阶段配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>9</release>
                <compilerArgs>
                    <arg>--add-modules</arg>
                    <arg>java.xml.bind</arg>
                </compilerArgs>
            </configuration>
        </plugin>
        <!-- 测试运行阶段配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <argLine>--add-modules java.xml.bind</argLine>
            </configuration>
        </plugin>
    </plugins>
</build>

方法二:引入独立JAXB依赖(长期推荐)

因为Java 9之后JAXB逐步从JDK中剥离,后续版本甚至完全移除,所以更稳妥的方式是直接引入JAXB的独立Maven依赖,彻底摆脱对JDK内置模块的依赖:

<dependencies>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.1</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

这种配置下,你完全不需要再加--add-modules参数,Maven会自动把这些依赖加入类路径,编译和测试运行都能正常工作。

配置完成后,重新执行mvn clean install,单元测试应该就能顺利通过了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:38