1. 程式人生 > >maven遠端倉庫和映象

maven遠端倉庫和映象

http://blog.csdn.net/zyxnetxz/article/details/5709196

http://www.blogjava.net/baoyaer/articles/355040.html

http://www.cnblogs.com/jerome-rong/archive/2012/12/08/2808947.html

在以前使用Ant的時候,我們會建立一個lib目錄在存放我們的jar包,比如專案所依賴的第三方包,每建立一個專案都要建立一個lib,不停的做copy工作,不僅是對於磁碟的浪費,而且也造成了版本管理上的麻煩。而且我們還需要通過提交到svn上來對lib進行管理,但是svn對於這種二進位制檔案的管理並不出色。

Maven倉庫的初中就是為了解決這個問題,是所有常用的第三方包的集中營。這樣所有的Maven專案就可以從這個倉庫中獲取所需要的資源,Maven倉庫中對jar通過Group Id, Atifact Id, version 來管理,所以Maven專案可以很方便的進行依賴管理。你不需要自己來管理這個龐大的資源倉庫,當然你可以建立一個公司層面的倉庫管理器,這個我在這個章節的後面會介紹。

Maven 倉庫的兩個概念:本地倉庫和遠端倉庫

本地倉庫是遠端倉庫的一個緩衝和子集,當你構建Maven專案的時候,首先會從本地倉庫查詢資源,如果沒有,那麼Maven會從遠端倉庫下載到你本地倉庫。這樣在你下次使用的時候就不需要從遠端下載了。如果你所需要的jar包版本在本地倉庫沒有,而且也不存在於遠端倉庫,Maven在構建的時候會報錯,這種情況可能發生在有些jar包的新版本沒有在Maven倉庫中及時更新。

Maven預設的本地倉庫地址為${user.home}/.m2/repository 。也就是說,一個使用者會對應的擁有一個本地倉庫。當然你可以通過修改${user.home}/.m2/settings.xml 配置這個地址:

<settings>    
  …    
  
<localRepository> D:/java/repository</localRepository>    
  …    
</settings>
如果你想讓所有的使用者使用統一的配置那麼你可以修改Maven主目錄下的setting.xml:
${M2_HOME}/conf/setting.xml


還可以通過在執行時指定目錄,但是並不推薦這麼做:

mvn clean install -Dmaven.repo.local=/home/juven/myrepo/

當我們建立一個簡單的Maven專案後(只需要在pom.xml配置好依賴),執行mvn clean install就可以把專案構建好,不需要我們手工下載任何jar,這全靠中央倉庫的存在,它會自動從倉庫下載。這個倉庫的定義是在${M2_HOME}/lib/maven-2.0.10-uber.jar 裡面。你可以在裡面找到/org/apache/maven/project/pom-4.0.0.xml 這個檔案,在這個檔案裡面定義了中央倉庫的地址:

<repositories><repository><id> central</id><name> Maven Repository Switchboard</name><layout> default</layout><url> http://repo1.maven.org/maven2</url><snapshots><enabled> false</enabled></snapshots></repository></repositories>
POM中配置遠端倉庫

下面我介紹下如何在pom.xml裡面配置遠端倉庫,我們需要在什麼時候配置遠端倉庫呢?當你連線中央倉庫的速度比較慢時,或者你為你的公司搭建了自己的倉庫,比如Nexus倉庫管理(後面我會介紹),又或者你蘇需要的jar存在另外一個公共倉庫,比如我們配置一個國內的映象地址:


<project>    
…    
  
