我想了解瓶和包如何在Java工作。爲此,我創建了一個簡單的測試JAR,並試圖使用該jar中包含的類。很簡單,但它給我錯誤,如「未找到類」。這裏的設置:瞭解JAR和包在Java中
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!");
}
}
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());
}
}
3)向打包JAR內的MyHelloWorld類,我在當前目錄中創建的文件夾com/mytest
,並移動MyHelloWorld.java到該文件夾
4)我使用javac MyHelloWorld.java
5)我跑jar -cf myhello.jar ./com/mytest/*.class
從根文件夾來創建JAR文件(如在http://www.javacoffeebreak.com/faq/faq0028.html描述)
6)我複製HelloHello.java該文件夾中編譯MyHelloWorld.java和myhello.jar與任何東西的一個新文件夾,來測試這種設置
7)javac -cp ./*.jar HelloHello.java
[成功]
8)java -cp ./*.jar HelloHello
[錯誤](我也試過只是'的Java的HelloWorld」,WHI CH失敗過,有不同的錯誤消息)
最後這句話失敗消息:
$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)
任何想法,爲什麼它的失敗?您可以提供有關它爲何以這種方式工作的任何見解,以及如何在JAR等內定義程序包名稱。
是否有使用IDE的選項,以便您不必處理所有這些問題? – 2011-03-16 00:37:22
這是我的理解更多,但沒有,沒有真正計劃使用IDE ... – mindthief 2011-03-16 00:53:24