Где версия maven переопределяется?

Я создаю стартер весенней загрузки, следуя рекомендуемому соглашению с разделением модулей ядра / автоконфигурации / стартера. Когда я смотрю на дерево зависимостей maven, я вижу следующее:

[INFO] com.myDomain.myProject:myProject-starter:jar:1.0.8-SNAPSHOT
[INFO] +- com.myDomain.myProject:myProject-autoconfigure:jar:1.0.8-SNAPSHOT:compile
[INFO] |  \- com.myDomain.myProject:myProject-core:jar:1.0.8-SNAPSHOT:compile
[INFO] |     +- io.github.openfeign:feign-gson:jar:9.5.1:compile
[INFO] |     |  +- io.github.openfeign:feign-core:jar:9.5.1:compile
[INFO] |     |  \- com.google.code.gson:gson:jar:2.8.5:compile

gson поставляется с v2.8.5, это та версия, которую я ожидаю - мой проект работает с ней

(примечание: в https://mvnrepository.com/artifact/io.github.openfeign/feign-core/9.5.1 мы видим, что ожидаемая версия для gson - 2.5 ... поэтому не знаю, почему я получаю 2.8.5 ..)

В моем корневом файле pom.xml я объявляю спецификацию следующим образом:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-openfeign-dependencies</artifactId>
            <version>2.0.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

и в моем "ядре" pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-gson</artifactId>
    </dependency>

    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
    </dependency>
</dependencies>

Сейчас в другом проекте использую стартер. Итак, мой pom.xml очень прост:

<dependencies>
    <dependency>
        <groupId>com.myDomain.myProject</groupId>
        <artifactId>myProject-starter</artifactId>
        <version>1.0.8-SNAPSHOT</version>
    </dependency>
</dependencies>

Когда я смотрю на дерево зависимостей в этом проекте, я получаю следующее:

[INFO] \- com.myDomain.myProject:myProject-starter:jar:1.0.8-SNAPSHOT:compile
[INFO]    +- com.myDomain.myProject:myProject-autoconfigure:jar:1.0.8-SNAPSHOT:compile
[INFO]    |  \- com.myDomain.myProject:myProject-core:jar:1.0.8-SNAPSHOT:compile
[INFO]    |     +- io.github.openfeign:feign-gson:jar:9.5.1:compile
[INFO]    |     |  +- io.github.openfeign:feign-core:jar:9.5.1:compile
[INFO]    |     |  \- com.google.code.gson:gson:jar:2.5:compile

gson входит в v2.5 и из-за этого не работает. Если я переопределю его в pom.xml, объявив gson 2.8.5 перед стартером, то он заработает ..

Но должно быть что-то, чего мне не хватает в работе Maven ...

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

код доступен в этой ветке, если вы хотите попробовать его локально: https://github.com/societe-generale/github-crawler/tree/sprinBoot2upgrade

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

Спасибо !

=========================================

ИЗМЕНИТЬ 1

Как упоминалось в комментариях, это стартер Spring Boot, который заменяет версию gson на 2.8.5 (вместо 2.5, запланированной в feign-core).

Итак, теперь возникает вопрос: почему, когда я использую стартер в качестве единственной зависимости в другом проекте без родителя, эта переопределенная версия (2.8.5) исчезает, и я получаю начальную версию (2.5), которая несовместима с spring-boot-autoconfigure 2.0.4.RELEASE?

РЕДАКТИРОВАТЬ 2

Я создал здесь новый, более конкретный вопрос: Не получаю ожидаемую версию при использовании созданного мной стартера Spring Boot

Использование dependency:tree -Dverbose показывает com.google.code.gson:gson:jar:2.8.2:compile (version managed from 2.5). Но не знаю, откуда взялось управляемое.

John 02.09.2018 17:41

Сначала ваш пример показывает, что вы используете spring -boot 2.0.1.RELEASE, но в примере проекта используется 2.0.4.RELEASE и везде отображается gson: 2.8.5 ...

khmarbaise 02.09.2018 17:43

Я не думаю, что они должны совпадать, не так ли? Я перешел на spring-boot-starter-parent 2.0.1, чтобы он соответствовал, но у меня все еще есть проблема. Единственная разница в том, что у меня другая версия gson, 2.8.2.

Vincent F 02.09.2018 18:01

предыдущее изменение привело меня в правильное русло - в spring -boot 2.0.4 версия gson определяется как 2.8.5 здесь: github.com/spring-projects/spring-boot/blob/v2.0.4.RELEASE/…. Но все же я смущен - благодаря этому мой проект отлично работает "локально", но когда я создаю его как банку и импортирую стартер, этот переопределение версии теряется, и он больше не работает ?? конечно, у нее есть лучшая практика, о которой я не знаю, чтобы избежать этого ..

Vincent F 02.09.2018 18:06
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
4
430
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

краткое изложение, основанное на различных подсказках в комментариях к вопросу

Подробный режим - снято с производства с Maven 3.x, поэтому используйте mvn dependency: tree -X, чтобы получить более подробную информацию об используемых / переопределенных версиях и т. д. Тогда вы получите что-то вроде этого:

[DEBUG] io.github.openfeign:feign-gson:jar:9.5.1:compile 
[DEBUG]    com.google.code.gson:gson:jar:2.8.5:compile (version managed from 2.5 by org.springframework.boot:spring-boot-dependencies:2.0.4.RELEASE)

-> это ясно указывает на то, откуда взялась версия, то есть https://github.com/spring-projects/spring-boot/blob/v2.0.4.RELEASE/spring-boot-project/spring-boot-dependencies/pom.xml#L65

Другие вопросы по теме