java - Eclipse 忽略 Maven 测试范围的依赖项
问题描述
我有一个使用 SLF4J 的 Maven 项目。为了从 Eclipse 运行它,我希望日志输出到控制台,所以我配置了如下依赖项:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
也就是说,我正在slf4j-simple
使用test
范围。
该项目是一个图书馆。在它的test
文件夹中有一个类,它有一个main
运行一些测试和诊断功能的方法。当我从 Eclipse 以这种方式运行它时,SLF4J 会System.err
按预期记录。
当我在另一个(其主类位于项目src
文件夹中)中使用库项目时,SLF4J 抱怨以下错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
我尝试将相同的依赖项添加到父项目,但无济于事。但是,如果我将范围更改slf4j-simple
为父项目compile
或runtime
在父项目中,日志记录将按预期工作。
这里发生了什么?这种行为是否与主类所在的源代码树有关(test
暗示我正在测试,因此引入了测试范围的依赖项,src
意味着常规运行时和测试范围的依赖项不可用)?如果是这样,我如何告诉我的工具链slf4j-simple
在 Eclipse 中运行时我想要,但在构建用于部署的 JAR 时如何告诉其他后端?
解决方案
Eclipse 是使用测试依赖还是运行时依赖取决于项目设置。要更改它,请转到Project > Properties > Java Build Path > Source。包含测试源(项目的子项)是您要查找的设置。如果设置为Yes,Eclipse 将使用测试范围的依赖项,否则不会。
是似乎是在test
树中有代码的项目的默认设置,对于所有其他项目来说不是。
根据需要更改设置、应用、关闭并运行——Eclipse 将为您提供所需的依赖项集。
我可能忽略了其他相关设置——在这种情况下,请随意发表评论。
推荐阅读
- python - 将文本文件中的列数据转换为 Python 中的嵌套列表?
- protobuf-java - JSONFormat.print() 方法编码特殊字符并添加额外的斜线
- javascript - 我的 jQuery 代码在第一次点击时不起作用?
- visual-studio-code - 如何知道哪个扩展提供了 VSCode 中的哪些片段
- r - 如何在 R 中制作 timestamp.txt 文件?
- azure - 如果失败,则重新部署 Azure DevOps Pipeline
- php - 如何将值从分配的变量传递给查看?
- nlp - 如何使用 FastText 查找与两个关键字相似的单词?
- javascript - 替代元掩码。谁管理私钥和以太币?
- microsoft-graph-api - 如何访问 Teams 用户的电子邮件地址?