将 Maven 依赖项声明为仅用于测试运行时(而不是测试编译)类路径的最佳方法是什么?
具体来说,我想要slf4j-api
(日志门面)作为典型的编译范围依赖项,但我想要slf4j-simple
(适用于单元测试的准系统实现)仅在测试运行时类路径上(测试编译不需要)。我一直在这样做:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
然而,这样做的缺点是dependency:analyze
报告slf4j-simple
未使用,可能是因为编译不需要它:
[WARNING] Unused declared dependencies found:
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test
我无法使用runtime
依赖项,因为我不希望该依赖项传递继承(例如,下游依赖项可以使用 log4j 等代替)。我试过runtime
with optional=true
,但这会导致相同的警告。
(请注意,我还可以设置ignoreNonCompile
对于依赖插件,但这似乎是一个非常生硬的工具,会隐藏其他潜在的问题。)
这里没有任何范围可以完全满足您的要求;test
是最好的可用选择。
A test-runtime
之前已请求范围(回复:需要测试运行时范围吗? https://mail-archives.apache.org/mod_mbox/maven-users/200811.mbox/%3C17608340.3674701226307519843.JavaMail.adm-moff@moffice8.nsc.no%3E)并且建议的解决方法正是ignoreNonCompile
您已经发现的配置。
dependency:analyze
已经有一些限制(“未检测到某些情况(常量、仅保留源的注释、javadoc 中的链接)” http://maven.apache.org/shared/maven-dependency-analyzer/)。您可能必须接受任何test
它警告的范围依赖性是误报。
(You could将测试的定义拆分为一个单独的模块,该模块不会slf4j
实现依赖项,然后在另一个模块中运行它们。我认为这不值得。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)