Spring Boot 3.5+OpenAPI 3.1 加上 Selenium 踩坑
原本我在公司寫好的 Spring Boot 3.1.5+OpenAPI 3.1+selenium 4.21 都很正常,直到 Spring AI 1.0 橫空出世,我想 Spring Boot 也應該升級到Spring boot 3.5.0 ,才能用上 Spring AI 1.0 MCP 功能,也才能接上未來的 n8n。
但很可惜還沒來得及加上 Spring AI 1.0 外掛,就出現執行階段錯誤
02:29:19,730 |-INFO in ch.qos.logback.classic.util.ContextInitializer@4218d6a3 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 70 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
02:29:19,942 |-ERROR in ch.qos.logback.core.joran.spi.SaxEventInterpretationContext@663411de - No 'converterClass' attribute in <conversionRule>
02:29:19,942 |-ERROR in ch.qos.logback.core.joran.spi.SaxEventInterpretationContext@663411de - No 'converterClass' attribute in <conversionRule>
02:29:19,942 |-ERROR in ch.qos.logback.core.joran.spi.SaxEventInterpretationContext@663411de - No 'converterClass' attribute in <conversionRule>
02:29:19,942 |-ERROR in ch.qos.logback.core.joran.spi.SaxEventInterpretationContext@663411de - No 'converterClass' attribute in <conversionRule>
02:29:19,942 |-ERROR in ch.qos.logback.core.joran.spi.SaxEventInterpretationContext@663411de - No 'converterClass' attribute in <conversionRule>
02:29:19,942 |-ERROR in ch.qos.logback.core.joran.spi.SaxEventInterpretationContext@663411de - No 'converterClass' attribute in <conversionRule>
Logging system failed to initialize using configuration from 'null'
java.lang.NoSuchMethodError: 'void ch.qos.logback.core.model.processor.ModelInterpretationContext.setConfiguratorSupplier(java.util.function.Supplier)'
at org.springframework.boot.logging.logback.SpringBootJoranConfigurator.buildModelInterpretationContext(SpringBootJoranConfigurator.java:117)
踩坑好久好久,後來才發現原本 selenium 使用 webdrivermanager.jar (5.8.0) 內建的 logback,與 spring-boot 3.5.0 內建的 logback 函式庫相衝突,需要升級到最新的 webdrivermanager 6.1.0 才可以匹配,且我有額外排除 webdrivermanager 6.1.0 內建的 logback。
我的設定檔案是 build.gradle,非 maven,重點如下
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.0'
id 'io.spring.dependency-management' version '1.1.7'
...
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web:3.5.0")
implementation 'org.seleniumhq.selenium:selenium-java:4.33.0'
implementation("io.github.bonigarcia:webdrivermanager:6.1.0"){
exclude group: 'ch.qos.logback', module: 'logback-classic'
}
...
}
當然 src/main/resources 目錄也要新增 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-4level] %msg%n</pattern>
</encoder>
</appender>
<logger name="io.github.bonigarcia" level="DEBUG" />
<logger name="io" level="WARN" />
<logger name="org" level="WARN" />
<logger name="com" level="WARN" />
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
這樣就能成功從 Spring Boot 3.1.5 升級到 Spring Boot 3.5.0 了