本地正常运行的Java Selenium爬虫部署Linux后启动失败求助
问题分析与解决方案
核心问题本质
java.lang.NoClassDefFoundError: org/openqa/selenium/interactions/Coordinates 是因为打包后的JAR缺少对应依赖类,或依赖版本、环境兼容存在问题,结合你的配置和环境,从以下几点排查解决:
1. Spring Boot打包依赖未完整引入
如果使用默认Maven打包插件,只会打包项目自身代码,不会包含所有第三方依赖。必须通过Spring Boot专用打包插件将所有依赖(包括Selenium相关)嵌入可执行JAR。
解决操作:
检查pom.xml中的打包插件配置,确保包含以下内容:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
执行mvn clean package重新生成可执行JAR。
2. Selenium依赖冗余与版本不兼容
- 你同时引入了
selenium-java和selenium-api,但selenium-java已经包含selenium-api,重复引入可能导致依赖解析异常,直接删除selenium-api依赖即可。 - Selenium 4.6.0的适配范围最高到Chrome 106,而你使用的Chrome 122版本差距过大,必然引发底层类加载问题。需升级Selenium到适配Chrome 122的版本(推荐4.18.1,完美支持Chrome 119-122)。
修改后的依赖配置:
<!-- selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.18.1</version> </dependency>
同时更换ChromeDriver为与Chrome完全匹配的版本(你的Chrome是122.0.6261.111,需使用同版本号的ChromeDriver,当前使用的122.0.6261.94小版本不匹配,也会引发兼容问题)。
3. Linux服务器缺失Chrome运行依赖库
Linux环境下即使启用headless模式,Chrome仍需要基础系统依赖库支持,缺失会间接导致类加载异常。
解决操作(Debian/Ubuntu系统):
apt-get install -y libx11-xcb1 libxcb-dri3-0 libdrm2 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2
验证流程
- 重新打包项目确保依赖完整
- 替换ChromeDriver为匹配版本
- 安装Linux依赖库后,执行
java -jar autoCrawler-0.0.1-SNAPSHOT.jar测试
内容的提问来源于stack exchange,提问作者Rolin
相关产品推荐
相关产品推荐

