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

Maven模块化项目Log4j类缺失致JUnit测试失败求助

问题描述

我在项目中添加了Log4j的可选依赖:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.19.0</version>
  <optional>true</optional>
</dependency>

同时在module-info.java中添加了静态依赖声明:

requires static org.apache.logging.log4j;
requires static org.apache.logging.log4j.core;

非模块化构建时一切正常,但模块化构建下JUnit测试执行失败。添加-e参数到Maven命令后,错误栈核心问题是找不到org.apache.logging.log4j.util.Supplier类。

排查细节:

  • 用-X参数确认,编译和测试阶段的模块路径中都包含Log4j的API和core模块,且该类确实存在于对应JAR包中
  • 尝试添加--add-opens参数,提示未知模块
  • 给maven-compiler-plugin设置<release>11</release>也无法解决问题
  • 本地和GitHub Action中均会出现该错误
解决方案

1. 补充Log4j API的可选依赖

org.apache.logging.log4j.util.Supplier属于Log4j API模块,而非core模块。当前依赖仅添加了core,需补充API的可选依赖:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.19.0</version>
  <optional>true</optional>
</dependency>

2. 调整测试阶段的依赖范围

静态依赖(requires static)仅保证编译时可用,运行时不会自动引入。JUnit测试运行时需显式引入Log4j依赖,添加测试范围的依赖配置:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.19.0</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.19.0</version>
  <scope>test</scope>
</dependency>

3. 配置Maven Surefire插件确保模块路径正确

Maven Surefire插件运行测试时,可能未正确加载模块路径。显式配置插件,强制引入Log4j模块:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.1.2</version>
  <configuration>
    <argLine>--add-modules org.apache.logging.log4j,org.apache.logging.log4j.core</argLine>
  </configuration>
</plugin>

4. 调整模块声明的依赖类型

如果测试代码直接依赖Log4j的类,静态依赖无法满足运行时需求。可将测试模块的module-info.test.java(若存在)中的依赖改为非静态:

requires org.apache.logging.log4j;
requires org.apache.logging.log4j.core;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:10:54