当前位置: 首页 > 知识库问答 >
问题:

仅将Maven依赖项声明为测试运行时

堵彬彬
2023-03-14
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <scope>test</scope>
</dependency>

但是,这样做的缺点是dependency:Analyseslf4j-simple报告为未使用,可能是因为编译不需要它:

[WARNING] Unused declared dependencies found:
[WARNING]    org.slf4j:slf4j-simple:jar:1.7.7:test

我不能使用runtime依赖项,因为我不希望该依赖项传递性地继承(例如,下游依赖项可以使用log4j等)。我使用optional=true尝试了runtime,但结果是相同的警告。

(注意,我还可以为依赖插件设置IngroenonCompile,但这似乎是一个非常生硬的工具,会隐藏其他潜在的问题。)

共有1个答案

庄高谊
2023-03-14

这里没有一个范围可以完全完成您想要的功能;test是可用的最佳选项。

以前已经请求了test-runtime作用域(关于:是否需要test-runtime作用域?)建议的解决方案正是您已经发现的IngorenonCompile配置。

dependency:Analyze已经有了一些限制(“有些情况是检测不到的(常量、只保留源代码的注释、javadoc中的链接)”)。您可能必须接受它警告的任何test-scope依赖项都是假阳性。

 类似资料:
  • 问题:Maven在我的测试中找不到一些依赖项 在我的pom中是这样导入的。xml: 我已经试过了: mvn测试编译 使Intellij缓存无效 重启Intellij 清除. m2并重建项目

  • 当我为我的项目运行“mvn dependency:tree”时,它会显示以下内容: 正如您在标记行中看到的,xml API具有“编译”作用域,因此它被打包到。战争档案。为什么会这样? 更有趣的是,它只在使用Java5时发生,对于Java6,依赖项显示为“test”。 Maven版本:3.0.4

  • 声明依赖 声明依赖能力为工程师提供了声明依赖关系的编译接口。 FIS3 在执行编译的过程中,会扫描这些编译标记,从而建立一张 静态资源关系表,资源关系表详细记录了项目内的静态资源id、发布后的线上路径、资源类型以及 依赖关系 和 资源打包 等信息。使用 FIS3 作为编译工具的项目,可以将这张表提交给后端或者前端框架去运行时,根据组件使用情况来 按需加载资源或者资源所在的包,从而提升前端页面运行性

  • 声明依赖 DSL配置block dependencies用来给配置添加一个或多个依赖,你的项目不仅可以添加外部依赖,下面这张表显示了Gradle支持的各种不同类型的依赖。 这一章只介绍外部模块依赖和文件依赖,我们来看看Gradle APi是怎么表示依赖的。 理解依赖的API表示 每个Gradle项目都有一个DependencyHandler的实例,你可以通过getDependencies()方法来

  • 我有一个编译和运行时所需的依赖项,但我想在运行测试时将其排除。这可能吗?也许,通过设置个人资料?但是,如何仅在生命周期阶段停用它?

  • 我正在使用 maven 来打包一个带阴影的 jar 文件。我浏览了其他关于这个问题的帖子,但没有找到答案。我也没有使用提供作为元素。 我将log4j-core作为一个依赖项包含在pom.xml中,但是当maven-shade-plugin构建时,它排除了该依赖项中的类?我下载了jar的2.5版,检查了一下,包和类都在里面。 我不得不排除一些org.slf4j类,但这不应该影响它。 这里是pom.x