为什么bean gcpProjectIdProvider在两个类路径中可用并导致错误



当我运行春季启动应用程序时,我得到了以下错误。不确定根本原因是什么。请帮我找出根本原因和解决办法。

Pom.xml

4.0.0org.springframework.boot弹簧引导启动器父级2.4.8com.example防火试验0.0.1快照防火试验Spring Boot firestore的演示项目<java.版本>11<java.版本><spring cloud gcp版本>2.0.3<spring cloud gcp版本><spring cloud.version>2020.0.3<spring cloud.version>org.springframework.boot弹簧靴起动机org.springframework.boot弹簧靴启动器腹板com.google.cloud弹簧云gcp起动器

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-gcp-starter-data-datastore -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
<version>1.2.8.RELEASE</version>
</dependency> 

</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>${spring-cloud-gcp.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>20.6.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

错误


应用程序无法启动


描述:

无法注册类路径资源[org/springframework/cloud/gcp/autoconfig/core/GcpContextAutoConfiguration.class]中定义的bean"gcpProjectIdProvider"。已经在类路径资源[com/google/cloud/spring/autoconfig/core/GcpContextAutoConfiguration.class]中定义了具有该名称的bean,并且禁用了重写。

行动:

考虑重命名其中一个bean,或者通过设置spring.main.allow-bean definition override=true 来启用覆盖

有2个GcpContextAutoConfiguration实现。

  • com.google.cloud:spring-cloud-gcp-autoconfigure提供
  • org.springframework.cloud:spring-cloud-gcp-autoconfigure提供一个

您可以通过替换依赖项来避免此问题:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>

有了这个:

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>

顺便说一句,我在自己的项目中使用Maven的依赖插件发现了这个问题。在我的例子中,运行mvn dependency:tree | grep gcp-auto产生了以下结果,清楚地显示了类路径上的两个竞争实现:

[INFO] |     |  - com.google.cloud:spring-cloud-gcp-autoconfigure:jar:2.0.0:compile
[INFO] |  |  - org.springframework.cloud:spring-cloud-gcp-autoconfigure:jar:1.2.8.RELEASE:compile

EDIT好的,所以我在春季文档中找到了这个迁移指南,它的状态是:

将组ID更改为com.google.cloud

Spring在他们的博客文章中提供了进一步的解释:

。。。Spring Cloud团队已经决定转向一种精简发布序列的模型,使我们能够解决缺点,同时保持所有感知到的好处。建议IaaS提供商将在自己的GitHub组织中托管和维护他们的代码。

自2019年发生这种情况以来,显然我们只是落后于时代。尽管公平地说,目前网上的文档并不一致。

相关内容

  • 没有找到相关文章

最新更新