是否可以将相同工件的旧版本添加为依赖项?这是一个例子:
<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>
如果没有,有没有办法使它工作?
根据您的意见(以及进一步的澄清和需求),我建议将Maven multi-module项目结构如下:
因此,您将拥有一个具有packaging
pom
并定义两个模块(即代码模块,测试模块)的聚合器pom(空项目,无源,无测试)。您将继续处理代码模块,然后在测试模块上提供测试用例,您还可以覆盖并重新定义任何所需的依赖项。
因此,作为相同构建的一部分(在聚合器项目上),您可以根据需要构建两个模块。
或者,保留单层模块,您可以定义一个profile,它将重新定义所需的依赖项(使用不同的版本)并运行您的测试用例。这也意味着:
<skip>${skip.tests}</skip>
,该属性具有默认值true
skip.tests
属性的值更改为false
并重新定义依赖关系使用第二种方法,您需要执行两次构建:第一次构建将正常运行但跳过测试(mvn clean install
),第二次构建将激活配置文件并从测试阶段开始(mvn test -Pprofile-name
)。
绝对更推荐第一种方法(多模块项目)。
不,不是,因为maven会选择更高版本。那是因为在运行时,java不能同时使用这两个版本 - 如果在类路径中同时使用这两个版本,则第一个加载将“赢”而另一个不会被使用。