我有一个从一个外部项目依赖项继承的依赖项,我们没有控制权,我们想从该项目中排除特定的依赖项。尝试了几次排除尝试,但仍然无法排除。
<dependency>
<groupId>..</groupId>
<artifactId>...</artifactId>
<version>...</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependency>
任何人都可以让我知道是否可以排除这种依赖性。我正在使用3.5.2 Maven版本。
答案 0 :(得分:1)
该版本似乎尚未发布,但是有一种解决方法。
在Importing Dependencies处有一个依赖项导入的示例,其解释如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>Z</artifactId>
<packaging>pom</packaging>
<name>Z</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>maven</groupId>
<artifactId>X</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>maven</groupId>
<artifactId>Y</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
在上面的示例中,Z从X和Y导入托管依赖关系。但是,X和Y都包含依赖关系a。在这里,将使用a的1.1版,因为先声明了X,而在Z的dependencyManagement中未声明a。
基于该描述,如果您在导入之前 对其进行定义,则应该能够覆盖违规依赖性的版本和/或范围。
按照相同的示例,以下定义应使用a
的2.0版:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>Z</artifactId>
<packaging>pom</packaging>
<name>Z</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>maven</groupId>
<artifactId>X</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>maven</groupId>
<artifactId>Y</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
请确保检查有效pom!
答案 1 :(得分:1)
排除功能在Maven中已经存在很长时间了,这不是问题所在。保持您当前的Maven版本,可以很好地完成工作。
我认为那里很混乱。 从上面编写的pom摘录中,我们可以看到您导入了一个pom(范围为“ import”),通常称为BOM(对于BOM表)。
物料清单在<dependencyManagement>
部分中导入(上面未显示),其目标可以归纳为:“我定义了许多不同的库,包括它们的版本,因此如果您导入我,则可以省略指定您定义的库的版本,但仍然必须明确定义直接依赖项。”
通过这种方式,我的意思是BOM不会“强迫”您使用其定义的库:它仅表示在您或您的依赖项依赖于特定库Z的情况下,Z的版本将为强制使用BOM表中定义的那个。”
因此BOM不会“强加”您的依赖关系,因此您不能“排除”定义BOM的任何依赖项。
您必须准确找到要排除的依赖项Z在 own 项目中的定义位置,然后将其删除。它也可以作为传递性依赖项提供,在这种情况下,您必须使用<exclusions>
/ <exclusion>
标签和groupId
/ {{1}指定的依赖项中排除它}。
总结:改变您的方法,您的眼光不正确。并使用Maven依赖插件,它是您最好的朋友,以了解您不想要的依赖的确切来源(artifactId
。
我希望对您有帮助
PS:您没有说,但是您有一个多模块项目吗?