【问题标题】:Use side-by-side lib versions by Maven使用 Maven 的并行库版本
【发布时间】:2012-12-05 10:56:43
【问题描述】:

下面是我的POM的粗略版本,

<project>

    <dependencies>
        <dependency>one-java-artifact-version-X</dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <dependencies>
                    <dependency>one-java-artifact-version-Y</dependency>
                </dependencies> 
            </plugin>
        </plugins>
    </build>

</project>

我希望插件使用one-java-artifact-version-Y,但其他东西使用one-java-artifact-version-X。是否可以将不同版本的 java 工件 side-by-side 与 Maven 一起使用?特别是上面的情况如何处理?

@EDIT

在我使用 Maven 3.0.4 的情况下,one-java-artifact-version-Y 总是被one-java-artifact-version-X 遮蔽,因此插件无法执行,因为对one-java-artifact-version-X 的不良依赖关系取而代之。但是,在将one-java-artifact-version-Y 提升为下面的全局依赖项后,该插件可以正常工作,而其他事情则一团糟,

<project>

    <dependencies>

        <dependency>one-java-artifact-version-Y</dependency>

        <dependency>one-java-artifact-version-X</dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
            </plugin>
        </plugins>
    </build>

</project>

【问题讨论】:

  • 你试过了吗?结果?错误信息?
  • version-Yversion-X 遮蔽。
  • 您使用的是哪个版本的 Maven?

标签: java maven


【解决方案1】:

不确定,在这种情况下是否可行(即与插件版本冲突),但关于常规依赖管理(即在使用 2 个不同版本的 2 个依赖项之间),maven documentation 说,

“最接近的定义”表示使用的版本将是最接近的 一个到您的项目在依赖关系树中,例如。如果依赖 对于 A、B 和 C,定义为 A -> B -> C -> D 2.0 和 A -> E -> D 1.0,那么在构建 A 时将使用 D 1.0,因为从 A 到 D 通过 E 的路径更短。您可以显式地将依赖项添加到 D A 2.0 强制使用 D 2.0

【讨论】:

  • 所以 Maven 通过使用除一个版本之外的所有版本来解决冲突,对吗?它并没有解决我面前的问题。
  • 是的,maven 分辨率归结为具有最接近定义的 1 个版本。对于您的特定情况,可能会有一些技巧,但不确定。
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2016-11-21
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
相关资源
最近更新 更多