Исключение артефактов с помощью плагина Maven Shade не работает должным образом

Я пытаюсь исключить ряд артефактов при создании uber-jar с помощью плагина Maven Shade. Ниже приведена конфигурация, которую я использую для этого:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <configuration>
                <createDependencyReducedPom>true</createDependencyReducedPom>
                <artifactSet>
                    <excludes>
                        <exclude>com.fasterxml.jackson.core:jackson-core:jar:2.4.5</exclude>
                    </excludes>
                </artifactSet>
...

Исключение пакета без информации о версии работает:

                 <exclude>com.fasterxml.jackson.core:jackson-core</exclude>

Но, к сожалению, это не вариант, потому что есть другая версия артефакта, которую необходимо включить.


person Cosmin Marginean    schedule 29.03.2016    source источник


Ответы (1)


Я думаю, вам просто нужно определить, какую версию jackson вы используете.

Очевидно, что это плохая практика, когда у вас одинаковые зависимости с разными версиями (возможно, транзитивными). В этом случае вы не могли знать, какая версия этой библиотеки окажется в вашем проекте. Вы можете заменить порядок зависимостей в xml, и тогда конечный результат будет другим. Звучит не очень, да?

Итак, что вам нужно указать - точную версию jackson в вашем разделе dependencyManagement:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
 ...

Это гарантирует, что в вашем артефакте будет только определенная версия, и вам не нужно будет исключать конкретную версию.

Надеюсь это поможет

person Igor Konoplyanko    schedule 29.03.2016
comment
Спасибо, Игорь, конкретное использование управления зависимостями действительно является решением. Хотя в плагине Maven Shade все еще есть ошибка (или отсутствие ясности в документах), но я думаю, что, поскольку есть обходной путь, это не конец света. - person Cosmin Marginean; 29.03.2016