«Групповое давление» в управлении зависимостями Maven - PullRequest
3 голосов
/ 02 июля 2019

У меня возникла проблема с Maven, когда в моем проекте A на библиотеку com.google.guava ссылаются примерно полдюжины раз по нескольким слоям переходных зависимостей.Почти для всех этих зависимостей требуется старая версия 18.0.

. Я написал еще одну зависимость B , которая также используется в проекте A .Эта зависимость напрямую зависит от версии 28.0 из com.google.guava, но Maven по-прежнему выбирает 18.0 из-за более новой версии.

Если я явно не включу более новую версию во все проекты в зависимости от B , библиотека будет нефункциональна из-за NoMethodError с и тому подобное.Если я это сделаю, то, вероятно, у меня возникнут проблемы с всеми остальными библиотеками из-за новой бинарно-несовместимой версии зависимости.

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

Почему бы Maven не выбрать вместо этого самую новую версию?Что я могу сделать, чтобы убедить Maven использовать более новую версию во всех проектах в зависимости от B ?

Есть ли способ разделить проблемы и иметь все другие зависимости на самом делеиспользуйте 18.0, в то время как моя зависимость использует 28.0?

Если только немного больший размер пакета является призом для оплаты более современных библиотек во всех проектах ...

Может быть, естьвозможность жестко связать определенную версию зависимости для моей библиотеки B , поэтому только моя библиотека использует более новую версию?

1 Ответ

0 голосов
/ 02 июля 2019

В Maven вы можете использовать <dependencyManagement>

С помощью этого тега вы можете явно указать maven, какие версии зависимостей вы хотите использовать в своем проекте.

Для гуавы вы можете сделать что-то вроде:

<dependencyManagement>
    <dependencies>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>28.0</version>
        </dependency>

    ...
    </dependencies>
</dependencyManagement>

Тогда вы можете сделать что-то вроде:

    <dependencies>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>

    ...
    </dependencies>

Это заставит maven использовать зависимость от guava 18

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