【问题标题】:Load all classes in all JARs to classpath [duplicate]将所有 JAR 中的所有类加载到类路径 [重复]
【发布时间】:2018-10-11 09:20:02
【问题描述】:

我有一个文件夹libs,其中包含多个 JAR,并且我有一个使用这些库中的一些类的应用程序(比如说MyTest.jar)。我需要的是使用-cp (-classpath) 参数运行MyTest.jar,它将文件夹libs 中的所有JAR 完全添加到类路径中。

我已经尝试过java -cp E:\libs -jar MyTest.jar。但是,这似乎根本没有加载库,从我得到的这个错误中可以看出(它指出它找不到库类之一me.darksidecode.simpleconfigs.Config):

Exception in thread "main" java.lang.NoClassDefFoundError: me/darksidecode/simpleconfigs/Config
        at me.darksidecode.KekGUI.<init>(KekGUI.java:31)
        at me.darksidecode.KekGUI.main(KekGUI.java:63)
Caused by: java.lang.ClassNotFoundException: me.darksidecode.simpleconfigs.Config
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more

抛出异常的行是:

Config testcfg = new Config("hello = world");

其中Config (me.darksidecode.simpleconfigs.Config) 是SimpleConfigs.jar 库的一个类,它存在在我的libs (E:\libs) 文件夹中并且有效。

无济于事,我还尝试明确指定库之一 (SimpleConfigs.jar):java -cp E:\libs\SimpleConfigs.jar -jar MyTest.jar。发生同样的错误。

我怎样才能让它工作?

编辑:看来我必须在MyTest.jar 的 MANIFEST.MF 文件中指定类路径。这里我遇到了一个新问题:我只能在Class-Path 中指定确切的 JAR 名称,如下所示:

Class-Path: /E:/libs/SimpleConfigs.jar

它就是这样工作的。但是当我尝试指定整个目录时:

Class-Path: /E:/libs/

它再次开始抛出上述错误 (java.lang.NoClassDefFoundError)。

【问题讨论】:

  • @SeverityOne 谢谢,虽然现在我遇到了不同的问题。更新了我的帖子。
  • 如果您的问题得到解决,您应该写下答案或删除帖子。如果你有一个新问题,你应该开始一个新的线程。

标签: java cmd jar classpath executable-jar


【解决方案1】:

java 文档说明

-罐子

执行封装在 JAR 文件中的程序。第一个参数是 JAR 文件的名称,而不是启动类名称。要使此选项起作用,JAR 文件的清单必须包含格式为 Main-Class: classname 的行。在这里,classname 使用 public static void main(String[] args) 方法标识类,该方法用作应用程序的起点。

使用此选项时,JAR 文件是所有用户类的来源,其他用户类路径设置将被忽略`。

一种解决方法是将 MyTest.jar 附加到类路径 (-cp) 并指定 MyTest.jar 中的主类作为 java 的参数

java -cp Mytest.jar;E:\libs\* me.darksidecode.KekGUI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多