<repositories><repository><id> maven-net-cn</id><name> Maven China Mirror</name><url> http://maven.net.cn/content/groups/public/</url><releases><enabled> true</enabled></releases><snapshots><enabled> false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id> maven-net-cn</id><name> Maven China Mirror</name><url> http://maven.net.cn/content/groups/public/</url><releases><enabled> true</enabled></releases><snapshots><enabled> false</enabled></snapshots></pluginRepository></pluginRepositories>    
…    
</project>
這裡我們可以看到,允許配置多個repository和 plugin repository,<releases><enabled>true</enabled></releases>告訴Maven可以從這個倉庫下載releases版本的構件,而<snapshots><enabled>false</enabled></snapshots>告訴Maven不要從這個倉庫下載snapshot版本的構件,之所以不讓你從這個倉庫下載snapshot版本,是因為這些版本是不穩定的,但是snapshot版本在我們內部專案開發的時候可是作用巨大,後面的問文章我會討論這個問題。至於<pluginRepositories>,這是配置Maven從什麼地方下載外掛構件,Maven的所有行為都是通過外掛來完成的,其內部配置與<repository>類似,這裡就不多說了。

儘管pom.xml中可以方便的哦配置中央倉庫,但是我並不推薦大家這麼做,尤其是在大的公司中,因為一個公司會有很多的專案,如果每個專案都這樣配置,那麼又開始做重複的copy工作了,如何解決呢,我們往下走

在 settings.xml 中配置遠端倉庫

Pom.xml的作用範圍是一個專案,一個公司不可能只做一個專案,那麼為了避免重複配置,那麼我們需要把一些公共資訊配置在setting.xml中。但是setting.xml中並不支援<repositories>及<pluginRepositories>,為了解決這個問題我們使用profile:

<settings>    
  …    
  
<profiles><profile><id> myProfiel</id><!—在這裡加入<repositories><pluginRepositories>–>   
    
</profile></profiles><activeProfiles><activeProfile> myProfiel </activeProfile></activeProfiles>    
  …    
</settings>
這裡通過<activeProfile>元素來啟用這個profile,這樣我們就可以全域性的使用這個配置,不再需要為每個POM做重複的配置了。 


Maven Profiles 
Maven中的profile是一組可選的配置,可以用來設定或者覆蓋配置預設值。有了profile,你就可以為不同的環境定製構建。profile可以在pom.xml中配置,並給定一個id。然後你就可以在執行Maven的時候使用的命令列標記告訴Maven執行特定profile中的目標。以下pom.xml使用production profile覆蓋了預設的Compiler外掛設定。 

在實際的操作過程中,這裡我們最好不要配置遠端倉庫,最好能夠通過nexus建立公司或者組織自己的倉庫,然後這把把地址指向自己的倉庫,後面我會介紹為什麼要這麼做,怎麼做。

<profiles><profile><id>production</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><debug>false</debug><optimize>true</optimize></configuration></plugin></plugins></build></profile></profiles>


要使用production profile來執行mvn install,你需要在命令列傳入-Pproduction引數。要驗證production profile覆蓋了預設的Compiler外掛配置,可以像這樣以開啟除錯輸出(-X) 的方式執行Maven。

如果你開始大量使用Maven profile,你會希望將profile從POM中分離,使用一個單獨的檔案如profiles.xml。你可以混合使用定義在pom.xml中和外部profiles.xml檔案中的profile。只需要將profiles元素放到${basedir}目錄下的profiles.xml檔案中,然後照常執行Maven就可以。profiles.xml檔案的大概內容如下

<profiles><profile><id>development</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><debug>true</debug><optimize>false</optimize></configuration></plugin></plugins></build></profile><profile><id>production</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><debug>false</debug><optimize>true</optimize></configuration></plugin></plugins></build></profile></profiles>
settings profile可以應用到所有你使用Maven構建的專案。你可以在兩個地方定義settings profile:定義在~/.m2/settings.xml中的使用者特定settings profile,或者定義在${M2_HOME}/conf/settings.xml中的全域性settings profile。

配置映象

如果你想覆蓋中央倉庫的預設地址,那麼這裡我們就會使用的映象了,還在setting.xml裡面配置:

<settings>    
…    
  
<mirrors><mirror><id> maven-net-cn</id><name> Maven China Mirror</name><url> http://maven.net.cn/content/groups/public/</url><mirrorOf> central</mirrorOf></mirror></mirrors>    
…    
</settings>

