1

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

在下面的 Ivy 文件中,为什么 put commons-loggingbefore log4jpulljavax.activationjavax.mailfromlog4j而 put it after 没有。

<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>
4

1 回答 1

4

激活和邮件 jar 是公共日志记录的依赖项,但您已将它们排除在 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>

切换依赖标签现在没有效果,因为依赖解析是显式的。

  • Log4j 及其依赖项与log4j_deps配置相关联
  • commons 依赖项放置在commons_deps配置中。
于 2013-09-04T20:13:48.553 回答