Selenium 4.0.x在IDE运行正常 打fat JAR后找不到对应浏览器版本CDP实现怎么办
根因
Selenium针对不同浏览器大版本的CDP适配实现为独立模块,Eclipse运行时会从各自的依赖包路径加载META-INF/services下的服务注册配置,可正常扫描到可用的CDP实现类。使用Maven构建fat JAR时如果未做特殊配置,不同依赖包下同名的服务配置文件会互相覆盖,最终仅保留no-op空实现的注册信息,导致Selenium运行时无法匹配到对应浏览器版本的CDP实现。
解决方案
- 优先升级Selenium到4.10+稳定版本,Selenium 4.6及以上版本自带的Selenium Manager会自动处理浏览器、驱动与CDP实现的版本匹配逻辑,可大幅降低版本适配类问题出现概率
- 若使用
maven-assembly-plugin构建fat JAR,添加metaInf-services配置合并所有服务注册文件,参考配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <archive> <manifest> <mainClass>替换为你的启动类全限定名</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- 合并META-INF/services下的服务配置 --> <containerDescriptorHandlers> <containerDescriptorHandler> <handlerName>metaInf-services</handlerName> </containerDescriptorHandler> </containerDescriptorHandlers> </configuration> <executions> <execution> <id>build-fat-jar</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
- 若使用
maven-shade-plugin构建fat JAR,添加ServicesResourceTransformer转换器合并服务注册文件,参考配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <!-- 合并服务注册配置 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>替换为你的启动类全限定名</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
配置修改完成后执行
mvn clean package重新构建fat JAR,启动运行即可消除该警告。
内容的提问来源于stack exchange,提问作者beaudet
相关产品推荐
相关产品推荐