這裡解釋一下<mirrorOf>,表示只為central倉庫做映象,如果想為所有的倉庫做映象那麼可以改為:<mirrorOf>*</mirrorOf>
如果你看到這裡,請先不要著急,實際的專案經驗告訴我,只是這些還不夠,我們需要更快捷和高效的管理:

利用Nexus來構建企業級Maven倉庫
Nexus是Maven倉庫管理器,用來搭建一個本地倉庫伺服器,這樣做的好處是便於管理,節省網路資源,速度快,還有一個非常有用的功能就是可以通過專案的SNAPSHOT版本管理,來進行模組間的高效依賴開發,下面會一一描述。

雖然你可以通過中央倉庫來獲取你所需要的jar包,但是現實往往是存在很多問題:

  1. 網速慢,你可能需要花很長的時間來下載你所需要的jar
  2. 如果你的公司很大,有幾百甚至幾千人再用Maven,那麼這些人都去通過中央倉庫來獲取jar,那麼這是一個很大的資源浪費
  3. 如果存在模組之間的依賴開發,你的snapshot版本是不能夠被你的夥伴很方便的獲取。
  4. 在實際開發過程中,有些jar的版本可能在中央倉庫裡面不存在,或者更新不及時,你是獲取不到這個jar的。

所有以上問題,通過Nexus這個日益流行的倉庫管理器可以輕鬆的解決。

    1. 這個倉庫是本地的,下載的速度是從遠端下載不可比的。
    2. 可以為你公司所有的Maven使用者服務,可以進行統一管理
    3. 後面我會介紹如何通過nexus來進行存在模組依賴的專案的開發
    4. 你可以新增自己的第三方包。 
安裝Nexus

Nexus提供了兩種安裝方式,一種是內嵌Jetty的bundle,只要你有JRE就能直接執行。第二種方式是WAR,你只須簡單的將其釋出到web容器中即可使用。

1)Bundle方式安裝

解壓nexus-webapp-1.3. 4 -bundle.zip 至任意目錄,如D:/ tools ,轉到目錄D:/ tools/nexus-webapp-1.3. 4 /bin/jsw/windows-x86-32 ,執行Nexus.bat ,如果你是在linux下安裝,那麼就下載nexus-webapp-1.3. 4 -bundle. tar .gz, 解壓後轉到${NEXUS_HOME}/ nexus-webapp-1.3.3/bin/jsw/linux-x86-32,它還支援solaris,macos等作業系統。當你看到“Started [email protected]:8081”之後,說明Nexus啟動成功了,然後開啟瀏覽器,訪問http://127.0.0.1:8081/nexus,通過admin的帳號(admin)和密碼(admin123)登入你會看到如下的頁面:


如果有新版本釋出,會有提示在預設頁面上。

這裡,可以管理倉庫,配置Nexus系統,管理任務,管理使用者,角色,許可權,檢視系統的RSS源,管理及檢視系統日誌,等等。

War 方式安裝

你可以同過war的方式以web應用的形式釋出到你的應用伺服器,比如tomcat。你所要做的就是下載war版本的檔案,然後放到應用伺服器的釋出目錄即可,這裡就不多講了。

到此我們已經安裝好Nexus,下面我來介紹下一些我們常用的功能和使用:

配置 中央倉庫



    在左邊選單欄裡選擇Repositories,然後會出現右邊的畫面,右邊上半部分是列出來的repository,黑體字是型別為group的repository. 這裡簡單介紹下幾種repository的型別:

  • hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。比如公司的第二方庫。
  • proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。
  • group,倉庫組,用來合併多個hosted/proxy倉庫,當你的專案希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。

Maven central是Maven的中央倉庫,點選它並選擇configuration標籤欄,我們會看到下面的頁面


這裡有幾個專案是我們可能會經常用到的:
  1. Override local storage location: 在這個選項你可以配置你的Nexus本地倉庫的存放地址,用來覆蓋其預設的存放地址
  2. Remote storage location: 這裡是遠端倉庫的地址,為了提高代理速度,你可以修改為國內的映象地址。預設值是http://repo1.maven.org/maven2/
