Maven:添加相同工件的旧版本作为依赖项

问题描述 投票:0回答:2

是否可以将相同工件的旧版本添加为依赖项?这是一个例子:

<groupId>edu.illinois.cs.cogcomp</groupId>
<artifactId>illinois-pos</artifactId>
<version>2.0.3</version>

<dependencies>
    <dependency>
        <groupId>edu.illinois.cs.cogcomp</groupId>
        <artifactId>illinois-pos</artifactId>
        <version>2.0.2</version>
        <classifier>model</classifier>
    </dependency>
</dependencies>

如果没有,有没有办法使它工作?

java maven maven-3 pom.xml
2个回答
1
投票

根据您的意见(以及进一步的澄清和需求),我建议将Maven multi-module项目结构如下:

  • 使用最新依赖项提供代码的模块,不提供任何测试
  • 一个模块,仅提供测试用例并使用旧的依赖关系,因此通过使用另一个依赖关系来运行相关代码的测试。为了使其工作,测试模块必须依赖于代码模块,并显式重新声明您实际需要的测试依赖性版本。

因此,您将拥有一个具有packaging pom并定义两个模块(即代码模块,测试模块)的聚合器pom(空项目,无源,无测试)。您将继续处理代码模块,然后在测试模块上提供测试用例,您还可以覆盖并重新定义任何所需的依赖项。

因此,作为相同构建的一部分(在聚合器项目上),您可以根据需要构建两个模块。

或者,保留单层模块,您可以定义一个profile,它将重新定义所需的依赖项(使用不同的版本)并运行您的测试用例。这也意味着:

  • 作为默认构建的一部分,您将需要跳过测试,通过属性(即skip tests)将Maven Surefire插件配置为<skip>${skip.tests}</skip>,该属性具有默认值true
  • 然后,您需要配置您的配置文件以将skip.tests属性的值更改为false并重新定义依赖关系

使用第二种方法,您需要执行两次构建:第一次构建将正常运行但跳过测试(mvn clean install),第二次构建将激活配置文件并从测试阶段开始(mvn test -Pprofile-name)。

绝对更推荐第一种方法(多模块项目)。


0
投票

不,不是,因为maven会选择更高版本。那是因为在运行时,java不能同时使用这两个版本 - 如果在类路径中同时使用这两个版本,则第一个加载将“赢”而另一个不会被使用。

© www.soinside.com 2019 - 2024. All rights reserved.