如何在运行时类路径上具有Maven依赖性而不是测试类路径?

Mic*_*and 18 java dependencies maven-2 maven

我有一个案例,我希望依赖于运行时类路径而不是测试类路径.有问题的依赖是Logback,一个SLF4J实现.在运行时,我希望我的代码(可选)依赖于logback,以便它具有可用的日志记录基础结构.但是,在测试时,我想使用该slf4j-nop实现来破坏日志输出.随着logback作为运行时依赖,slf4j-nop作为测试的依赖,我跑我的测试时得到SLF4J多个实施警告.我没有看到logback从测试类路径中排除的方法.

如果可以避免,我不想将我的测试分成单独的包.

想法?

Mic*_*and 19

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

<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>
Run Code Online (Sandbox Code Playgroud)

  • 万分感谢.可悲的是,这似乎是一个黑客...希望我们能得到一个"!" 范围字段中的运算符. (2认同)