Maven 項目管理從未如此通暢

一,寫在前面java

  Maven究竟是什麼?它能作些什麼?能爲咱們的開發工做提供什麼樣的幫助?爲何會有如此大的知名度?另外,常聽大廠的人說「私服」,工具管理吧啦吧啦的一堆也是不明覺厲。相信仁者見仁,着智者見智了。鄙人不才,整理了一下以前的筆記,與諸君分享,值當飯後茶點,歡迎指點。web

 

二,場景模擬數據庫

  情景一:平常開發中,好比作數據庫操做,我須要引入諸如一下的jar包:apache

    

  程序編譯的時候,各類陰差陽錯,會出現「ClassNotFoundException」,何解?惟有各類排查,也是比較鬧心卻也司空見慣了。api

  情景二:有過.net開發的人知道,好比,常常出現膈應的Newtonsoft.Json找不到的尷尬,此時只能從Nuget從新獲取,或者從別處引用,那麼會引發情景三。緩存

  情景三:如今的開發工做分模塊,分功能,分業務,分流程等的開發模式,程序猿A在一處引入某jar包,程序猿B在另出引入該jar包,這樣會形成代碼的混亂和冗餘。安全

  情景四:我如今開發兩個java項目A和B,其中項目A中的一些功能依賴於項目B中的某些類,也就是說項目A的運行,必須靠引入項目B打包後的jar文件才能執行。若是,項目B出現bug,那麼A必須從新引入新的B的jar包。假設已是線上項目,會不會顯得被動了呢?!架構

 

總結,手動的添加刪除jar包,而引起各類「血案」。maven

 

三,說說Mavenide

  什麼是架構?一個項目的總體架構的健全性,爲項目的基本功能,規定了類和對象如何建立,如何協做,提供必要的支持性工做。

  關於Maven,看看百度百科的說法

   

  不過,我仍是喜歡網上有位大神總結「Maven的核心功能就是合理敘述項目間的依賴關係」。通俗的說,就是經過pom.xml文件的配置獲取jar包,而再也不是手動添加jar包。其次,提供一個標準,配置文件不在雜亂無章,單元測試再也不哪哪都是。

  全部的Maven項目都包含着一個pom.xml,在這裏記錄着的<groupId><artifactId><version>等字段,這些字段在建立Maven項目時填寫,後期也能夠手動更改,Maven會依據它們來定位到該項目,進而完成jar的自動指引。

   Maven主要作兩件事:

      統一管理jar包

      統一開發規範於工具

 

四,說說pom.xml

  pom.xml,這是Maven的核心配置文件,pom全稱Project Object Model(項目對象模型),它描述的是整個Maven項目,或者說是Maven的描述文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>


    <groupId>com</groupId>

    <artifactId>crm</artifactId>

    <version>1.0-SNAPSHOT</version>

<dependencies>
  <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>RELEASE</version>

  </dependency>
</dependencies>

</project>

  說說這幾個關鍵詞

  1。groupId

   公司或組織的名稱。通常groupId由三部分組成「[項目用途].[公司名].[項目名]」,好比com.alibaba.taobao

  2。artifactId

    項目名

  3。version

    所須要jar的版本。SNAPSHOT意爲快照,說明該項目在開發中。

  以上三個元素,是Maven項目的基本座標,很是厚重要。

  4。packing

    項目打包的類型,包括jar,war,rar,pom,ear,默認是jar

  5。dependencies和dependency

    簡單的說,這裏存放咱們開發所須要的jar包。好比,上面的junit,表示我測試單元所引入的jar包。再如,Maven項目中提示找不到javax.sevlet.api,會經過在這裏添加依賴:

<dependency>

  <groupId>javax.servlet</groupId>

  <artifactId>javax.servlet-api</artifactId>

  <version>3.1.0</version>

  <scope>provided</scope>

</dependency>

 6。properties

    主要用來定義一些配置的屬性,好比編碼方式等

  7。build

    表示與構建相關的配置

<build>

    <plugins>

        <plugin>

            <groupId>org.mortbay.jetty</groupId>

            <artifactId>maven-jetty-plugin</artifactId>

            <version>6.1.7</version>

            <configuration>

                <connectors>

                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">

                        <port>8888</port>

                        <maxIdleTime>30000</maxIdleTime>

                    </connector>

                </connectors>

                <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}

                </webAppSourceDirectory>

                <contextPath>/</contextPath>

            </configuration>

        </plugin>

    </plugins>

</build>

 

五,Maven的倉庫

  經過上面的pom.xml中配置,就能獲得我開發中所須要的jar包,那麼問題來了,這些jar在哪裏,而我又怎麼拿到呢?

  這就引入了Maven倉庫的概念。

  Maven倉庫分三種:本地倉庫,第三方倉庫(私服),中央倉庫。

  1.本地倉庫

    Maven項目建立後,在本地會有一個目錄,在這裏存放着幾乎我所能用到的全部jar包,默認地址:$user.home/.m2/repository(我用mbp,cd usr/[電腦名]/.m2/ repository )。我也能夠修改默認地址,經過Maven目錄下conf/setting.xml,修改localRepository字段就行。

  2.第三方倉庫

    又稱內部中心倉庫,也叫私服。

    通常由公司內部設立,只爲本公司內部共享使用。它既能夠做爲公司內部構件協做和存檔,也能夠做爲公用類庫鏡像緩存,減小外部訪問和下載的頻率。因此,對私服安全性問題要求很是的嚴格,須要單獨配置,否則不能使用。

  3.中央倉庫

    Maven內置了遠程公用倉庫,http://repo1.maven.org/maven2

    這是由Maven團隊維護,裏面大約有1億個經常使用類庫,包括了市面大部分開源項目的構件,任你挑選。

  總結,Maven項目獲取jar包的過程

   

  優先會從本地倉庫查找jar包,若是沒有,可是配置了私服,就會請求私服,從私服裏獲取jar,若是沒有,就會從中央倉庫裏獲取,直到找到對應jar包,而後下載到本地倉庫,以便下次使用。若是沒有私服,就直接去中央倉庫獲取。

  

  先說這麼多,後續再補。

相關文章
相關標籤/搜索