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

Eclipse ignoring Maven test-scoped dependencies

我有一个使用 SLF4J 的 Maven 项目。为了从 Eclipse 中 运行ning 它,我希望日志输出到控制台,所以我配置了如下依赖项:

<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>

也就是说,我正在用 test 范围拉入 slf4j-simple

该项目是一个库。在其 test 文件夹中有一个 class 和 main 方法,其中 运行 具有一些测试和诊断功能。当我从 Eclipse 中 运行 那样时,SLF4J 按预期记录到 System.err

当我在另一个项目中使用库项目时(其主要 class 在项目的 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,日志记录将按预期工作。

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

Eclipse 是否使用测试或 运行时间依赖性由项目设置控制。要更改它,请转至 Project > Properties > Java Build Path > Source包含测试源(您项目的子项目)是您正在寻找的设置。如果设置为 Yes,Eclipse 将使用测试范围的依赖项,否则不会。

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

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

可能还有其他相关设置我忽略了,请随时发表评论。