将所有 JAR 中的所有 类 加载到类路径
Load all classes in all JARs to classpath
我有一个包含多个 JAR 的文件夹 libs
,并且我有一个应用程序(假设 MyTest.jar
)使用这些库中的一些 classes。我需要的是 运行 MyTest.jar
使用一种 -cp
(-classpath
) 参数,它将文件夹 libs
中的所有 JAR 添加到 class完整路径。
我已经试过了java -cp E:\libs -jar MyTest.jar
。但是,这似乎根本没有加载库,从我得到的这个错误中可以看出(指出它找不到库 classes 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
库的 class, 存在 在我的 libs
(E:\libs
) 文件夹并且 有效 .
无济于事我还尝试明确指定库之一 (SimpleConfigs.jar
):java -cp E:\libs\SimpleConfigs.jar -jar MyTest.jar
。发生同样的错误。
我怎样才能让它工作?
编辑: 看来我必须在 MyTest.jar
的 MANIFEST.MF 文件中指定 class 路径。在这里我遇到了一个新问题:我只能在 Class-Path
中指定确切的 JAR 名称,如下所示:
Class-Path: /E:/libs/SimpleConfigs.jar
它是这样工作的。但是当我尝试指定整个目录时:
Class-Path: /E:/libs/
它再次开始抛出上述错误 (java.lang.NoClassDefFoundError
)。
java 文档指出
-jar
Executes a program encapsulated in a JAR file. The first argument is the name of a JAR file instead of a startup class name. For this option to work, the manifest of the JAR file must contain a line in the form Main-Class: classname. Here, classname identifies the class with the public static void main(String[] args) method that serves as your application's starting point.
When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored`.
一种解决方法是将 MyTest.jar 附加到 class 路径 (-cp) 并将 MyTest.jar 中的主要 class 指定为 [=18= 的参数]
java -cp Mytest.jar;E:\libs\* me.darksidecode.KekGUI
我有一个包含多个 JAR 的文件夹 libs
,并且我有一个应用程序(假设 MyTest.jar
)使用这些库中的一些 classes。我需要的是 运行 MyTest.jar
使用一种 -cp
(-classpath
) 参数,它将文件夹 libs
中的所有 JAR 添加到 class完整路径。
我已经试过了java -cp E:\libs -jar MyTest.jar
。但是,这似乎根本没有加载库,从我得到的这个错误中可以看出(指出它找不到库 classes 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
库的 class, 存在 在我的 libs
(E:\libs
) 文件夹并且 有效 .
无济于事我还尝试明确指定库之一 (SimpleConfigs.jar
):java -cp E:\libs\SimpleConfigs.jar -jar MyTest.jar
。发生同样的错误。
我怎样才能让它工作?
编辑: 看来我必须在 MyTest.jar
的 MANIFEST.MF 文件中指定 class 路径。在这里我遇到了一个新问题:我只能在 Class-Path
中指定确切的 JAR 名称,如下所示:
Class-Path: /E:/libs/SimpleConfigs.jar
它是这样工作的。但是当我尝试指定整个目录时:
Class-Path: /E:/libs/
它再次开始抛出上述错误 (java.lang.NoClassDefFoundError
)。
java 文档指出
-jar
Executes a program encapsulated in a JAR file. The first argument is the name of a JAR file instead of a startup class name. For this option to work, the manifest of the JAR file must contain a line in the form Main-Class: classname. Here, classname identifies the class with the public static void main(String[] args) method that serves as your application's starting point.
When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored`.
一种解决方法是将 MyTest.jar 附加到 class 路径 (-cp) 并将 MyTest.jar 中的主要 class 指定为 [=18= 的参数]
java -cp Mytest.jar;E:\libs\* me.darksidecode.KekGUI