【问题标题】:java.lang.ClassNotFoundException when running a jar and its dependency is in the same directoryjava.lang.ClassNotFoundException 运行 jar 并且其依赖项位于同一目录中时
【发布时间】:2026-01-04 13:20:05
【问题描述】:

在 Eclipse 上,我编译了一个 jar 文件。 它使用映射网络驱动器上的多个外部存档。 项目在eclipse上完美运行。

我已将 jar + 所有依赖 jar 复制到某个 Solaris 目录中。 然后我尝试了

java -jar myapp.jar

它给了我以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: confmng/ConfigManager

错误消息中指定的此类位于我已复制到与主 jar 相同目录的映射 jar 中。

另外,我从 solaris ping 了依赖 jar 所在的服务器,结果是肯定的。

你也可以看到confmng包里面的ConfigManager类确实在依赖jar里面:

可能出了什么问题?

谢谢

【问题讨论】:

    标签: java eclipse jar noclassdeffounderror classnotfoundexception


    【解决方案1】:

    您必须为依赖项指定类路径,您可以在 Manifest 类路径中指定,或者在带有-classpath 参数的java -jar myapp.jar 命令中指定。

    例子:

    java -classpath dependency1.jar;subfolder/dependency2.jar;myapp.jar package.of.your.main.Class
    

    您还可以在 Eclipse 中导出 Runnable Jar,因此会有一些选项来处理依赖项,例如“将所需库打包到生成的 JAR”选项。

    【讨论】:

    • 谢谢。我知道 Runnable Jar 的选项,也许我会使用它。但是如果依赖项和主jar在同一个目录下,为什么找不到呢?另外,如何在命令 java -jar -mayapp.jar 中指定与类路径相同的目录?
    • Java 无法找到即使依赖项 jar 在同一目录中,因为它不知道在哪里找到它。您必须在 jar 中指定 java 必须找到的类。
    • 使用java命令可以用-classpath指定classpath,例如:java -classpath dependencyA.jar;myapp.jar com.package.of.your.main.Class
    • Java 不允许将-jar-classpath 命令一起使用,这就是为什么您必须在类路径中指定自己的jar 并将MainClass 路径写入Java 知道要执行哪个类。