设置Java类路径以加载类文件

8

我是Java新手,不确定如何从一个独立的程序jar中访问位于特定目录中的类文件。

例如,我有一个第三方jar文件位于/,它应该加载位于/mylib/MyClass.class中的MyClass,所以我尝试运行:

java -jar mainprog.jar -classpath "/mylib" MyClass

但我遇到了错误:
Exception in thread "main" java.lang.NoClassDefFoundError: MyClass
Caused by: java.lang.ClassNotFoundException: MyClass
        at java.net.URLClassLoader$1.run(URLClassLoader.java:221)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:209)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:324)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:269)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337)

我做错了什么?

2个回答

14

使用"-jar"命令时,只有jar文件中META-INF/MANIFEST.MF文件定义的Class-Path属性才会影响类路径。同时也会忽略MyClass参数(更确切地说:将其解释为在MANIFEST.MF中定义的主类的参数)。

如果你想要从该jar文件中调用一个类,请按照以下方式调用:

java -cp mainprog.jar:/mylib MyClass
// or using this one on windows:
java -cp mainprog.jar;/mylib MyClass

3

在命令行中,您试图将MyClass作为程序运行,根据您的描述,这不是您想要的。

您需要找出用于在jar文件中执行程序的主类是什么。您可以使用jar -xf mainprog.jar解压缩jar文件并查看META-INF/MANIFEST.MF文件。它应该有一个条目,指示jar的主类是什么(我现在记不起来条目的名称了)。

之后,将您的命令行更改为以下内容:

java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接