You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium 4升级后UberJar包运行时Firefox Driver加载失败如何解决

问题根因

Selenium 4 依赖SPI(服务提供接口)机制加载各浏览器驱动的执行器实现。打包UberJar时如果未对多依赖下META-INF/services目录中的SPI配置文件做合并处理,不同依赖的同路径配置文件会互相覆盖,导致Selenium无法识别FirefoxDriver的实现类,触发Optional.orElseThrow空值异常。
单元测试运行时所有依赖分别加载,不会出现配置覆盖问题,因此测试用例可正常执行。

修复方案

基于Maven maven-shade-plugin 打包

在shade插件的转换配置中添加ServicesResourceTransformer,自动合并所有SPI服务配置文件:

<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>
                    <!-- 合并SPI服务配置 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    <!-- 其他已有transformer配置保持不变 -->
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

基于Gradle Shadow 插件打包

在shadowJar配置块中启用服务文件合并能力:

shadowJar {
    // 合并所有META-INF/services下的配置文件
    mergeServiceFiles()
    // 其他原有配置保持不变
}
验证方式

打包完成后解压生成的UberJar文件,检查META-INF/services/org.openqa.selenium.remote.service.DriverService$Builder文件,确认其中存在org.openqa.selenium.firefox.GeckoDriverService$Builder条目,即说明配置合并生效,问题已修复。

内容的提问来源于stack exchange,提问作者Phyxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:24:06