maven警告:使用同一工件的两种不同类型的依赖项时重复版本

Posted

技术标签:

【中文标题】maven警告:使用同一工件的两种不同类型的依赖项时重复版本【英文标题】:maven warning: duplicate version when using two different types of dependecy of the same artifact 【发布时间】:2016-08-15 04:00:10 【问题描述】:

Maven 在构建我们的多模块项目时抛​​出了一个奇怪的警告。我只是在另一个项目中引用同一项目的 jartest-jar。这两个依赖项都有 test 范围。我正在运行 Maven 3.3.1,无法轻松升级版本。

你们中有人知道如何在不从 maven 收到此警告的情况下解决问题吗?

ProjectA 的 pom.xml:

    <dependency> <!-- This is line 130 -->
        <groupId>$project.groupId</groupId>
        <artifactId>projectB</artifactId>
        <version>$project.version</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>$project.groupId</groupId>
        <artifactId>projectB</artifactId>
        <version>$project.version</version>
        <scope>test</scope>
    </dependency>

来自 maven(匿名)的警告:

[警告] 在为 org.group.ProjectA:1.0-SNAPSHOT 构建有效模型时遇到了一些问题 [警告] 'dependencies.dependency.(groupId:artifactId:type:classifier)' 必须是唯一的:$project.groupId:org.group.ProjectB:jar -> 版本 $project.version @ org 的重复声明.group.ProjectA,/var/lib/jenkins/jobs/nicejob/workspace/org.group.ProjectA/pom.xml,第 130 行,第 15 列

【问题讨论】:

问题是你已经在范围测试中定义了这两个,这仅对&lt;type&gt;test-jar&lt;/type&gt;有意义。 为什么将模块的生产代码添加为测试范围的依赖项没有意义? 【参考方案1】:

看看test-jar documentation,我会说这两个工件基本上是相同的,并且“test-jar”一个预计不会在测试阶段之外使用,因为它包含测试类。

一个好的方法可能是:

将“标准”依赖项留在编译范围内(如果您确实需要它来提供它提供的非测试类) 仅将“test-jar”依赖项用作surefire-plugin 的additional dependency declaration(带有测试范围),以便仅由插件本身使用

【讨论】:

以上是关于maven警告:使用同一工件的两种不同类型的依赖项时重复版本的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 sbt 中具有不同包装 ivy 类型的依赖项?

使用已发布的工件时,Maven 依赖项解析如何工作?

Maven 遮罩插件不会遮蔽工件中的依赖项

如何解决具有不同包装常春藤类型的sbt中的依赖关系?

Gradle 设置以处理具有相同代码库但依赖项不同的两种部署类型

扫描多个 maven pom 以获取不同的依赖版本