2010-04-10 133 views
1

我是Java(和Eclipse)的新手,但我已經使用了.NET(和Visual Studio)。我也知道編譯C/C++代碼和類似的東西。我知道最後我得到了一個EXE或者一個可以從命令行運行的很好的二進制文件。部署Java應用程序。怎麼樣?

我一直在使用一些外部庫的Java實用程序。我需要編譯成一個可執行文件,我可以從unix機器上的命令行運行,但我找不到任何方法來執行此操作。

我可以在Eclipse中構建和運行/調試,但這對我來說沒用,因爲此代碼將在Web服務器上運行。我只需要將所有依賴項編譯到一個文件中,但在谷歌上搜索幾個小時後,我能找到的最好的東西就是Eclipse的Fat-JAR插件,並且在使用該插件後,當我嘗試運行文件時出現以下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: Network/jar 

這讓人有些困惑我,因爲它是這樣一個重要的事情可以做,我相信我一定是失去了一些東西言自明,但正如我所說,搜索我已經變得無處小時後。

我真的很感謝你能給我的任何幫助。謝謝。

+1

你上面的問題是一個類路徑問題。學習java的大多數時候,你會偶然發現類路徑。讓一個行業標準工具爲您管理。看到我的文章下面關於Maven。遵循約定,這真的很好。當你不是時真的很沮喪。在你的情況下,它應該讓生活更輕鬆。 – gMale 2010-04-10 19:01:39

回答

0

如果您使用Maven(可以使用每個主要IDE完成)構建您的java應用程序,那麼您可以使用maven Shade Plugin來構建帶陰影的jar文件;這是一個包含所有依賴關係的jar文件。

的陰影罐子可以在命令行這樣運行:

java -jar myjar.jar command line options 
+0

謝謝。我用Fat-JAR構建了jar,所以依賴關係在裏面。我猜測-jar選項告訴java這是事實。這工作完美。謝謝! – danpalmer 2010-04-10 19:22:30

+0

這只是顯示了我對Java的瞭解。語言看起來很簡單,但讓它成爲複雜的一點。 – danpalmer 2010-04-10 19:31:00

0

你正在做一些標準的事情,你正在使用eclipse。這意味着,就你而言,Maven是你的朋友。下載並安裝M2Eclipse plug-in。 Maven最擅長管理依賴關係。因此,創建一個包含依賴關係的jar將非常非常直接。網絡和StackOverflow中有數千個示例。如果您在設置時遇到問題,請對此進行評論,我可以指出您的方向是正確的。

0

聽起來像您的服務器上的類路徑需要修改,以拿起包含網絡類的jar文件。你如何執行你的程序?你把什麼路徑放在-cp選項中?

如果你不確定如何找到jar文件中的內容,運行jar tf,這將列出打包的類。驗證您的CLASSPATH中的其中一個jar具有缺少的那個類。

給我們更多的細節,我們可以幫助解決它。

+0

我不認爲我需要設置類路徑,因爲依賴關係都被編譯到jar中。 – danpalmer 2010-04-10 19:23:43

+0

好吧,如果你有他們靜態鏈接,那麼你不應該設置類路徑。我不知道你是如何運行命令來執行你的程序。看起來你錯過了-jar選項。 – CoolBeans 2010-04-10 19:48:18

0

我想我應該先解釋一些基本知識。如果Java類有一個public static void main(String[] args)方法,則它可以作爲應用程序運行。如果有這種方法,您可以從命令行運行它:

java my.package.MyClass <attributes> 

之前啓動您的應用,你需要確保所有必需的.jar文件(和你自己的類文件夾的根目錄,如果你沒有從你的課堂上打個罐子)都在CLASSPATH環境變量中。

這些是絕對的基礎知識。當您構建更復雜的應用程序或分發應用程序時,您可能會使用maven或ant或其他工具來讓您的生活更輕鬆。