Maven: распаковать-зависимости ... а потом забыть о них - PullRequest
6 голосов
/ 22 июня 2010

У меня есть библиотека A, которая зависит от библиотек B и C. Я распаковываю библиотеки классов B и C в банку для библиотеки A, используя плагин maven-dependency-plugin (см. Ниже).

Теперь, когда библиотека D использует библиотеку A, библиотека D может получить доступ ко всем классам A, B и C. Однако я хочу, чтобы D зависел только от A, но не от транзитивных зависимостей B и C.

alt text

Я знаю, что этого можно достичь, вручную исключив B и C для зависимости A-D, но я хотел бы как-то объявить в A, что B и C не должны быть известны модулям, использующим A.

        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Ответы [ 3 ]

6 голосов
/ 22 июня 2010

Я думаю, вы можете пометить зависимость областью «предоставлено», поэтому зависимый проект будет предполагать, что банки уже «предоставлены». Обычно они предоставляются контейнером, в вашем случае вы «предоставили» их в зависимости A.

В любом случае модули, зависящие от A, будут игнорировать зависимости B и C.

4 голосов
/ 22 июня 2010

Первый вариант, используйте dependency:unpack вместо dependency:unpack-dependencies и, таким образом, перечислите B и C в конфигурации плагина вместо того, чтобы объявлять их как зависимости (поэтому они будут неизвестны D).

Второй вариант, объявите B и C как зависимости A с областью действия provided, как было предложено Питером (см. Переходные зависимости ), и вы не увидите их в D.

0 голосов
/ 23 июня 2010

На этой неделе я сделал нечто подобное, используя maven-shade-plugin для создания Uber JAR.Однако, когда я добавил Uber JAR в качестве зависимости к другому проекту, базовые JAR были добавлены транзитивно.
Чтобы исправить это, мне пришлось пометить зависимости Uber-JAR как true в его pom, и переустановите uber-jar.
См. http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...