2011-09-14 30 views
0

我有一個包含一個類的Java包,我試圖在windows CMD中編譯。在windows下編譯一個java程序包CMD

這裏的文件夾結構:

Folder structure

.\src\包含包。我正在嘗試編譯AggregationEngine包內的類。該類稱爲testClass.java,它使用twitter4j庫。在twitter4j庫的jar文件包含在.\src\lib\目錄twitter4j-core-2.2.4.jar

我試過如下:

javac -classpath "..\lib\twitter4j-core-2.2.4.jar" -sourcepath C:\x\x\x\src\AggregationEngine\ AggregationEngine\TwitterCrawler.java 

java AggregationEngine.testClass "test String" 

pause 

,但它似乎並沒有工作。我對上述有基本的瞭解。我甚至不確定上述是否是正確的方法。

注意:我不想進入環境變量定義方法,因爲我會在不同的操作系統上執行相同的操作。哦,我也可能包含多個.jar文件。

- 編輯 - 輸出:運行應用程序時。 java AggregationEngine.TwitterCrawler

Exception in thread "main" java.lang.NoClassDefFoundError: twitter4j/TwitterException 
Caused by: java.lang.ClassNotFoundException: twitter4j.TwitterException 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 

有什麼建議嗎?

+0

究竟是什麼意思「似乎沒有工作」?你有編譯器錯誤嗎?沒有?惡魔是否會開始從你的鼻子飛出來? –

回答

2

解釋你的問題很簡單,就是twitter4j JAR丟失時做的最簡單的方法你嘗試執行你的程序。編譯器只使用類路徑條目來驗證代碼的正確性,它不會將它們包含在其輸出中。

這應該工作:

java -classpath .;..\lib\twitter4j-core-2.2.4.jar AggregationEngine.testClass "test String" 
+0

現在我得到以下內容:'線程中的異常「main」java.lang.NoClassDefFoundError:AggregationEngine/TwitterCrawler 由於:java.lang.ClassNotFoundException:AggregationEngine.TwitterCrawler at java.net.URLClassLoader $ 1.run(Unknown Source) 在java.security.AccessController.doPrivileged(本機方法) 在java.net.URLClassLoader.findClass(來源不明) 在java.lang.ClassLoader.loadClass(來源不明) 在sun.misc.Launcher $ AppClassLoader.loadClass (未知來源) 程序將退出。「任何想法? – Bassem

+0

@Link:是「testClass」是TwitterCrawler的代表嗎?或者兩者都存在?你是否編譯過兩個文件,即每個文件是否有.class文件?可能你所要做的就是將當前目錄添加到類路徑中 - 我將更改答案以反映此問題。 –

+0

完美。它現在有效。謝謝 :) – Bassem

0

我知道這是太舊了,但對於那些像我一樣 - ClassNotFound的對TwitterException問題是由包括自twitter4j核心項目的log4j,SLF4J和共享記錄罐子解決使用它們。