设置Java类路径以加载类文件 [英] Setting Java Classpath to Load a Class File

查看:266
本文介绍了设置Java类路径以加载类文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