【问题标题】:Ordering Ivy dependencies订购 Ivy 依赖项
【发布时间】:2013-09-08 00:53:11
【问题描述】:

我正在努力弄清楚 Ivy 中排除的确切行为。

在下面的 Ivy 文件中,为什么将 commons-logging 放在 log4j 之前会从 log4j 拉入 javax.activationjavax.mail 而放在之后却没有。

<ivy-module version="2.0">
    <info organisation="test" module="test" />

    <configurations defaultconfmapping="default->runtime(*)" />

    <dependencies>
        <dependency org="log4j" name="log4j" rev="1.2.15">
            <exclude org="javax.activation" />
            <exclude org="javax.mail" />
        </dependency>
        <dependency org="commons-logging" name="commons-logging" rev="1.1" />

        <exclude org="com.sun.jdmk" />
        <exclude org="com.sun.jmx" />
        <exclude org="javax.jms" />
    </dependencies>
</ivy-module>

【问题讨论】:

    标签: ivy


    【解决方案1】:

    activation 和 mail jars 是 commons 日志的依赖项,但您已将它们排除在 log4j 依赖项中......

    当您只使用单一配置时,这会向 ivy 发送混合消息,是否应该排除它们?以下内容会更明确:

    <dependencies>
        <dependency org="log4j" name="log4j" rev="1.2.15"/>
        <dependency org="commons-logging" name="commons-logging" rev="1.1" />
    
        <exclude org="javax.activation" />
        <exclude org="javax.mail" />    
        <exclude org="com.sun.jdmk" />
        <exclude org="com.sun.jmx" />
        <exclude org="javax.jms" />
    </dependencies>
    

    全局设置排除项时不会那么混乱。

    如果您想保持独立的依赖解析,那么您需要设置多个配置(将这些视为依赖集):

    <ivy-module version="2.0">
        <info organisation="test" module="test" />
    
        <configurations>
           <conf name="log4j_deps" description="log4j dependencies"/>
           <conf name="commons_deps" description="commons-logging dependencies"/>
        </configurations>
    
        <dependencies>
    
            <dependency org="log4j" name="log4j" rev="1.2.15" conf="log4j_deps->runtime">
                <exclude org="javax.activation" />
                <exclude org="javax.mail" />
            </dependency>
    
            <dependency org="commons-logging" name="commons-logging" rev="1.1" conf="commons_deps->runtime"/>
    
            <exclude org="com.sun.jdmk" />
            <exclude org="com.sun.jmx" />
            <exclude org="javax.jms" />
        </dependencies>
    </ivy-module>
    

    现在切换依赖标记将无效,因为依赖解析是显式的。

    • Lo​​g4j 及其依赖项与 log4j_deps 配置相关联
    • commons 依赖项放置在 commons_deps 配置中。

    【讨论】:

    • 感谢您的建议。我将使用全局排除。我仍然很想知道为什么它们被排除在一种方式而不是另一种方式背后的机制。
    • @ICR 我解释了这一点....您正在使用单个配置并要求将依赖项排除在不同的依赖项上...令人困惑的常春藤...。它应该在吗?还是应该退出?....这就是为什么全局排除可以更好地消除歧义。
    猜你喜欢
    • 2011-04-11
    • 2015-11-05
    • 2016-10-16
    • 2012-08-15
    • 1970-01-01
    • 2011-11-13
    • 2013-03-31
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多