设置Java类路径以加载类文件 [英] Setting Java Classpath to Load a Class File
问题描述
我是Java新手,我不确定如何从单独的程序jar中访问位于特定目录中的类文件。
例如,我在/中有一个第三方jar文件,该文件应该加载/mylib/MyClass.class中的MyClass,所以我尝试运行:
java -jar mainprog.jar -classpath / mylib MyClass
但是我m收到错误:
线程 main中的异常java.lang.NoClassDefFoundError:MyClass
原因:java .lang.ClassNotFoundException:MyClass
在java.net.URLClassLoader $ 1.run(URLClassLoader.java:221)
在java.security.AccessController.doPrivileged(本机方法)
在java.net .URLClassLoader.findClass(URLClassLoader.java:209)
在java.lang.ClassLoader.loadClass(ClassLoader.java:324)
在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294 )
在java.lang.ClassLoader.loadClass(ClassL oader.java:269)
,位于java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337)
我在做什么错了?
使用-jar > code>,然后 only 在
META-INF / MANIFEST.MF 中定义的
Class-Path
属性。 jar
文件中的code>文件将影响类路径。
它还将忽略 MyClass
参数(或更具体地说:将其解释为 MANIFEST.MF
中定义的主类的参数)。 / p>
如果您只想从该jar中调用类,则可以这样调用:
java -cp mainprog.jar:/ mylib MyClass
// //或在Windows上使用它:
java -cp mainprog.jar; / mylib MyClass
I'm new to Java, and I'm unsure how to access a class file located in a specific directory from a separate program jar.
For example, I have an third party jar file located in /, which is supposed to load MyClass located in /mylib/MyClass.class, so I tried running:
java -jar mainprog.jar -classpath "/mylib" MyClass
but I'm getting the error:
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)
What am I doing wrong?
When you use "-jar"
then only the Class-Path
attribute defined in the META-INF/MANIFEST.MF
file inside the jar
file will influence the classpath.
It will also ignore the MyClass
argument (or more specifically: interpret it as an argument to the main-class defined in the MANIFEST.MF
).
If you simply want to call a class from that jar call it like this:
java -cp mainprog.jar:/mylib MyClass
// or using this one on windows:
java -cp mainprog.jar;/mylib MyClass
这篇关于设置Java类路径以加载类文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!