Я создаю стартер весенней загрузки, следуя рекомендуемому соглашению с разделением модулей ядра / автоконфигурации / стартера. Когда я смотрю на дерево зависимостей 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
Сначала ваш пример показывает, что вы используете spring -boot 2.0.1.RELEASE, но в примере проекта используется 2.0.4.RELEASE и везде отображается gson: 2.8.5 ...
Я не думаю, что они должны совпадать, не так ли? Я перешел на spring-boot-starter-parent 2.0.1, чтобы он соответствовал, но у меня все еще есть проблема. Единственная разница в том, что у меня другая версия gson, 2.8.2.
предыдущее изменение привело меня в правильное русло - в spring -boot 2.0.4 версия gson определяется как 2.8.5 здесь: github.com/spring-projects/spring-boot/blob/v2.0.4.RELEASE/…. Но все же я смущен - благодаря этому мой проект отлично работает "локально", но когда я создаю его как банку и импортирую стартер, этот переопределение версии теряется, и он больше не работает ?? конечно, у нее есть лучшая практика, о которой я не знаю, чтобы избежать этого ..


краткое изложение, основанное на различных подсказках в комментариях к вопросу
Подробный режим - снято с производства с 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
Использование
dependency:tree -Dverboseпоказываетcom.google.code.gson:gson:jar:2.8.2:compile (version managed from 2.5). Но не знаю, откуда взялось управляемое.