我需要添加相同的依赖项两次,为编译和测试目的配置一个版本,为运行时配置同一个库的另一个版本。
这听起来很奇怪,但它错了,但是我收到了来自我公司另一个团队的同一个库的2个版本,而“测试目的”版本包含了一些类 - 仅由“测试”方法使用 - 没有在生产服务器中公开,因为非常明智地成为“核心”的一部分。所以这意味着我需要在测试和编译阶段使用版本库,而只在服务器上使用另一个版本库。 实际上我解决了设置只有“提供”范围的“测试”版本的问题,因此它不会包含在生成的战争中,并将“生产”版本放在Web容器的lib文件夹中,但我的老板希望我会自动化配置!!!
不幸的是,如果我使用'runtime'或'compile'范围将依赖项添加到第二个版本,maven在JUnit执行步骤期间找不到仅在“test”版本中出现的类。看起来Maven认为库是相同的,而'compile'或'runtime'配置在另一个上获胜。我也尝试将“测试”版本设置为“测试”范围,但它也不起作用...实际上我已尝试使用“测试”和“提供”范围进行“测试”的所有可能组合“生产者”的版本和“运行时”和“编译”。
有什么建议吗?我不能仅仅为了测试目的而要求使用不同的库,或者只是为了更改库的名称,所有内容都与一个持续集成系统集成在一起,并且必须使用它进行自动化,这非常烦人......
<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>
由于
答案 0 :(得分:1)
Peter Lawrey在link中说,
“Maven认为一次拥有多个版本的模块没有任何意义。它假设一个较新的版本取代了旧版本。如果不是,它不是同一个模块。我建议你给新模块一个不同的名称,并确保它有不同的包,以避免选择一个随机模块。
总的来说,Maven试图鼓励良好的应用程序设计,故意让它很难做出已经确定为坏主意的事情。“