我有一个依赖关系,我想在test
范围内使用(以便在运行单元测试时将其放在类路径中),并在runtime
范围内使用(以便可以将其包含在WAR / EAR /其他包装中进行部署),但是不影响对依赖 Artifact 的传递依赖查找)。
一个真实的例子是SLF4J的实现JAR(例如Logback
)。当我运行测试时,我希望它存在于类路径中,并且希望将它包含在我的WAR / EAR中,但是我不希望依赖于我的项目的项目将其包含在传递依赖关系查找中。
我尝试使用<scope>test,runtime</scope>
,但Maven 3产生警告:
[WARNING] 'dependencies.dependency.scope' for org.slf4j:jcl-over-slf4j:jar
must be one of [provided, compile, runtime, test, system] but is 'test,runtime'.
在这种情况下声明依赖关系范围的正确方法是什么?
最佳答案
运行时范围还使 Artifact 在测试类路径上可用。只需使用运行时。 (请参阅Maven documentation。)
为了避免依赖性被传递解决,也可以使用<optional>true</optional>
使其成为optional:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback</artifactId>
<version>0.5</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>