将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
使用optional=true
,但结果相同。
(请注意,我也可以ignoreNonCompile
为依赖插件设置,但这似乎是一个非常钝的工具,会隐藏其他潜在的问题。)
在这里,没有任何功能可以完全满足您的需求。test
是最好的选择。
test-runtime
之前已经要求一个范围(Re:是否需要测试运行时范围?),建议的解决方法就是ignoreNonCompile
您已经发现的配置。
dependency:analyze
已经有一些限制(“未检测到某些情况(常量,具有仅源保留的注释,javadoc中的链接)”)。您可能必须接受test
警告的所有-scope依赖项都是误报。
(您可以将测试的定义拆分为一个单独的模块,该模块将没有slf4j
实现依赖项,然后在另一个模块中运行它们。我认为这样做不值得。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句