我目前已经创建了一个 Maven 项目并找到了一个重复的依赖项,它会影响我的代码按预期执行。
我有两个依赖项: json 模式验证器 javax.mail
经过进一步调查,似乎 json-schema-validator 依赖项还下载了一个 javax 邮件 jar 文件,有没有办法排除 json-schema-validator 也下载 javax.mail 相关依赖项?
正如您从图像中看到的那样,我试图通过在我的 pom.xml 文件中使用排除来排除依赖关系,但没有成功。
另请注意以下排除似乎不起作用:
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
这里有一些误区:
您不需要排除“重复”依赖项。 Maven 不会将它们两次添加到类路径中。不过,您需要注意版本号。如果同一工件的不同版本出现在您的依赖树中,Maven 会选择其中之一。如果您对选择不满意,可以用
<dependencyManagement>
覆盖它。如果写exclusion(这里可能不需要),需要填写正确的groupId和artifactId。如果您尝试使用 artifactId
javax.mail
排除人工制品,难怪 mailapi
仍然存在。 这是由于版本冲突引起的,因为在 POM 文件中另一个添加的依赖项中使用了相同的 API 作为依赖项。
一个解决方案是首先检查 hoe 多次使用不同版本的相同 API
mvn 依赖:树
以上命令将显示项目中使用的所有依赖项。现在排除用作依赖项的相同依赖项。
<exclusions>
<exclusion>
<groupId>com.sun.mail</groupId>
<artifactId>mailapi</artifactId>
</exclusion>
</exclusions>
应用更改后更新 maven pom
mvn clean compile
添加以下排除项解决了我的问题:
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.6</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mailapi</artifactId>
</exclusion>
</exclusions>
</dependency>