2015-10-15 66 views
-2

它說,Maven是一個構建工具。它是否像一個IDE?那麼什麼是「建築」?你是什​​麼意思?我不明白Maven是什麼。我已經瞭解了很多,但仍然沒有得到它

假設你想寫一個java代碼。您打開Eclipse,編寫您的類,然後將其導出到JAR文件,並且每個人都使用它。這叫做建築嗎?如果是,那麼爲什麼你需要Maven?

它也說它管理你的依賴關係。那麼如果我正在編寫一個需要依賴關係的類,我應該已經知道它們是什麼,並且不應該導入它們?

請幫助我理解什麼是Maven廣告Eclipse能做些什麼?並且請不要說'這是一個構建工具'

+1

這是一個構建工具,可以管理多種大型依賴樹。 *「如果我正在編寫一個需要依賴關係的類,我應該已經知道它們是什麼了,並且不應該導入它們?」 - 但是如果你沒有寫它? 15年以上的代碼編寫後,我可以告訴你,我不記得我的庫需要的所有依賴關係,或者隨着新版本庫的發佈,管理升級過程。 Maven可以讓你自定義獨立於IDE的構建過程,它可以管理依賴性變化的變化,並且通常讓生活變得更容易 – MadProgrammer

+0

這是一個高度靈活的命令行構建工具。您爲它提供了一堆源文件和一組規則,並且它調用各種程序(編譯器,鏈接器等)將源代碼轉換爲已編譯的工件(罐子,戰爭,耳朵,DLL等)。它還下載依賴關係一經請求。但它仍然是一個構建工具。 – dasblinkenlight

+0

什麼是你的構建工具,什麼是「構建」? – genericMetal

回答

1

根據this complete reference中的What maven is?部分。

的Apache的Maven的更正式的定義:Maven是一個項目管理工具,它包含一個項目的對象模型中,一組標準,一個項目的生命週期中,依賴關係管理系統,以及邏輯,用於在定義的階段執行插件的目標在生命週期中。當您使用Maven時,您使用定義明確的項目對象模型來描述項目,然後Maven可以應用來自一組共享(或自定義)插件的交叉邏輯。

現在這篇文章說一個項目管理工具 ..那是什麼?那麼如果你讀了第一段。

構建工程師和項目經理可能會將Maven稱爲更全面的項目:項目管理工具。有什麼不同?像Ant這樣的構建工具只關注預處理,編譯,打包,測試和分發。諸如Maven之類的項目管理工具提供了構建工具中的功能的超集。除了提供構建功能外,Maven還可以運行報告,生成一個網站,並促進工作團隊成員之間的溝通。

所以是一個項目管理工具,這些都是東西行家能爲你做

  1. 創建項目結構:大多數時候,你可能不知道什麼應該是正確的項目結構。只要選擇一個正確的maven原型,你就可以走了。

  2. 解決依賴:在這裏,我會盡力回答您的恩,如果我正在寫一個需要依賴一個類時,我應該已經知道它們是什麼,並將其導入不應該嗎?不..不是真的!
    你有沒有使用過一個框架,並將其所有必需的罐子AKA依賴項添加到你的calsspath中,這樣你在運行時就沒有編譯錯誤,你得到java.lang.NoClassDefFoundError?一個常見的例子是,當您使用spring時,您還需要commons-logging.jar,但是當您下載spring發行版時,它並未捆綁在一起。大多數情況下,一個依賴依賴於另一個,另一個依賴於另一個。對於開發者來說,不可能讓他們知道所有這些,但是maven會這樣做。所以,如果你使用maven,你絕不會搜索谷歌java.lang.noclassdeffounderror org/slf4j/loggerfactory jar和下載並將其添加到類路徑。使用Maven倉庫


正如在評論中指出,要解決依賴關係是必需的。如果你不添加一個,默認情況下你有maven repository,maven會下載依賴關係。除了中央存儲庫之外,您還在主目錄中擁有本地存儲庫.m2文件夾。因此,如果依賴關係一旦下載並在本地可用,則不會再次下載。
如果您需要您的組織獨享的依賴關係,則需要添加存儲庫url並且當然可以訪問它。

  • 測試:如果你按照一定的標準和編寫單元測試,Maven將自動執行所有的單元測試,並顯示結果。除非所有測試默認都是成功的,否則它不會讓您打包項目。

  • 包裝:Maven將您的項目導出到jar/warear根據項目原型。

  • 部署:Maven也可以爲你做部署。見here

  • 您可以在不需要IDE的情況下使用命令行來完成所有操作。

    但是幾乎每次有IDE時,開箱即用的IDE也支持其中一些任務。好的,使用maven只是爲了依賴管理。我個人覺得它是最好的功能,只是因爲我再也不能經歷NoClassDefFoundError的痛苦,然後在谷歌搜索幾個小時。

    +0

    Maven如何知道地球上每個項目的依賴性,也許依賴關係是谷歌擁有的只有谷歌員工可以使用的JAR文件,Maven如何知道它? Maven有自己的服務器來保存所有這些JAR文件嗎? – genericMetal

    1

    它就像一個IDE?

    不是。 (你可能會聽到惱火的聲音,但是它的Build工具,爲什麼?請看下面的內容)

    那麼什麼是「建築」?

    • 建設帶來的所有工件(類,資源,個XML,jsons等)在一起,並把他們介紹給對方。這樣他們就可以一起工作來實現他們的目標。
    • 另外Maven有一個結構,就像測試類中特定的文件夾,特定文件夾中的測試資源,特定文件夾中的Java源類等等,你可以檢查它。
      這有好處,當我們像jenkins一樣部署我們的項目時,它知道在哪裏可以找到測試類,在哪裏可以找到測試資源,在哪裏可以找到配置文件以及更多的位置。

    當我們在談論巨大的項目時,有很多事情需要配置,沒有內置的工具,這是一個很大的混亂。

    那麼如果我正在寫一個需要依賴關係的類,我應該已經知道它們是什麼並導入它們了嗎?

    假設你有100個罐子的依賴和需要幾天後對其進行更新, 你會去下載每個罐子在線和手動添加到您的代碼。

    此外,您還將與其他會員在您的項目中工作的成員一起分發您的項目。

    那繁瑣......

    與Maven,只需編輯您想要的版本,POM,它會從中央存儲庫下載。否則將其添加到您的本地回購。

    您打開Eclipse,編寫您的類,然後將其導出到JAR文件並且所有人都使用它。這叫做建築嗎?

    是的。

    如果是,那麼爲什麼你需要Maven?

    同樣的理論,你正在用5個自定義罐子開展一個大項目,你在印度,日本和美國都有團隊成員在一起工作。用上述理論,你可以想象你將不得不面對什麼問題。

    我希望你明白了maven的真正含義。

    +0

    Maven如何知道地球上每個項目的依賴關係,也許依賴關係是Google擁有的只有谷歌員工可以使用的JAR文件,Maven如何知道它? Maven有自己的服務器來保存所有這些JAR文件嗎? – genericMetal

    +0

    預計這個問題,是的maven不瞭解自定義罐子,但我們可以告訴他理解它,怎麼樣?檢查此鏈接https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html – VedX

    +0

    @genericMetal我試圖給你一個高級別的Maven理解,即使我開始時感到困惑學習。但是請相信我,它的美麗這個地方太小,不足以解釋。我建議stduying文檔 – VedX

    0

    如果您是來自javascript background,Maven類似於npm。當您使用npm時,npm讀取package.json以下載依賴關係,並在Maven中讀取pom.xml

    相關問題