Eclipse忽略了Maven测试范围的依赖

时间:2020-04-28 21:11:28

标签: java eclipse maven dependency-management

我有一个使用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意味着常规运行时和测试范围的依赖关系不可用)?如果是这样,如何在Eclipse中运行时告诉我的工具链slf4j-simple,而在构建用于部署的JAR时告诉我其他后端?

1 个答案:

答案 0 :(得分:0)

Eclipse是否使用测试或运行时依赖项取决于项目设置。要对其进行更改,请转到项目>属性> Java构建路径>源包含测试源(您的项目的子级)是您要查找的设置。如果设置为,则Eclipse将使用测试范围的依赖关系,否则将不使用。

对于在test树中具有代码的项目,默认是“是”,对于其他所有项目,则不是。

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

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

相关问题