我试图了解jar和jar如何在Java中工作.所以为了做到这一点,我创建了一个简单的测试JAR,并尝试使用该jar中包含的类.很简单,但它给我的错误,如"找不到课".这是设置:
1)我有一个名为MyHelloWorld.java的文件,它将打包在一个JAR中:
package com.mytest;
public class MyHelloWorld {
public String getHello() {
return "Hello";
}
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
2)我有另一个名为'HelloHello.java'的文件,该文件使用getHello()com.mytest.MyHelloWorld中的函数
import com.mytest.*;
public class HelloHello {
public static void main (String[] args) {
MyHelloWorld hello = new MyHelloWorld();
System.out.println(hello.getHello());
}
}
Run Code Online (Sandbox Code Playgroud)
3)要将MyHelloWorld类打包到JAR中,我com/mytest在当前目录中创建了文件夹,并将MyHelloWorld.java移动到该文件夹
4)我在该文件夹中编译了MyHelloWorld.java javac MyHelloWorld.java
5)我jar -cf myhello.jar ./com/mytest/*.class从根文件夹运行以创建JAR文件(如http://www.javacoffeebreak.com/faq/faq0028.html中所述)
6)我将HelloHello.java和myhello.jar复制到一个没有其他内容的新文件夹中,以测试此设置
7)javac -cp ./*.jar HelloHello.java[成功]
8)java -cp ./*.jar HelloHello[FAILS](我也尝试过`java HelloWorld',它也失败了,带有不同的错误信息)
最后一条语句失败并显示以下消息:
$java -cp ./*.jar HelloHello
Exception in thread "main" java.lang.NoClassDefFoundError: HelloHello
Caused by: java.lang.ClassNotFoundException: HelloHello
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
Run Code Online (Sandbox Code Playgroud)
知道为什么会失败吗?您可以提供有关它为什么以这种方式工作的任何见解,以及如何在JAR等中定义包名称也将受到赞赏!
我相信它正在查找你的HelloHello类的jar.您可能也需要类路径上的当前文件夹.
java -cp .:myhello.jar HelloHello
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3245 次 |
| 最近记录: |