启动Selenium Grid Hub报jar无主清单属性错误如何解决
问题描述
搭建Selenium Grid Hub节点时,执行如下命令尝试启动Hub:java -jar selenium-server-4.0.0-alpha-2.jar -role hub
控制台返回报错:
no main manifest attribute, in selenium-server-4.0.0-alpha-2.jar
已在项目POM文件中配置maven-jar-plugin插件,配置代码如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.abc.qr.xyz.MainClass</mainClass> </manifest> </archive> </configuration> </plugin>
核心原因
报错的本质是当前执行的selenium-server-4.0.0-alpha-2.jar包内,META-INF/MANIFEST.MF文件未配置Main-Class属性,JVM无法找到启动入口。
你在项目POM中配置的maven-jar-plugin仅对当前项目自身打包产出的jar生效,不会修改第三方依赖包的manifest配置,因此该配置和你当前遇到的报错没有关联。
常见触发原因有3种:
- 用错了包:Maven中央仓库中
selenium-server坐标下的普通jar包是供其他项目引用的依赖包,本身不带可执行启动入口,不是官方提供的可执行发行版 - 包损坏:下载/拉取jar包时网络异常,导致本地存储的jar包残缺,manifest文件丢失
- 版本命令不匹配:Selenium 4.0.0-alpha-2属于早期测试版,分发包结构、启动参数和3.x稳定版差异较大,沿用旧版启动参数+错误的包就会触发报错
排查解决步骤
按以下顺序操作即可解决:
- 先校验当前jar包是否为可执行包
执行命令查看jar包内的manifest配置:jar xf selenium-server-4.0.0-alpha-2.jar META-INF/MANIFEST.MF && cat META-INF/MANIFEST.MF
如果输出内容里没有Main-Class字段,直接丢弃当前包即可。 - 换用正确的Selenium分发包
不要直接使用Maven依赖拉取的普通selenium-server jar启动Grid,要么下载对应版本的selenium-server-standalone可执行包,要么直接升级到Selenium 4.x正式版,正式版已经把Hub、Node、Standalone等启动入口整合到同一个发行包中。 - 调整启动命令
如果使用Selenium 4.x正式版可执行包,启动Hub不需要加-role参数,直接执行:java -jar selenium-server-4.xx.jar hub
如果不想单独下载可执行包,要通过项目依赖直接启动,可以通过-cp指定依赖路径和主类的方式启动,不需要依赖jar包本身的manifest配置:java -cp "target/dependency/*:target/classes" org.openqa.selenium.grid.Bootstrap hub - 清理损坏的缓存包
如果是Maven拉取的依赖包损坏,直接删除本地Maven仓库下org/seleniumhq/selenium/selenium-server/4.0.0-alpha-2整个目录,重新拉取依赖即可。
内容的提问来源于stack exchange,提问作者ktmrocks
相关产品推荐
相关产品推荐

