如何才能对运行时类路径而不是测试类路径具有 Maven 依赖项?

2022-09-02 21:36:17

我有一个案例,我想要对运行时类路径的依赖关系,而不是测试类路径。有问题的依赖关系是Logback,一个SLF4J实现。在运行时,我希望我的代码(可选)依赖于 logback,以便它具有可用的日志记录基础结构。但是,在测试时,我想使用该实现对数输出进行黑洞处理。作为运行时依赖项和测试依赖项,我在运行测试时会收到来自 SLF4J 的多个实现警告。我没有看到从测试类路径中排除的方法。slf4j-noplogbackslf4j-noplogback

如果可以避免,我不想将我的测试拆分为单独的包。

想法?


答案 1

我终于找到了一个真正的解决方案。从 Maven Surefire 插件的 2.6 版开始,现在有一个 classpathDependencyExcludevaledes 配置元素,它允许从类路径中排除特定的依赖项。因此,这有效:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.8</version>
  <configuration>
    <classpathDependencyExcludes>
      <classpathDependencyExclude>ch.qos.logback:logback-classic</classpathDependencyExclude>
    </classpathDependencyExcludes>
  </configuration>
</plugin>

答案 2

如果需要禁用日志输出,请添加一个日志备份配置文件,该文件将放弃所有输出。src/test/resources

如果需要对同一反应堆构建中的多个模块执行此操作,请考虑使用 maven 远程资源插件

此插件用于从远程存储库中检索资源的 JAR,处理这些资源,并将它们合并到使用 Maven 构建的 JAR 中。一个非常常见的用例是需要在整个组织中以一致的方式打包某些资源。


推荐