java - 如何使用相同的库两次配置不同版本的 Maven

标签 java unit-testing maven junit

我需要添加相同的依赖项两次,配置一个版本用于编译和测试目的,并配置同一库的另一个版本用于运行时。

这听起来很奇怪,而且是错误的,但我从公司的另一个团队收到了同一个库的 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/

相关文章:

java - 相对 Xpath 在 Maven TestNg 中不起作用,但绝对路径有效

java - 如何让 HttpAsyncClient 异步操作?

java - 如何随机化这组问题?

java - hibernate 列的最大长度

java - 设置 JLabel 左右对齐

java - 从 12 升级到 Intellij 13.1 后,Maven 项目无法编译

unit-testing - 在 Android Studio Gutter 中启用代码覆盖率指示

php - 如何在 phpunit setUpBeforeClass 方法中创建模拟对象?

c# - 无法在 Visual Studio 2012 中调试单元测试项目

java - Java 和 Maven 构建器如何在 Eclipse 中协同工作?