где версия maven переопределяется? - PullRequest
0 голосов
/ 02 сентября 2018

Я строю стартер с пружинной загрузкой в ​​соответствии с рекомендуемым соглашением с разделением модуля ядро ​​/ автоконфигурация / стартер. Когда я смотрю на дерево зависимостей 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

1 Ответ

0 голосов
/ 03 сентября 2018

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

Подробный режим более не поддерживается, начиная с 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

...