我需要添加相同的依赖项两次,配置一个版本用于编译和测试目的,并配置同一库的另一个版本用于运行时。
这听起来很奇怪,而且是错误的,但我从公司的另一个团队收到了同一个库的 2 个版本,并且“测试目的”版本包含一些类 - 仅由“测试”方法使用 - 没有在生产服务器中公开,因为作为“核心”的一部分非常明智。因此,这意味着我需要在测试和编译阶段使用一个版本库,而仅在服务器上使用另一个版本库。 实际上,我解决了问题,仅设置具有“提供”范围的“测试”版本,因此它不会包含在生成的 war 中,并将“生产”版本放在Web容器的lib文件夹中,但我的老板希望我自动化配置!!!
不幸的是,如果我使用“运行时”或“编译”范围将依赖项添加到第二个版本,maven 在 JUnit 执行步骤中找不到仅存在于“测试”版本中的类。看起来 Maven 可以识别相同的库,并且“编译”或“运行时”配置在另一个库上获胜。我也尝试过使用“测试”范围设置“测试”版本,但它也不起作用...实际上,我已经尝试了使用“测试”范围的“测试”和“提供”范围的所有可能组合版本以及“生产版本”的“运行时”和“编译”。
有什么建议吗?我不能仅出于测试目的或只是更改库的名称而要求不同的库,所有内容都与持续集成系统集成,并且必须与之自动化,所以很烦人......
<dependency>
<groupId>company.group.id</groupId>
<artifactId>project.id</artifactId>
<version>0.1.1.TEST</version>
<scope>provided</scope>
//<scope>test</scope>
</dependency>
<dependency>
<groupId>company.group.id</groupId>
<artifactId>project.id</artifactId>
<version>0.1.0.PROD</version>
<scope>compile</scope>
//<scope>runtime</scope>
</dependency>
谢谢
最佳答案
彼得·劳里 (Peter Lawrey) 在本文中说道 link ,
“Maven 假定同时拥有多个版本的模块是没有任何意义的。它假定较新的版本会替换较旧的版本。如果不是这样,则不是同一个模块。我建议您为新模块指定了不同的名称,并确保它具有不同的包,以避免选择随机模块。
总的来说,Maven 试图鼓励良好的应用程序设计,并故意让其难以完成它认为是坏主意的事情。”
关于java - 如何使用相同的库两次配置不同版本的 Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26884309/