Download remote indexes: 這裡配置是否下載遠端索引檔案,模式是false, 建議配置為true,這樣我們便可以通過索引檔案來搜尋我們需要的構件


新增代理倉庫

Maven central是一個比較大的代理倉庫,如果你需要新增的一個代理倉庫,那麼可以在點選左邊慘淡欄裡面的Repositories,然後右邊的頁面點選add -> add proxy repository, 之後出現以下頁面:


填寫相關資訊儲存即可。通常情況下,使用預設的代理倉庫已經能夠滿足大部分專案的需求了, 只有在特殊需求的情況下才會參加代理倉庫.

管理本地倉庫

我們前面講到型別為hosted的為本地倉庫,Nexus預定義了3個本地倉庫,分別是Releases, Snapshots, 3rd Party. 分別講一下這三個預置的倉庫都是做什麼用的:

  1. Releases: 這裡存放我們自己專案中釋出的構建, 通常是Release版本的, 比如我們自己做了一個FTP Server的專案, 生成的構件為ftpserver.war, 我們就可以把這個構建釋出到Nexus的Releases本地倉庫. 關於符合釋出後面會有介紹.
  2. Snapshots: 這個倉庫非常的有用, 它的目的是讓我們可以釋出那些非release版本, 非穩定版本, 比如我們在trunk下開發一個專案,在正式release之前你可能需要臨時釋出一個版本給你的同伴使用, 因為你的同伴正在依賴你的模組開發, 那麼這個時候我們就可以釋出Snapshot版本到這個倉庫, 你的同伴就可以通過簡單的命令來獲取和使用這個臨時版本.
  3. 3rd Party: 顧名思義, 第三方庫, 你可能會問不是有中央倉庫來管理第三方庫嘛, 沒錯, 這裡的是指可以讓你新增自己的第三方庫, 比如有些構件在中央倉庫是不存在的. 比如你在中央倉庫找不到Oracle 的JDBC驅動, 這個時候我們就需要自己新增到3rd party倉庫.
你也可以建立自己的本地倉庫,點選Repository面板上方的Add按鈕,然後選擇Hosted Repository,然後在下方的配置面板中輸入相關資訊, 這裡我們不再需要填寫遠端倉庫地址,根據自己的需要選擇Release或者Snapshot,如圖:  


Maven倉庫組

倉庫組的概念是Maven沒有的,通過前面介紹可以瞭解到, 我們可以建立多個proxy代理倉庫,hosted本地倉庫, 如果沒有倉庫組的概念,我們如果需要引用這些倉庫的是時候需要一一加入到我們的setting.xml裡面去, 有了倉庫的組的概念, 我們只需要做一次引用就可以了,把我們需要的倉庫加入到倉庫組即可.像這樣:

<repositories><repository><id>nexus</id>           <url>http://127.0.0.1:8081/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
Nexus中預設了2個倉庫組,public repositories和public snapshot repositories. 如圖:



倉庫組預設包含本地倉庫Releases, snapshots, 3rd party和代理倉庫Maven Central. 你可以在Configuration配置頁新增倉庫到這個倉庫組. 如果需要你還可以建立一個倉庫組,如圖:

點選 Add->Repository Group

出現New Repository Group介面後,填入ID, name 等相關資訊, 在右邊Available Repositories 欄裡可以選擇你要新增的倉庫到你新建的倉庫組.  





好多公司處於安全考慮,用代理上網,而nexus 經常需要往maven repository中心下載東西,所以需要給nexus設定代理。 開始沒找到地方,後來發現可以從nexus後臺管理器介面上直接設定,地方很隱蔽: 

登陸後進入管理頁面,從左邊選單欄選擇Server 開啟右邊tab頁,發現還是找不到,彆著急,仔細找會發現有行: default http proxy settings   前面有個checkbox 未勾選, 速度勾選之,馬上出現了您熟悉的  proxy host,proxy port , username , passowrd.  okay 代理設定完成,現在nexus能通過網際網路從maven repository中心下載東西了!



