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
的范围更改为 compile
或 runtime
,日志记录将按预期工作。
这里发生了什么?此行为是否与主 class 所在的源代码树有任何关系(test
暗示我正在测试,因此引入了测试范围的依赖项,src
暗示常规 运行时间和测试范围的依赖项不可用)?如果是这样,当在 Eclipse 中 运行 时如何告诉我的工具链我想要 slf4j-simple
,但在构建用于部署的 JAR 时要其他后端?
Eclipse 是否使用测试或 运行时间依赖性由项目设置控制。要更改它,请转至 Project > Properties > Java Build Path > Source。 包含测试源(您项目的子项目)是您正在寻找的设置。如果设置为 Yes,Eclipse 将使用测试范围的依赖项,否则不会。
Yes 似乎是在 test
树中有代码的项目的默认设置,对于所有其他项目都不是。
根据需要更改设置、应用、关闭并 运行—Eclipse 将为您提供所需的依赖项集。
可能还有其他相关设置我忽略了,请随时发表评论。
我有一个使用 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
的范围更改为 compile
或 runtime
,日志记录将按预期工作。
这里发生了什么?此行为是否与主 class 所在的源代码树有任何关系(test
暗示我正在测试,因此引入了测试范围的依赖项,src
暗示常规 运行时间和测试范围的依赖项不可用)?如果是这样,当在 Eclipse 中 运行 时如何告诉我的工具链我想要 slf4j-simple
,但在构建用于部署的 JAR 时要其他后端?
Eclipse 是否使用测试或 运行时间依赖性由项目设置控制。要更改它,请转至 Project > Properties > Java Build Path > Source。 包含测试源(您项目的子项目)是您正在寻找的设置。如果设置为 Yes,Eclipse 将使用测试范围的依赖项,否则不会。
Yes 似乎是在 test
树中有代码的项目的默认设置,对于所有其他项目都不是。
根据需要更改设置、应用、关闭并 运行—Eclipse 将为您提供所需的依赖项集。
可能还有其他相关设置我忽略了,请随时发表评论。