2012-02-07 68 views
1

我的問題是:從java程序在JAR中執行java類

我有一個test.java類,它是主類。 JAR文件中還有一個類(非主類)。現在我想從JAR之外的主類中編譯並執行JAR中的演示類。請解釋如何。

public class test 
{ 
public static void main(String args[]) 
{ 
    demo d1 = new demo(); 
    demo d2 = new demo("message passed from main class"); 
} 
} 

public class demo 
{ 
demo()} 
System.out.println("message in demo class"); 
} 
demo(String str) 
{ 
System.out.println(str); 
}} 
+2

*設計「請解釋。」 *請解釋爲什麼*** *** – 2012-02-07 05:01:09

+0

只是一個字,你的類應該總是開始?與人均信,所以公共類測試,公共類演示 – david99world 2012-02-07 08:43:21

回答

0

我想正確的答案我們 '用蟻族',而是:

javac test.java 
javac demo.java 
jar cf test.jar test.class demo.class 
jar ufe test.jar test 

然後,

java -jar test.jar 

如果你打算擴展這一點,並繼續不使用ant,你可能希望你的編譯系統停止一個錯誤,並且會我注意到'javac'在錯誤時不會返回非零值。將其stderr管理到一個臨時文件,然後根據grep的非零返回該文件退出。例如,從不能使用ant的設備上構建腳本:

cd src 
for F in R.java Maze.java EmptyActivity.java; do 
    javac -d ../build/classes $P/$F 2> ~/tmp/javac.out 
    echo -en "\033[1m"; cat ~/tmp/javac.out; echo -en "\033[0m" 
    grep error ~/tmp/javac.out && exit 
done 
cd .. 
2

看一看這樣的:Packaging Programs in JAR Files

一旦你有兩個主類和JAR文件準備好了,你可以簡單地用類路徑的JAR文件運行的主類和J​​ava會發現它。假設demo類是在demo.jar和你的主類是test(如你的例子):

java -cp demo.jar test 
+0

這是一個TYPO。我已將其更正爲JAR。 – goyalshub1509 2012-02-07 04:40:43

+0

@ user1193815:我已經更新了我的答案。 – casablanca 2012-02-07 04:45:57

+0

它在線程主要給出一個異常說異常。 java.lang.Noclassdeffounderror:TEST。 – goyalshub1509 2012-02-07 04:55:36

0

簡單,如果你想使用任何class in java然後,因爲當你運行你的程序的類必須存在於class-path 然後需要所有class一直在尋找在class path ...
所以,你必須設置你的demo.jar
類路徑有沒有辦法來設置類路徑來看看這個How set class path

或者乾脆你可以做的另一種選擇使用java參數-cp

java -cp /your jar path/demo.jar test