2009-12-18 58 views
8

我想大多數人會知道,程序員經常重複使用來自其他軟件的代碼。我認爲,大多數時候這是個好主意。但是如果你使用另一個項目的代碼,你的程序依賴於另一個項目。解決Java項目之間依賴關係的最佳方法是什麼?

我目前的情況我有三個Java項目A,B和C.現在A使用B和B使用C.我使用Eclipse IDE並將B添加到A和C的構建路徑以構建B的構建路徑。現在有一個編譯器錯誤,A無法解析C的東西。所以我必須將C添加到B的構建路徑。

那麼解決依賴問題的最佳方法是什麼?其他項目可能嗎?

我想知道的一般是關於我目前的情況。有沒有更好的方法來做到這一點?即在啓動/調試配置視圖中有類路徑設置,但我認爲它們在編譯時不會起作用。

在此先感謝。

+1

不知道爲什麼,這是下調投票,沒有評論在那。這是一個有效的問題,如果有點在新手的左邊。壞的形式。 – 2009-12-18 17:10:27

回答

7

這聽起來像是由Maven修復的問題集的一部分。使用Maven和Eclipse(即m2eclipse),您可以讓項目使用其他項目,併爲您處理所有依賴關係解決方案。

+1

另外,如果您使用IntelliJ IDEA,則內置的Maven集成非常棒。 – danben 2009-12-18 17:03:43

+2

我們對一個大型項目使用maven。我喜歡它,一旦它安裝並正常工作,但是文檔在許多地方很薄弱,並且它可能有一個陡峭的學習曲線。在走上這條道路之前注意這些問題。 – 2009-12-18 17:08:13

+0

如果你想了解更多有關Maven的信息,請從這裏獲取sonatype的免費電子書:http://www.sonatype.com/Support/Books – Kjellski 2012-12-05 14:01:00

2

這聽起來像你正在做的事情,而不需要像Ivy或Maven這樣的依賴管理工具,它提供了「傳遞依賴管理」的能力。使用這些工具中的任何一個,您都可以指定A取決於B,而B取決於C,並且他們會自動知道A也需要C。

Maven的優點(這是我的經驗)也適用於打包部署項目的時間,因爲它可以輕鬆地收集所有這些依賴關係(一直沿着層次結構),並將它們放置一起放入包含所有依賴關係的分發文件夾或胖JAR中。這需要一些閱讀和設置時間才能進入像Maven這樣的工具,但它確實使得管理依賴關係的任務變得更加容易,尤其是在它們成長的時候。

0

依賴管理是一個巨大的話題。 Maven,Ivy和其他工具已經開發出來,以減輕痛苦並取得一些成功。這兩種工具都會創建依賴關係層次結構,因此您不會遇到您所描述的情況。他們也有Eclipse插件,以便Eclipse可以識別該層次結構。

要真正使用這些框架,您必須更改當前的構建過程。 Maven可能需要比常春藤更多的承諾,但都不是微不足道的,理解如何設置它需要一些時間。也就是說,明確定義和管理您的依賴關係非常有用。

1

我們使用Maven,它對我們的項目非常重要。現在是你學習的好時機 - 對3個以上項目的依賴會令人恐懼。 Maven處理版本,因此無論出於何種原因,如果您必須依賴Foo.1.2.3,那麼Maven將確保您不會得到錯誤的版本。

然而這並不是微不足道的。如果你使用Netbeans,它的構建要比Eclipse好,並且可以幫助你學習。 (這兩個系統之間的項目也是相當可切換的)。

Maven在其POM(pom.xml)文件中支持許多概念,包括許可證信息,貢獻者,參數等,因此您獲得的不僅僅是依賴關係管理。它支持項目的模塊化。

不要跳過學習曲線 - 你需要知道它是如何工作的。但你也會發現以前的問題,這將有助於

1

其他人已經提到了幾個很好的工具,maven可能是最常見的。常春藤是另一種更偏向於依賴管理的產品。我個人使用gradle,它具有熟悉的groovy包裝下的所有這些特性中的一些...這仍然在不斷演變和記錄下來。 ;)

有一點需要注意的是這些工具如何處理傳遞依賴。在你的例子中,C是A的傳遞依賴關係,因爲A依賴於依賴於C的B。這些構建工具中的一些將以不同方式處理這種類型的依賴關係,當你最不期待它時,它可能會讓你大吃一驚。例如,如果A實際引用C中的代碼,即:它對C有編譯時間依賴性,那麼你的A-> B-> C安裝程序可以像Maven那樣工作。另一方面,Gradle也會讓你聲明A依賴於C ...因爲它的確如此。運行時依賴關係可以完全解決。

當你已經將某些東西包含了幾個月並且你的某些代碼依賴於C的某些方面,並且你決定不再需要一個B依賴時,你會感到意外。突然你的代碼不會建立,直到你發現你需要一個指定的A-> C依賴。在這個例子中,這個發現非常微不足道,但有時並非如此。

如果這樣說話會讓你的頭腦遊得很少,而且你不打算讓自己的項目變得複雜得多......那麼你可以堅持一下你在做什麼。正如其他人所說,這是在沒有工具幫助你的情況下做到的正確方法。

1

使用maven來管理您的依賴關係,然後使用依賴關係插件查看依賴關係。

可以運行

MVN依賴性:分析

MVN依賴性:樹-Dverbose =真

這將幫助你很多。

1

毫無疑問,您應該使用依賴管理工具,因爲人們已經注意到...手動,但在B_C.jar中存檔B和C.測試B對C的依賴在Jar中解決。

然後加入B_C.jar在classpath ...

相關問題