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

执行Maven测试时编译失败:module-info.java提示找不到org.junit.jupiter.api模块

解决Maven+JUnit 5模块化项目编译错误问题

嘿,我来帮你排查下这个困扰你的编译问题!从你贴出来的配置来看,有几个关键细节没处理好,咱们一步步来修正:

  • 测试模块的依赖配置位置错了
    你现在把requires org.junit.jupiter.api写在了主模块的module-info.java里,但这个依赖是test scope的,主模块根本不应该依赖测试库。正确的做法是在test目录下单独创建一个module-info.test.java(注意后缀是.test.java),专门用来配置测试模块的依赖:

    module 你的模块名.test {
        requires 你的模块名; // 依赖主模块
        requires org.junit.jupiter.api;
        opens com.yourpackage.tests to org.junit.jupiter.api; // 让JUnit能反射访问测试类
    }
    

    主模块的module-info.java只保留业务相关的依赖就行,别碰测试库。

  • Maven编译器插件没开启模块化支持
    你的maven-compiler-plugin版本是3.8.1,虽然指定了Java版本9,但没明确开启模块化处理。建议升级到更适配Java 9+的版本(比如3.11.0),同时加上<modulepath>true</modulepath>配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
            <source>9</source>
            <target>9</target>
            <modulepath>true</modulepath> <!-- 关键:启用模块化编译 -->
        </configuration>
    </plugin>
    
  • 测试依赖的<type>module</type>是多余的
    JUnit 5从5.6.0开始已经是模块化JAR了,Maven会自动识别,手动加<type>module</type>反而可能引发冲突,直接删掉这一行就行。

  • 检查项目目录结构是否匹配配置
    你指定了<sourceDirectory>src</sourceDirectory>和<testSourceDirectory>test</testSourceDirectory>,得确保目录结构是模块化的:

    • 主代码要放在src/你的模块名/下面,比如src/com.yourmodule/YourClass.java
    • 测试代码放在test/你的模块名.test/下面,比如test/com.yourmodule.test/YourTest.java
      如果还是用传统的src/main/java、src/test/java结构,那最好删掉手动指定的sourceDirectory和testSourceDirectory,让Maven用默认结构,这样模块化处理会更顺畅。

按照上面的步骤调整后,再重新运行mvn test试试,应该能解决编译错误了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:07:43