首页 > 解决方案 > 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为父项目compileruntime在父项目中,日志记录将按预期工作。

这里发生了什么?这种行为是否与主类所在的源代码树有关(test暗示我正在测试,因此引入了测试范围的依赖项,src意味着常规运行时和测试范围的依赖项不可用)?如果是这样,我如何告诉我的工具链slf4j-simple在 Eclipse 中运行时我想要,但在构建用于部署的 JAR 时如何告诉其他后端?

标签: javaeclipsemavendependency-management

解决方案


Eclipse 是使用测试依赖还是运行时依赖取决于项目设置。要更改它,请转到Project > Properties > Java Build Path > Source包含测试源(项目的子项)是您要查找的设置。如果设置为Yes,Eclipse 将使用测试范围的依赖项,否则不会。

是似乎是在test树中有代码的项目的默认设置,对于所有其他项目来说不是。

根据需要更改设置、应用、关闭并运行——Eclipse 将为您提供所需的依赖项集。

我可能忽略了其他相关设置——在这种情况下,请随意发表评论。


推荐阅读