Maven學習筆記(1) --- 倉庫

maven坐標

maven的構件(jar包)是根據坐標來確定其在倉庫的保存位置的。
maven的坐標是通過以下元素來定義的:

  • groupId : 一般是當前項目的公司名和項目組
  • artifactId : 項目名稱
  • version : 項目版本
  • packaging : 打包方式,默認是jar,也可以是war
  • classifier : 定義構建輸出的一些附屬構件,不常用

形如

<groupId>com.company.group</groupId>
<artifactId>MyApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>

maven倉庫

顧名思義,倉庫就是存放依賴(jar包)的地方。
maven倉庫分為本地倉庫,中央倉庫,遠程倉庫,和私服4種。

本地倉庫

通俗的說,本地倉庫就是我們本地電腦中的一個文件夾,用來存放jar包的倉庫。
本地倉庫的默認位置:無論是Windows還是Linux,在用戶的目錄下都有一個.m2/repository/的倉庫目錄。
可通過修改maven安裝目錄下的settings.xml文件來修改本地倉庫位置。

<settings>
    <localRepository>D:\repo</localRepository>
</settings>

中央倉庫

中央倉庫是默認的遠程倉庫,它包含了絕大多數流行的開源Java構件,以及源碼、作者信息、SCM、信息、許可證信息等。id是central,url地址是http://repo1.maven.org/maven2

遠程倉庫

在很多情況下,默認的中央倉庫無法滿足項目的需求,可能項目需要的構件存在于另外一個遠程倉庫中,如:JBoss,Maven倉庫。這時,可以在POM中配置該倉庫,比如:

<project>  
  ...  
  <repositories>  
    <repository>  
      <id>jboss</id>  
      <name>JBoss Repository</name>  
      <url>http://repository.jboss.com/maven2/</url>  
      <releases>
        <!-- 更新頻率never,always,interval,daily -->   
        <updatePolicy>daily</updatePolicy>
          <enabled>true</enabled>
          <!-- 檢查和檢驗文件的策略,fail,warn,ignore -->   
        <checksumPolicy>warn</checksumPolicy>
      </releases>  
    </repository>  
    <snapshots>  
      <enabled>false</enabled>  
    </snapshots>  
    <layout>default</layout>  
  </repositories>  
  ...  
</project>

在repositories元素下,用repository子元素聲明一個或者多個遠程倉庫。該例中聲明了一個id為jboss,名稱為JBoss Repository的倉庫。任何一個倉庫聲明的id必須是唯一的,尤其需要注意的是,maven自帶的中央倉庫使用的id為central,如果其他的倉庫聲明也使用該id,就會覆蓋中央倉庫的配置。該配置中的url值指向了倉庫的地址,一般來說,該地址都基于http協議,maven用戶都可以在瀏覽器中打開倉庫地址瀏覽構件。
該例配置中的releases和snapshots元素比較重要,它們用來控制Maven對于發布版構件和快照版構件的下載。該例中releases的enabled值為true,表示開啟JBoss倉庫的發布版本下載支持,而snapshots的enabled值為false,表示關閉JBoss倉庫的快照版本的下載支持。該例中的layout元素值default表示倉庫的布局是Maven2及Maven3的默認布局,而不是Maven1的布局。

遠程倉庫的認證

遠程倉庫默認無須認證就可訪問,有時出于安全需要,可配置認證訪問。
配置認證信息和配置倉庫信息不同,倉庫信息可以直接配置在POM文件中,但是認證信息必須配置在settings.xml文件中。這是因為POM往往是被提交到代碼倉庫中供所有成員訪問的,而settings.xml一般只放在本機。因此,settings.xml中配置認證信息更為安全。
假設為id為my-proj的倉庫配置認證信息,編輯settings.xml文件如下:

<settings>  
  ...  
  <servers>  
    <server>  
      <id>my-proj</id>  
      <username>repo-user</username>  
      <password>repo-pwd</password>  
    </server>  
  </servers>  
  ...  
</settings> 

** 注:settings.xml中server元素的id必須與POM中需要認證的repository元素的id完全一致。 **

私服

私服是架設在局域網的特殊遠程倉庫。一般maven自己的中央倉庫存放了主流的jar包,但是有時候自己的編寫的jar包就沒辦法在中央倉庫找到了,這時候就需要配置一個遠程倉庫,就是所謂的“私服”,就可以將我們自己的jar包存放到遠程倉庫中,這樣當maven需要下載jar包的時候,就可以先請求私服,如果私服上找不到,就會從maven的中央倉庫再下載,之后也會緩存在私服上供以后使用。

鏡像

這里另外說一下鏡像。國內訪問國外的倉庫,你懂的,所以有必要配置鏡像。在maven安裝目錄下的settings.xml配置文件中,可以配置鏡像,在<Mirrors>元素中,可配置一個或多個<mirror>鏡像。比如:

<mirror>  
    <id>nexus-osc</id>  
    <mirrorOf>central</mirrorOf>  
    <name>Nexus osc</name>  
    <url>http://maven.oschina.net/content/groups/public/</url>
</mirror>

mirrorOf中寫的是哪個倉庫的鏡像,例子中表明是中央倉庫的鏡像,這樣,一切往中央倉庫的請求,都會轉發到去請求這個鏡像的地址。所以,mirrorOf中不能亂寫。
鏡像也可以配置基于id的倉庫認證。
mirrorOf中可以寫*,表示對一切的請求都會轉到這個鏡像。

** 為了滿足復雜的規則,maven支持高級的鏡像配置: **

  1. <mirrorOf>*<mirrorOf>: 匹配所有倉庫
  2. <mirrorOf>external:*<mirrorOf>: 匹配所有不在本機上的遠程倉庫
  3. <mirrorOf>repo1,repo2<mirrorOf>: 匹配repo1和repo2,多個倉庫用逗號隔開
  4. <mirrorOf>*,!repo3<mirrorOf>: 匹配所有倉庫,除了repo3

*匹配所有,這個鏡像建議放在最后,否則maven循環匹配,匹配到第一個就是,滿足,直接就結束了,其他鏡像就不生效了。*

倉庫搜索

在工作中,我們需要知道摸個依賴的坐標來使用,可以使用倉庫搜索。
附上幾個常用的搜索地址:

最后總結:

在pom中加入依賴聲明后,maven會優先根據坐標去我們本地倉庫查找,如果找到就用了。如果找不到,就會默認去中央倉庫查找,然后下載到本地,然后使用。如果我們配置了私服或者其他遠程倉庫,就會從遠程倉庫查找,下載。如果我們有配置對應的鏡像,就會從鏡像下載使用了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • |-1-更新內容[6.從倉庫解析依賴的機制(重要)] 1Maven倉庫作用 倉庫用來存儲所有項目使用到構件,在ma...
    zlcook閱讀 6,168評論 0 25
  • 目前在看nexus私服章節的知識時需要用到倉庫與鏡像的知識,正好通過簡書把倉庫和鏡像章節的筆記整理一下 倉庫 ma...
    小煉君閱讀 1,323評論 0 48
  • 首先私服是一種衍生出來的特殊的Maven遠程倉庫,構建私服的好處請看3.5私服 可以幫助大家建立私服的倉庫管理軟件...
    zlcook閱讀 10,667評論 0 32
  • 1.遠程倉庫的配置 在平時的開發中,我們往往不會使用默認的中央倉庫,默認的中央倉庫訪問的速度比較慢,訪問的人或許很...
    followtry閱讀 11,304評論 3 4
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139