2012-05-01 39 views
1

因此,我對Java,特別是Eclipse相當陌生,所以請原諒我的無知。我從一臺服務器上取了一個項目並將它複製到本地機器上。當我打開工作空間時,由於無法找到罐子,我有很多錯誤。這是有道理的,因爲我沒有與從我複製的服務器相同的目錄結構。因此,如果我將同一個外部jar複製到我的機器並將它編譯成jar並將其複製回服務器,它是否可以工作?或者它會失敗,因爲現在外部的罐子在一個不同的地方,而不是它所期待的?瞭解Eclipse中的外部罐區

另外,在路上我應該把外部瓶子放到普通的罐子裏以避免這個問題?

+0

因此,經過更多的研究,看起來他們正在使用包含外部JAR的用戶庫。如果可以,我可以更改用戶庫的Jars指向我的本地副本的路徑,然後我能夠將我的可執行JAR複製回服務器而無需更改其他任何東西?感謝所有的答覆。 – tacotime

回答

2

你應該沒問題。 Java使用所謂的類路徑來定位依賴關係。類路徑在開發機器上可能是不同的,但只要所有的依賴關係在生產環境中的類路徑上,一切都應該起作用。

爲了避免目錄結構同步的問題,最常用的方法是使用Maven - 它會管理你的所有依賴(但你必須管理pom.xml - Maven的項目描述符)。有點笨拙的方法是在項目中擁有依賴關係,但是最終可能會有許多項目必須包含相同的jar包,然後會出現版本衝突等問題。

對於小型項目,您可以自行管理依賴關係,但是較大的項目需要通過策略進行更多思考(如Maven)。

關於可執行文件夾,請確保< jarfile>:\ META-INF \ MANIFEST.MF中的Class-Path條目是正確的,例如,在參考其他罐子的地方,那些罐子將在生產中出現在那裏。例如,假設我們有ourjar.jar並認爲這是從它的MANIFEST.MF一個片段:

Class-Path: lib/myteamjar.jar 

那麼這將是預計將有以下目錄結構是否到位:

lib/myteamjar.jar 
ourjar.jar 
+0

謝謝您的回覆。我張貼了更多信息。我一定會在將來看Maven,聽起來像是一個有用的工具,但現在我需要時間。 – tacotime

+0

我在上面的答案中添加了更多信息。我建議你改變用戶庫路徑,生成你的jar文件,檢查清單是否正確。然後你會確定的。 – maksimov

+0

當我查看當前JAR的manifest.mf時,它沒有類路徑條目,它只是說:Manifest-Version:1.0 – tacotime

0

沒有,外部罐子的位置不重要。你想要做的是把外部的瓶子放在你的類路徑中。你怎麼做取決於你如何運行你的java代碼。如果使用命令java從CLI運行它,它將類路徑作爲參數。如果你想讓你的代碼在Eclipse中構建/運行,你需要右鍵點擊你的項目,選擇「Build Path」>「Configure Build Path ...」。使用「Add JARs ...」按鈕來添加那些是你已經打開的一個項目的一部分和「添加外部JAR ...」來添加駐留在項目之外的jar。有關類路徑的更多詳細信息,請參閱您的工具的具體文檔。

0

我不會推薦Maven給那些對Java和Eclipse相當陌生的人。我也會忘記Eclipse。

您有一個包裝和CLASSPATH問題。專注於此。

你在說什麼類型的項目?您得到的答案將取決於您創建的應用程序類型。它是一個可執行的JAR嗎?然後,正確的做法是將所有內容打包到一個ZIP文件中,該文件與JAR清單中的CLASSPATH所預期的完全一致。

如果它是一個Web應用程序,那麼正確的是一個WAR文件,在您的應用程序需要的所有JAR文件在WEB-INF/lib目錄中。

如果你正確包裝的東西,你應該結束了一個包裝,所有的東西都擺在正確的位置。您應該能夠將其部署到服務器並使其工作。

+0

這是一個可執行的JAR。我上面發佈的是使用包含外部JAR的用戶庫,因爲它們位於不同的位置,所以無法找到它們。如果我在我的機器上重新創建(或更改了用戶庫的路徑)並創建可執行JAR,那麼當我將其複製回原始服務器時,它聽起來像可能起作用? – tacotime

+0

您必須將第三方JAR與您一起打包並將其部署到服務器上。我的建議是將所有這些文件放到一個單一的目錄中,ZIP,然後讓類路徑指向它們所在的目錄。設置一個運行JAR並設置CLASSPATH的腳本,你將不會問題。 – duffymo