将所有JAR中的所有类加载到classpath

时间:2018-05-01 10:14:00

标签: java cmd jar classpath executable-jar

我有一个包含多个JAR的文件夹libs,我有一个应用程序(让我们说MyTest.jar)使用这些库中的一些类。我需要的是使用MyTest.jar-cp)参数运行-classpath,该参数将文件夹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");

其中Configme.darksidecode.simpleconfigs.Config)是SimpleConfigs.jar库的一个类,我的libs中存在 <({1}} })文件夹和有效

无济于事我还尝试明确指定其中一个库(E:\libs):SimpleConfigs.jar。发生同样的错误。

我怎样才能让它发挥作用?

编辑:似乎我必须在java -cp E:\libs\SimpleConfigs.jar -jar MyTest.jar的MANIFEST.MF文件中指定classpath。在这里我遇到了一个新问题:我只能在MyTest.jar中指定确切的JAR名称,如下所示:

Class-Path

就像这样。但是当我尝试指定整个目录时:

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

它再次开始抛出上述错误(Class-Path: /E:/libs/ )。

1 个答案:

答案 0 :(得分:1)

java文档说明

  

-jar

     

执行封装在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