2016-03-01 52 views
-2

我習慣於像composer和npm和bower這樣的工具,我需要集中式存儲庫中的依賴項。 (對於紅寶石有捆綁器,python有點。)如何在Java中要求依賴關係?

目前,雖然我正在使用jar文件,並設置它們的過程似乎令人震驚。我必須下載它們,在項目中設置它們(我正在使用IntelliJ IDEA,但它將類似於eclipse或netbeans)。

我正在尋找一種方法來說只需要「版本y的庫x」,並有命令來安裝和更新它們。

看來,maven或gradle做了一些工作,但我有點困惑,因爲他們被描述爲構建工具。

我不想build我的應用程序,我只是緩解依賴管理,所以不要依賴一些donwloaded的jar文件。

是否存在這樣的集中式存儲庫?什麼是事實標準? (大多數人都使用它,即作曲家已經讓梨過時了),我將如何設置它?

什麼更適合管理依賴關係,我該怎麼做?

+0

這個問題要麼太寬泛,要麼尋找外部指針(文檔,教程)或基於觀點(你甚至可以只使用Ivy而不是maven),在這三種情況中的任何一種情況下,都可以關閉 –

+2

與JavaScript相反,你需要編譯和構建Java應用程序,這是在同一工具中構建和依賴管理的一個很好的理由。與大多數IDE的集成是好的(或足夠好的),所以它甚至不妨礙。 –

回答

2

讓我們開始用簡單的問題:是的,有一箇中央儲存庫,(幾乎)都可以發現:http://search.maven.org/ 一些公司舉辦自己的倉庫,除了這一點。例如JBoss。如果你想自己託管一些開源軟件,還有Sonatype repository

respository是一個簡單的文件結構,其中包含jar文件和一些xml元數據。佈局來自maven世界,但幾乎所有的java編譯系統都有一些方法可以從maven central檢索工件。

整個依賴關係的解析與你在npm中所知道的有所不同。你所依賴的每個軟件包都有自己的依賴關係。其中一些可能會發生衝突。在Java世界中,這些傳遞依賴需要被匹配 - 一個普通版本需要被識別。這通常由構建系統完成。所以你的「require」是一個依賴關係,這意味着jar會在類路徑中結束,因此這些類將可用於你的代碼。開箱即用的過程中沒有動態變化(在啓動jvm後將jar添加到類路徑中)。

依賴關係在pom.xml中配置(如果使用maven)build.gradle文件(你應該走向gradle)。還有sbt或Ivy + Ant。

通常您的工件解析系統也會運行構建。這是有道理的,因爲你需要定義類路徑來編譯你的java源文件。如果您只是使用這些工具來複制這些jar文件,您仍然需要找到一種方法將所有這些文件傳遞給編譯器。在第三個依賴之後,這是無聊的。

Maven來自約定而不是配置部分。請參閱5 Minute tutorial。 Intellij集成非常好。

Gradle使用Groovy(一種基於Java vm的腳本語言)來實現類似的目標,但對所發生的事情更加開放。但是這使得IDE和IDE的集成變得更加困難 - 這取決於你的構建有多創意。 gradle user guide是一個很好的開始。

還有螞蟻+常春藤。 Ant是一個簡單的構建系統,可以在其中定義任務。常春藤爲它增加了依賴性解決方案。

從來沒有提到過:sbt(主要來自Scala世界)或leiningen(主要是clojure) - 所有基於JVM的語言。

我的建議是maven - 它需要一個簡單的pom.xml,您可以在其中添加依賴關係 - 如果您遵循其目錄結構約定(這在java世界中很常見),編譯將會不再使用。而且大多數IDE都會工作。如果你的構建需要更復雜的構建步驟,gradle會有一個良好的遷移路徑。

上述5分鐘教程使用原型(maven中的項目模板)來幫助您入門。如果你已經這樣做了,你應該能夠在IntelliJ中打開該文件夾並從那裏繼續。

0

是的,有這樣一個集中的存儲庫(Maven Central)。使用Maven

Apache Maven是一個軟件項目管理和理解工具。 基於項目對象模型(POM)的概念,Maven可以管理 一個項目的構建,報告和文檔從一箇中心塊的 信息。

0

Maven確實如此。它是一個完整的構建工具,依賴管理是其中的一個部分。 maven使用中央倉庫,你可以擁有自己的倉庫或者使用任何倉庫。

0

我不想構建我的申請,我只是緩解依賴性管理,所以不依賴於一些donwloaded jar文件。

最終你會想要構建你的應用程序,爲什麼不使用支持依賴管理的構建系統呢?還有純粹的依賴管理器(例如Apache Ivy),但爲什麼不使用完全成熟的構建工具來使集成更容易?

是否存在這樣的集中式存儲庫?什麼是事實標準? (大多數人都使用它,即作曲家已經讓梨過時了),我將如何設置它?

有幾個集中的倉庫中,最常見的是Maven Central

什麼是更適合管理依賴,我將如何做到這一點的呢?

您可以使用任何適合您需求並支持此功能的構建工具。其中3個是Maven,Apache Ivy和Gradle。只需選擇一個並閱讀其文檔。