Maven - получение разных версий при использовании jar в качестве зависимости -> сбивает с толку - PullRequest
1 голос
/ 15 марта 2019

В рамках моего проекта я создаю стартер Spring Boot.

Когда я проверяю зависимости, используемые в моем стартере, я не получаю никаких конфликтов.Pom.xml доступен здесь .Например, я получаю jackson-databind 2.9.8 в своем стартере 1.1.0

proper dependencies

Теперь, когда я использую свой стартер в другом проекте,для которого единственная объявленная зависимость находится выше стартовой:

<dependencies>
       <dependency>
        <groupId>com.societegenerale.ci-droid.tasks-consumer</groupId>
        <artifactId>ci-droid-tasks-consumer-starter</artifactId>
        <version>1.1.0</version>
    </dependency>
</dependencies>

(пример доступен здесь )

Я ожидаю увидеть точно такие же зависимости .. Ну, янет. В этом случае jackson-databind 2.8.9 "выигрывает", а не 2.9.8

enter image description here

Это вызывает проблемы приво время выполнения.Это довольно раздражает, так как я не могу по-настоящему легко распространять стартер, если не могу гарантировать, какие зависимости появятся при его использовании.

Какое правило Maven здесь работает?Я не понимаю .. И как я могу убедиться в том, что в распространяемый мной стартер входит правильная версия, поэтому мне не нужно указывать людям явно объявлять версии при их использовании?

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Вероятно, что <dependencyManagement> происходит, либо в вашем POM, либо в Parent POM.Это устанавливает версию 2.9.8.

В другом случае Maven следует стратегии «выигрывает от ближней зависимости», что приводит к неожиданному поведению.

0 голосов
/ 15 марта 2019

хорошо, я не знаю, является ли это рекомендуемым способом или нет, но это работает.в пользовательском проекте, в котором используется стартер, используйте родительский pom в качестве спецификации, а стартер в качестве зависимости, каждый раз упоминая версию:

https://github.com/vincent-fuchs/custom-ci-droid-tasks-consumer/blob/2d9f0aff57685be38f7e8c269701dc3c2dac6ef0/pom.xml#L13-L40

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <ci-droid-tasks-consumer.version>1.1.0</ci-droid-tasks-consumer.version>
</properties>

<dependencyManagement>
    <dependencies>
    <dependency>
        <groupId>com.societegenerale.ci-droid.tasks-consumer</groupId>
        <artifactId>ci-droid-tasks-consumer-parent</artifactId>
        <type>pom</type>
        <scope>import</scope>
        <version>${ci-droid-tasks-consumer.version}</version>
    </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <dependency>
        <groupId>com.societegenerale.ci-droid.tasks-consumer</groupId>
        <artifactId>ci-droid-tasks-consumer-starter</artifactId>
        <version>${ci-droid-tasks-consumer.version}</version>
    </dependency>

</dependencies>

Если яимпортируйте его таким образом, тогда jackson-databinder получается как в основном проекте, т.е. 2.9.8.

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