【问题标题】:Ivy : dependency between 2 dependencies常春藤:2个依赖关系之间的依赖关系
【发布时间】:2013-09-11 05:09:32
【问题描述】:

我正在寻找一种方法来声明“两个依赖项之间的依赖项”。

例如,在我的模块中,我在 ivy.xml 中有以下几行:

<dependencies>
    <dependency org="org.slf4j" name="slf4j-api" rev="${slf4japiversion}"/>
    <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.13" conf="test->default"/>
</dependencies>

我的问题是 logback-classic 1.0.13 依赖于 slf4j-api 1.7.5 而我的模块依赖于 1.6.6(slf4japiversion 的值)。

我无法更改 slf4japiversion 但将来它可以由其他人升级。

有没有办法声明对 logback 的依赖以检索与我的 slf4j-api 版本兼容的版本?

【问题讨论】:

    标签: ivy


    【解决方案1】:

    您可以指定覆盖指令以强制解析到特定版本的依赖项:

       <dependencies>
          <dependency org="org.slf4j" name="slf4j-api" rev="1.6.6" conf="compile->default"/>
          <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.13" conf="runtime->default"/>
    
          <override org="org.slf4j" module="slf4j-api" rev="1.6.6"/>
       </dependencies>
    

    降级依赖项时的警告。如果 logback 使用仅受 1.7.5 版本支持的功能,则该解决方案将不起作用。库更有可能向后兼容。

    【讨论】:

    • 感谢您的回答。所以没有办法自动选择与我的 slf4j 版本兼容的 logback 版本?
    • @Ekans 您可以查看 logback 依赖项并及时返回。 Maven Central 网站对此非常有用 (search.maven.org)。只升级代码以兼容最新版本的 SLF4J 不是更简单吗?
    • 是的,它会更容易,但这个版本是由我无法控制的另一个项目修复的。有时slf4j版本会在没有通知的情况下升级。所以,除了手动,我没有其他方法可以检索正确版本的 logback 吗?
    • @Ekans 这真的坏了吗?默认方法是使用最新请求的版本,这是建立在新版本向后兼容的假设之上的。如果他们不是你的问题更深,因为你不能在类路径上拥有同一个类的两个副本(你可以,但只有一个是活动的)
    • @Ekans 这是一个新问题!这将是重复的。我很确定以前有人问过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2011-09-15
    • 2013-02-14
    • 2016-10-08
    • 2015-12-28
    相关资源
    最近更新 更多