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

Java/Selenium应用命令行执行类路径搜索顺序异常问题

命令行运行Java/Selenium应用遭遇NoClassDefFoundError问题

基础环境

  • Windows 10 命令行环境
  • Java 17
  • 未使用Maven,手动管理Selenium及依赖包
  • Selenium版本:4.16.1

初始目录结构

Selenium(包含SeleniumTest1.java)
   |
   - classes(存放所有selenium-java-4.16.1的jar包)
   |
   - auxClasses(存放failsafe-3.3.2.jar、google-collections-1.0.jar、guava-17.0.jar)

编译操作(成功完成)

执行编译命令:

C:\Selenium>javac -cp .\classes\selenium-api-4.16.1.jar;.\classes\selenium-chrome-driver-4.16.1.jar;.\classes\selenium-chromium-driver-4.16.1.jar;.\classes\selenium-remote-driver-4.16.1.jar;.\classes\selenium-support-4.16.1.jar SeleniumTest1.java

首次运行报错

执行运行命令:

C:\Selenium>java -cp .;.\classes\*;.\auxClasses\* SeleniumTest1

得到错误栈片段:

... 7 more
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Throwables
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 9 more

排查发现:com.google.common.base.Throwables 类在auxClasses\guava-17.0.jar中的实际存储路径是spals\shaded\com\google\common\base\Throwables,与预期的包路径不匹配。

尝试修复后的目录结构

将guava-17.0.jar解压,移除spals\shaded前缀层级,让com成为根目录,把处理后的文件放入guava-17.0-extracted目录,更新后的结构:

Selenium(SeleniumTest1.java)
    |
    - classes(所有selenium-java-4.16.1的jar包)
    |
    - auxClasses(failsafe-3.3.2.jar、google-collections-1.0.jar、guava-17.0.jar)
    |
    - guava-17.0-extracted(根目录为com的文件结构)

修复后运行仍报错

执行更新类路径的运行命令:

C:\Selenium>java -cp .;.\classes\*;.\auxClasses\*;.\guava-17.0-extracted SeleniumTest1

得到新的错误栈片段:

...
Caused by: java.lang.NoClassDefFoundError: spals/shaded/com/google/common/base/Throwables (wrong name: com/google/common/base/Throwables)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:177)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:523)
        ... 7 more

疑惑:按逻辑,运行时应该从guava-17.0-extracted找到正确包路径的com.google.common.base.Throwables,同时auxClasses\guava-17.0.jar中的spals/shaded/com/google/common/base/Throwables也能被正常加载,但实际出现类名不匹配的错误,无法定位问题原因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:20:09