我有一个包含多个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");
其中Config
(me.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/
)。
答案 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