Maven: Как удалить зависимости, если они уже переходные? - PullRequest
7 голосов
/ 30 сентября 2010

Например, если есть зависимости:

a -> b
a -> c
b -> c

Я хочу удалить зависимость a -> c, потому что есть a -> b -> c.

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

Пример:

In a.pom: 
<dependencies>
    <dependency>b</dependency>
    <dependency>c</dependency>
</dependencies>

In b.pom:
<dependencies>
    <dependency>c</dependency>
</dependencies>

Ожидаемый результат:

In a.pom: 
<dependencies>
    <dependency>b</dependency>
</dependencies>

Ответы [ 3 ]

14 голосов
/ 01 октября 2010

Используйте mvn dependency:analyze, чтобы показать вам, есть ли в вашей помпе зависимости, которые вам не нужны (могут также указываться некоторые, которые вы пропустили, добавьте -DoutputXML=true, чтобы показать отсутствующие записи).

Используйте mvn dependency:tree, чтобы показать вам зависимости, которые в данный момент используются вашим проектом, и где Maven их находит. Добавьте -Dverbose=true, чтобы показать все дубликаты и конфликты.

Если a напрямую зависит от c (то есть, если код в a упоминает классы в c), то pom должен отражать это. Если a напрямую зависит только от b, то вы можете безопасно удалить зависимость c из файла a pom.xml. Приведенные выше команды должны позволить вам определить, что является подходящим следующим действием.

Редактировать: Хорошо, вы обновили свой вопрос. Вот как вы это делаете:

  1. в проекте a, запустить mvn dependency:tree -Dverbose=true. Это покажет вам полное дерево всех зависимостей, рассмотренных Maven для вашего проекта.
  2. Посмотрите на выходные данные шага 1 и составьте список всех зависимостей, которые показаны на глубине более одного уровня (некоторые из них, вероятно, будут дубликатами).
  3. Отредактируйте файл pom.xml в любом понравившемся вам редакторе и удалите все зависимости, которые соответствуют списку, созданному на шаге 2.

Или вы ищете способ сделать это автоматически? Я не думаю, что есть какой-либо автоматизированный способ, если вы не пишете его самостоятельно, потому что вы пытаетесь сделать ПЛОХАЯ ИДЕЯ . Вы говорите людям, что их возражения «не имеют отношения» к вашему вопросу, но факт в том, что ваш вопрос похож на вопрос «Как я могу использовать Maven, чтобы затруднить использование Maven?»

Нет веской причины, почему вы хотели бы сделать это. Если вы думаете, что есть веская причина, вы должны пытаться сделать это, чтобы получить какой-то результат. Вам следует обратиться за помощью к желаемому результату, потому что ваш план плохой.

12 голосов
/ 02 октября 2010

Я предполагаю, что вы хотите найти ложные / ненужные зависимости, которые уже встречались, потому что вы получаете их бесплатно от другой зависимости..

Однако обычно это не то, что вы хотели бы сделать, поскольку рекомендуется четко указывать, какие у вас зависимости.

Вы никогда не узнаете, удаляет ли в будущем модуль bc как зависимость и таким образом нарушает a

2 голосов
/ 01 октября 2010

Как и другие постеры, я не совсем уверен, чего вы хотите достичь. Может быть, исключения - это то, что вам нужно? Вы можете использовать исключения для удаления зависимостей ваших зависимостей - если они по каким-либо причинам нежелательны.

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>logkit</groupId>
                    <artifactId>logkit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>avalon-framework</groupId>
                    <artifactId>avalon-framework</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
...