AI代码生成项目bug记录-logback版本冲突

36 阅读1分钟

ps:本项目是使用微服务架构并基于LangChain4J开发的AI应用生成平台(AI生成前端工程项目),支持一键部署。具体查看代码仓库: ( gitee.com/wangfenghua… )

复现: 改造微服务之后,启动服务报错

java.lang.AbstractMethodError: 
Receiver class org.springframework.boot.logging.logback.RootLogLevelConfigurator 
does not define or inherit an implementation of the resolved method 
'abstract void configure(ch.qos.logback.classic.LoggerContext)' 
of interface ch.qos.logback.classic.spi.Configurator.

原因: dubbo-nacos-spring-boot-starter依赖的logback与springboot依赖的logbak版本冲突 解决:排除dubbo-nacos的logback依赖

  <!-- ✅ 关键:在 dependencyManagement 中定义 dubbo-nacos-spring-boot-starter 并排除 logback 适配器 -->
      <!-- 这样所有子模块都会继承这个规则 -->
      <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
        <version>3.3.0</version>
        <exclusions>
          <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-logback-adapter-12</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>logback-adapter</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

完整的父工程pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.wfh</groupId>
 <artifactId>ai-gen-mirco</artifactId>
 <packaging>pom</packaging>
 <modules>
   <module>gen-common</module>
   <module>gen-model</module>
   <module>gen-client</module>
   <module>gen-user</module>
   <module>gen-app</module>
   <module>gen-ai</module>
   <module>gen-screenshot</module>
 </modules>
 <version>1.0-SNAPSHOT</version>
 <name>ai-gen-mirco</name>
 <url>http://maven.apache.org</url>
 <properties>
   <maven.compiler.source>21</maven.compiler.source>
   <maven.compiler.target>21</maven.compiler.target>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <spring-boot.version>3.5.3</spring-boot.version>
   <spring-cloud.version>2023.0.1</spring-cloud.version>
   <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
 </properties>

 <!-- 父 POM 的 dependencies 是 "默认依赖",会被所有子模块继承 -->
 <dependencies>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
   </dependency>

   <!-- ✅ 排除 knife4j 可能带来的旧版 Spring 依赖 -->
   <dependency>
     <groupId>com.github.xiaoymin</groupId>
     <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
     <version>4.4.0</version>
   </dependency>

   <dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.8.38</version>
   </dependency>

   <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.38</version>
     <optional>true</optional>
   </dependency>

   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>

   <!-- 注意:这里不再需要 version 和 exclusions,由 dependencyManagement 控制 -->
   <dependency>
     <groupId>org.apache.dubbo</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
   </dependency>

   <!-- 注意:这里不再需要 version 和 exclusions,由 dependencyManagement 控制 -->
   <dependency>
     <groupId>org.apache.dubbo</groupId>
     <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
   </dependency>
 </dependencies>

 <!-- 核心:依赖版本管理 -->
 <dependencyManagement>
   <dependencies>
     <!-- ✅ 1. 必须放在第一位,保证 Spring Boot 的版本控制优先 -->
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-dependencies</artifactId>
       <version>${spring-boot.version}</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>

     <!-- 其他 BOM -->
     <dependency>
       <groupId>org.apache.dubbo</groupId>
       <artifactId>dubbo-bom</artifactId>
       <version>3.3.0</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>

     <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.alibaba.cloud</groupId>
       <artifactId>spring-cloud-alibaba-dependencies</artifactId>
       <version>${spring-cloud-alibaba.version}</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>

     <!-- ✅ 关键:在 dependencyManagement 中定义 dubbo-nacos-spring-boot-starter 并排除 logback 适配器 -->
     <!-- 这样所有子模块都会继承这个规则 -->
     <dependency>
       <groupId>org.apache.dubbo</groupId>
       <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
       <version>3.3.0</version>
       <exclusions>
         <exclusion>
           <groupId>com.alibaba.nacos</groupId>
           <artifactId>nacos-logback-adapter-12</artifactId>
         </exclusion>
         <exclusion>
           <groupId>com.alibaba.nacos</groupId>
           <artifactId>logback-adapter</artifactId>
         </exclusion>
       </exclusions>
     </dependency>
   </dependencies>
 </dependencyManagement>

 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.14.0</version>
       <configuration>
         <parameters>true</parameters>
       </configuration>
     </plugin>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
       <version>${spring-boot.version}</version>
       <executions>
         <execution>
           <goals>
             <goal>repackage</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
   </plugins>
 </build>
</project>