[英]Using a jar in a Java project?
我正在嘗試使用項目中的公共方法/類,該項目是作為jar文件(例如,稱為Hello.jar)包裝在稱為hello的程序包中的。
package hello;
public class Hello
{
public static void main(String[] args)
{
coucou();
}
public static void coucou()
{
System.out.println("Hello there");
}
}
在一個名為Tool的單獨項目中,我希望能夠調用方法Hello.coucou()
因此我編寫了以下內容:
import hello.*;
public class Tool
{
public static void main(String[] args)
{
System.out.println("main program running");
Hello.coucou();
}
}
然后使用以下命令(在Linux下)編譯Tool.java:
$ javac Tool.java -classpath .:./extern/:
Hello.jar在文件夾./extern
這似乎編譯良好,但是當我啟動它(即java工具)時,我得到了:
main program running
Exception in thread "main" java.lang.NoClassDefFoundError: hello/Hello
at Tool.main(Tool.java:9)
Caused by: java.lang.ClassNotFoundException: hello.Hello
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
... 1 more
我是Java的新手(C / C ++背景),但我不明白自己在做什么錯。 有任何想法嗎?
干杯大衛
編輯:我嘗試將Hello.jar添加到命令行上的類路徑,但是我仍然遇到相同的錯誤:
$ javac Tool.java -classpath .:./extern/Hello.jar:
$ java Tool -classpath .:./extern/Hello.jar:
main program running
Exception in thread "main" java.lang.NoClassDefFoundError: hello/Hello
at Tool.main(Tool.java:9)
Caused by: java.lang.ClassNotFoundException: hello.Hello
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
... 1 more
在運行以及編譯時,都需要在類路徑上輸入Hello.jar。
實際上,竅門是按照命令行中參數的順序進行的:
是最后設置了-cp(或-classpath),則它不起作用
java Tool -cp .:extern/Hello.jar
首先必須是:
java -cp .:extern/Hello.jar Tool
!!!
運行Java時,還必須添加jar文件(僅添加目錄路徑無效)。
請參閱類路徑信息。
應該是這樣的:
java -classpath /java/MyClasses/myclasses.jar utility.myapp.Cool
Java使用動態后期綁定,因此僅在確保編譯代碼正確使用其中的類時才需要將JAR放在類路徑中,但實際上並沒有像C / C ++中的鏈接程序那樣將它們嵌入到您的代碼中。 因此,在執行代碼時還需要設置類路徑。
但是,這:
$ javac Tool.java -classpath .:./extern/:
也不應該工作,因為JAR需要直接放入類路徑中,而不僅僅是它們所在的目錄:
$ javac Tool.java -classpath .:./extern/Hello.jar
最后,您將代碼放入默認的無名程序包中。 可以無所事事,但是從長遠來看會引起問題(一方面,您不能從其他任何地方的默認包中導入類)。
啟動它時,還需要在類路徑中包括Hello.jar文件。
java -cp xxx.jar hello其中xxx是要在類路徑中包含的jar,如果要多個jar,則使用;將它們分開;
卡爾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.