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