Исключение зависимости с плагином сборки Maven - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть сборочный проект с двумя прямыми зависимостями: война и банка. В дескрипторе сборки я пытаюсь поместить войну в одну папку, а банку в другую. Таким образом, я использую следующий фрагмент зависимостей:

 <dependencySets>
    <dependencySet>
        <outputDirectory>webapps</outputDirectory>
        <includes>
            <include>*:war</include>
        </includes>
        <directoryMode>750</directoryMode>
        <fileMode>660</fileMode>
    </dependencySet>
    <dependencySet>
        <outputDirectory>bin</outputDirectory>
        <includes>
            <include>mygroup:my-jar-artifact</include> 
        </includes>
        <directoryMode>750</directoryMode>
        <fileMode>660</fileMode>
    </dependencySet>
</dependencySets>

Однако, когда я выполняю «mvn assembly: single», он всегда заканчивается размещением jar в каталоге webapps. Я пытался всеми возможными способами заставить его исключить банку (в том числе добавление исключает теги и т. Д.). Я знаю, что могу обойти эту проблему, используя плагин maven зависимость, чтобы скопировать jar в папку, а затем использовать дескриптор сборки, чтобы скопировать плоский файл. Однако я действительно чувствую, что должен иметь возможность использовать наборы зависимостей для этого. Есть идеи?

Дополнительная информация:

  • Я использую maven 3.0.2, но maven 3.0.3 демонстрирует то же поведение.
  • В моей зависимости pom для jar используется классификатор jar-with-dependencies.

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Может ли быть так, что он копирует транзитивные зависимости WAR?

Попробуйте использовать либо

<useTransitiveDependencies>false</useTransitiveDependencies>

или

<useTransitiveFiltering>true</useTransitiveFiltering>

в наборе зависимостей WAR.

Документация по дескриптору сборки

Если useTransitiveDependencies выключен (он включен по умолчанию), переходные зависимости WAR не должны копироваться.

Если useTransitiveFiltering включен (по умолчанию он отключен), определенные вами фильтры будут применяться к транзитивным зависимостям WAR, и, поскольку это включает *:war, при копировании не должно быть каких-либо JAR-зависимостей. .

0 голосов
/ 02 ноября 2011

Я понял это. Я собирался посмотреть на исходный код модуля сборки, чтобы выяснить проблему. При этом я заметил, что использую сборку 2.2-бета-1. Обновление до 2.2 решило проблему полностью. Урок узнал, что в следующий раз я всегда должен проверять версию плагина.

0 голосов
/ 02 ноября 2011

Другая возможность - неправильный синтаксис *:war.

Можете ли вы попробовать явно указать groupId: artifactId в <include>, так же, как вы указали для jar артефакта?

<includes>
    <include>mygroup:my-war-artifact</include> 
</includes>
...