gpt4 book ai didi

java - 仅将 Maven 依赖项声明为测试运行时

转载 作者:IT老高 更新时间:2023-10-28 20:53:41 35 4
gpt4 key购买 nike

将 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:analyzeslf4j-simple 报告为未使用,大概是因为编译不需要它:

[WARNING] Unused declared dependencies found:
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test

我不能使用 runtime 依赖项,因为我不希望该依赖项可传递地继承(例如,下游依赖项可以使用 log4j 等)。我用 optional=true 尝试了 runtime,但结果是同样的警告。

(请注意,我也可以为依赖插件设置 ignoreNonCompile,但这似乎是一个非常生硬的工具,会隐藏其他潜在问题。)

最佳答案

这里没有完全符合您要求的范围; test 是最好的选择。

test-runtime 范围之前已请求 (Re: Need for a test-runtime scope?),建议的解决方法正是您已经发现的 ignoreNonCompile 配置。

dependency:analyze 已经有一些限制("some cases are not detected (constants, annotations with source-only retention, links in javadoc)")。您可能必须接受它警告的任何 test 范围依赖项都是误报。

(您可以将测试的定义拆分为一个单独的模块,该模块没有 slf4j 实现依赖项,然后在另一个模块中运行它们。我没有认为这是值得的。)

关于java - 仅将 Maven 依赖项声明为测试运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726779/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com