通過Nexus搜尋構件

在我們實際使用構件的過程中通常遇到一個問題,有時候我緊緊知道我所需要的構建的大致名字,並不知道全稱或group id, 這是件非常頭疼的事情. Nexus基於Nexus indexer的搜尋功能幫我們解決了這個問題.

要是用搜索功能, 必須要有索引檔案, Nexus預設是不建立索引檔案的,因為像中央倉庫這樣的索引檔案的建立需要耗費比較大的網路資源,僅索引檔案就要幾十兆. 要開啟中央倉庫的索引檔案下載功能需要在Maven Central的配置頁面, 把Download Remote Indexes選擇true. 如圖:


這樣設定以後, Nexus會自動從遠端中央倉庫下載索引檔案, 為了檢驗索引檔案自動下載是否生效,可以卻換到Browse:


如果出現先以上資料夾,那說明索引檔案已經建立.

下面我試一下搜尋功能, 在左邊選單欄裡面有個Artifact Search, 在輸入框裡面輸入你想要搜尋的構件名字,比如: testing, 那麼查詢結果如下:

這是模糊查詢的結果,當然如果你知道更多資訊,比如版本號等,你可以使用高階搜尋,點選高階搜尋後,右邊介面會提供集中搜索方式:keyword, classname, GAV, checksum


比如我們這裡選擇GAV模式, 而且我只知道artiface name : testng和版本號5.8, 其他的我不知道, 那麼就在artifact 和 version處分別輸入testng 和 5.8 , 搜尋結果如下:


你如果你不知道知道構件的名稱, 只知道classname, 那麼你也可以通過class name 的方式搜尋,這裡就不再贅述

當你選擇一項搜尋結果,在頁面的下方會出現這個構件的詳細資訊, 並且會列出這個構件的Maven依賴配置, 你可以直接拷貝到你的pom檔案中使用,這是個非常實用的功能:

相關推薦

maven遠端倉庫映象

http://blog.csdn.net/zyxnetxz/article/details/5709196 http://www.blogjava.net/baoyaer/articles/355040.html http://www.cnblogs.com/jerome-

maven 遠端倉庫常用映象

<mirror> <id>175.6.27.51 </id> <mirrorOf>*</mirrorOf> <name>wtx mirror</name> <

