Vaadin 7.1.0迁移至8.26.0时遭遇依赖解析失败及SLF4J日志绑定错误
看起来你在从Vaadin 7.1.0升级到8.26.0的过程中碰到了两个麻烦问题:SLF4J日志绑定缺失,以及Maven无法解析vaadin-compatibility-server的依赖。别慌,咱们一步步来解决这些问题。
先处理SLF4J日志绑定错误
你看到的Failed to load class "org.slf4j.impl.StaticLoggerBinder"错误,本质是因为你的项目只引入了SLF4J的API规范,但没有搭配具体的日志实现类库(比如Logback、Log4j2这类)。SLF4J本身只是个日志门面,需要具体的实现来干活。
解决方法很简单,在你的pom.xml里添加一个SLF4J的实现依赖就行。比如用最常用的Logback:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> <!-- 选最新稳定版本即可 --> </dependency>
如果你习惯用Log4j2,也可以换成对应的依赖,这样SLF4J就能找到对应的日志实现,不会再报这个错误了。
解决vaadin-compatibility-server依赖解析失败
这个错误提示Failed to read artifact descriptor for com.vaadin:vaadin-compatibility-server:jar:8.26.0,大概率是Maven找不到这个依赖的来源,或者本地缓存有问题。可以试试下面几个方案:
添加Vaadin官方Maven仓库
Vaadin的一些兼容性依赖可能不在默认的Maven中央仓库里,你需要在pom.xml中添加Vaadin的官方仓库配置:<repositories> <repository> <id>vaadin-release</id> <url>https://maven.vaadin.com/vaadin-releases</url> </repository> <repository> <id>vaadin-addons</id> <url>https://maven.vaadin.com/vaadin-addons</url> </repository> </repositories>这样Maven就能从Vaadin的官方仓库去拉取对应的兼容性依赖了。
清理本地Maven缓存
有时候本地Maven仓库里的依赖缓存可能损坏了,你可以手动删除本地仓库中vaadin-compatibility-server对应的目录(也就是日志里提到的null/.m2/repository/com/vaadin/vaadin-compatibility-server),然后重新执行构建命令,让Maven重新下载完整的依赖文件。确认依赖声明和迁移工具版本
检查你的pom.xml里vaadin-compatibility-server的版本是否确实是8.26.0,有没有拼写错误。另外如果你是用Vaadin官方迁移工具来做升级的,也要确保工具的版本和Vaadin 8.26.0兼容,旧版本的工具可能识别不了新版本的依赖。
按照上面的步骤操作后,应该能解决这两个问题,顺利完成迁移啦。
备注:内容来源于stack exchange,提问作者user1214542

