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

禁用不工作的可传递依赖项

尚景焕
2023-03-14

我的项目有一些依赖项(真的很多),我正在依赖项中添加它们。但是我不想要任何传递依赖项,这将超出我的控制范围(maven给我带来了几乎三倍于我需要的东西)。我试图通过以下方式禁止传递依赖项:

<exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
</exclusions>

但是在我做了一个mvn包之后,传递依赖项仍然被下载并添加到我构建的包中。这是maven的日志记录:

[DEBUG] Dependencies for project:com.XXX.XXX:
org.apache.XXX
org.apache.XXX.YYY
...
[DEBUG] Resolving project dependencies transitively:
[DEBUG] org.com.XXX.yyy
[DEBUG]    org.apache.ZZZ
...
[DEBUG] Adding artifact: org.apache.ZZZ with file: ${file name} to assembly location: lib/${file name}.jar
...

所以这不是我想要的。我想要maven不要自动下载传递依赖项,或者不要将它们添加到我的“mvn包”中。

感谢任何帮助。

共有1个答案

司徒骞尧
2023-03-14

这就是我的解决方案。Maven仍在获取所需的可传递依赖。我所做的是在组装阶段只包含我想要的jar。在汇编配置文件中,我手动添加我想要的jar

<dependencyset>
   <includes>
      <include>com.XXX:XXX:jar:2.6.0</include>
   </includes>
<dependencyset>

与我不想要的东西(几百个可传递的依赖jar)相比,添加我想要的东西更实用。这很好地解决了这个问题。

 类似资料:
  • 我有一个库项目,我用它来为我的其他项目保存一些设置,这些项目有很多实用程序分类,也包括实用程序库。因此,我将库的build.gradle中的所有“实现”调用都改为“API”调用,这样我就不需要一次又一次地重新导入依赖项。在构建库并将jar从我的library文件夹移动到主项目中的lib文件夹后,我可以访问库中的所有类,但是传递依赖项在主项目中不可用。 我还尝试使用实现和transivive=tru

  • 在应用中,您希望使用不同的类来处理不同的任务以保持代码的简洁。我们把这些类称为 依赖。如何将这些依赖关系传递给将在后台任务调用的方法呢? 当您在后台任务中调用静态方法时,仅限于应用程序的静态上下文,这需要您使用以下获取依赖关系的模式: 通过 new 手动实例化依赖 服务定位器模式 抽象工厂模式 或 建设者模式 单例模式 然而,所有这些模式使您的应用程序的单元可测试性方面变得非常复杂。为了解决这个问

  • 这个问题将澄清什么是传递依赖,以及它在Maven中如何在非常高的级别上工作。 我的定义是:在依赖树中,比如-- 若C在B中有范围编译,那个么将B声明为A的依赖项就足以用Maven构建A。但是,如果C在B中提供了作用域,那么当Maven构建A时,除非A在其依赖项中声明C,否则该构建不会根据C自动编译A。 这是正确的吗?

  • 主要内容:依赖传递,依赖范围,依赖范围对传递依赖的影响,依赖调节Maven 依赖传递是 Maven 的核心机制之一,它能够一定程度上简化 Maven 的依赖配置。本节我们将详细介绍依赖传递及其相关概念。 依赖传递 如下图所示,项目 A 依赖于项目 B,B 又依赖于项目 C,此时 B 是 A 的直接依赖,C 是 A 的间接依赖。 Maven 的依赖传递机制是指:不管 Maven 项目存在多少间接依赖,POM 中都只需要定义其直接依赖,不必定义任何间接依赖,Mav

  • 下面是我在Pastebin上的框架-pom.xml和客户机-pom.xml:

  • 一些stackoverflow帖子暗示我的类路径中有spring-asm的冲突版本。通过gradle依赖分析,我看到我没有spring-asm的多个版本,但我有spring-core的多个版本(版本3.1.4和5.0.2) 我试图排除3.1.4版本,但无法使其工作。我试图在依赖级别和配置级别都排除它。 即使有了上述更改,我仍然在依赖分析输出中发现Spring-Core:3.1.4.Release。