Упорядочение зависимостей плюща

Я изо всех сил пытаюсь понять точное поведение исключений в Плюще.

В следующем файле плюща, почему положить commons-logging до log4j втянуть javax.activation а также javax.mail от log4j в то время как положить его после не делает.

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

1 ответ

Активация и почтовые банки являются зависимостями регистрации общего доступа, но вы исключили их из зависимости log4j...

Когда вы используете только одну конфигурацию, это отправляет смешанное сообщение плющу, должны ли они быть исключены или нет? Следующее было бы намного более явным:

<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.
Другие вопросы по тегам