[Maven實戰](6)倉庫(本地倉庫遠端倉庫映象

1. 簡介 maven可以在某個位置統一儲存所有maven專案共享的構件,這個統一的位置就是倉庫。實際的Maven專案將不會各自儲存其依賴檔案,它們只需要宣告這些依賴的座標,在需要的時候(例如,編譯專案的時候需要將依賴加入到classpath中),maven會自動根據

maven學習(3):本地倉庫映象倉庫的修改

映象倉庫的修改 安裝完maven後,可在maven目錄下的conf資料夾,修改sestting.xml檔案 將mirror倉庫的註釋,恢復,修改為自己的私服或者國內映象倉庫地址 <mirror> <id>mvnr

maven專案對於maven遠端倉庫沒有資源的解決辦法

下載資源到本地 方法一:dependency scope 是system 型別 <dependency> <groupId>edu.ucar</groupId> <artifactId>netcdfAl

Maven倉庫settings.xml配置檔案

快速導航:         在Maven基礎概念和安裝配置一文中,我們簡單學習了Maven是什麼,安裝包裡邊的各個資料夾都存放著哪些東西,並且進行了簡單的安裝配置。在本文中,我們將進一步學習瞭解何為Maven倉庫以及Maven的配置檔案settings.xml如何配

國內maven遠端倉庫配置

<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor licen

三、eclipse中Maven本地倉庫阿里雲中央倉庫配置

由於中央倉庫伺服器在國外,下載依賴包比較慢,而阿里雲的倉庫是國內的,而阿里雲基本上可以提供我們全部的需要找到本地maven安裝路徑修改conf下的settings.xml<mirror> <id>aliyun</id>

maven本地倉庫中央倉庫配置

aliyun onf nbsp yun strong c盤 常用 默認 中央倉庫 本地: maven默認會配置到C盤用戶下的.m2,當然可以更改其默認路徑 打開maven安裝目錄找到conf->settings搜索localRepository 中間放包默

maven構建docker映象三部曲之三:推送到遠端倉庫(內網阿里雲)

在上一章《maven構建docker映象三部曲之二:編碼和構建映象》的實戰中,我們將spring boot的web工程構建成docker映象並在本地啟動容器成功,今天我們把docker-maven-plugin外掛的推送功能也用上,這樣編譯、構建、推送都能一

配置Maven的 本地倉庫 遠端倉庫(私服)

maven中並沒有我們開發所需的jar包,只是存有jar包的座標,jar包是存於本地倉庫/遠端倉庫/中央倉庫中的。當我們啟動maven工程時,專案會根據maven中的座標去查詢對應的jar包。 查詢maven工程中存放座標的配置檔案:開啟maven的安裝路檔案

使用Maven 外掛構建docker 映象推送倉庫

案例 spring cloud eureka server 構建 docker 映象 和推送倉庫 fox.風 專案 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project x

Maven:mirror(映象repository(倉庫) 區別

internal repository是指在區域網內部搭建的repository,它跟central repository, jboss repository等的區別僅僅在於其URL是一個內部網址 mirror則相當於一個代理,它會攔截去指定的遠端repository下載構

Maven詳解之倉庫------本地倉庫遠端倉庫

在Maven中,任何一個依賴、外掛或者專案構建的輸出,都可以稱之為構件。 Maven在某個統一的位置儲存所有專案的共享的構件,這個統一的位置,我們就稱之為倉庫。(倉庫就是存放依賴和外掛的地方) 任何的構件都有唯一的座標,Maven根據這個座標定義了構件在倉庫中的唯一儲

eclipse中配置Maven與本地倉庫阿里雲映象設定

eclipse中配置Maven 1 在window-preference中搜索maven 在1 Maven Installation 找到Maven安裝路徑的bin的路徑 2  User setting 找到Maven的setting 及本地倉庫 引入Maven

maven詳解-座標-本地倉庫-遠端倉庫-映象倉庫

一 座標 每個maven所依賴的庫或者是maven專案都有一個唯一的標識,這個標識就是座標。 座標有groupId,artifactId,version這三個欄位決定 二 倉庫作用 maven在構建專案的時候發現所依賴的庫在本專案中沒有,就會去庫中載入。 三 本地倉庫

03-2.Maven專案怎麼呼叫遠端倉庫,及映象配置mirrors的使用

Maven 有個超級POM,它預設的位置在:maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml,裡面配置了maven預設呼叫遠端倉庫和外掛倉庫的地址,如下: <repo

maven中配置本地倉庫遠端倉庫(私服)

前言: 不論是本地倉庫還是遠端倉庫,還有maven的中央倉庫都是用來存放專案的jar包的。 一般maven自己的中央倉庫存放了主流的jar包,但是有時候自己的編寫的jar包就沒辦法在中央倉庫找到了,

###①Maven國內私服快速下載—阿里雲+②maven倉庫新增依賴jar包 技巧:Maven中的settings.xml設定遠端映象

==== ==========①Maven國內私服快速下載—阿里雲 在Maven中,如果是按照預設的配置檔案進行maven的使用,我們會發現下載速度特別的慢。因為預設配置的私服Nexus是在國外的伺服器上,而我嘗試了使用代理伺服器,同樣下載速度也只有幾kb,這時我們

maven給預設中央倉庫設定映象為阿里雲maven倉庫

maven3.5.4預設的中央倉庫central地址是  http://repo.maven.apache.org/maven2/ 但是網速一般,所以選擇國內阿里雲maven倉庫   在settings.xml 中配置    &nbs