我有一个依赖项,我想在test
范围内使用(因此它在运行单元测试时在类路径中),并且在runtime
范围内(这样我可以在WAR/EAR /其他包装中包含它用于部署,但不影响依赖工件的传递依赖查找).
一个真实的例子是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'.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,声明依赖范围的正确方法是什么?
Chr*_*her 36
运行时作用域还使测试类路径上的工件可用.只需使用运行时.(参见Maven 文档.)
为了避免依赖传递地解决,也使其可选有<optional>true</optional>
:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback</artifactId>
<version>0.5</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Pre*_*shi 18
不确定这是否仍然可以帮助仍在寻找简单方法的人 - https://howtodoinjava.com/maven/maven-dependency-scopes/此链接帮助我添加了正确的范围。以下是范围映射和我们需要依赖项的阶段的摘要。
因此,当我在测试和运行时需要依赖项时,我将范围指定为“运行时”,并且它按预期工作。
car*_*ing 12
您只能为每个<scope/>
标记定义一个范围值.
我担心仅仅使用示波器无法实现您想做的事情.如果您定义范围test
,它将仅在测试期间可用; 如果您定义了提供的范围,那么这意味着您希望在编译和测试期间解析和使用项目的依赖关系,但它不会包含在WAR文件中.不管怎样,这不是你想要的.
因此,我建议你看看maven-assembly-plugin,你可以用它实现它,但它仍然需要一些游戏.
小智 7
声明具有范围的依赖项runtime
可确保在编译期间库不可用.
将依赖项声明为可选项会导致依赖项解析过程中断; 取决于您的库的项目将需要明确地包含依赖项本身.
所以声明这个的正确方法是:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.13</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38516 次 |
最近记录: |