Maven與Nexus OSS

Maven 是一個項目管理和構建自動化工具,是Apache Fundation下的一個Java項目。經常使用於Java項目中依賴管理nginx

下載直接去官網數據庫

安裝Maven

已經編譯的二進制包 直接解壓到安裝目錄便可apache

$ cd /path/to/Download
$ tar -xf apache-maven-3.3.9-bin.tar.gz
$ sudo mv apache-maven-3.3.9 /usr/local/
$ sudo ln -s /usr/local/apache-maven-3.3.9/bin/* /usr/bin/

maven會首先查詢 pom.xml 引入的包,查找本地倉庫是及工程目錄,如不存在相應的包就會從maven的遠程apache倉庫下載vim

打包工程瀏覽器

mvn package

發佈包到本地倉庫緩存

mvn install

 

Nexus OSS

Nexus是一個強大的Maven倉庫管理器,它極大地簡化了本身內部倉庫的維護和外部倉庫的訪問。利用Nexus你能夠只在一個地方就可以徹底控制訪問 和部署在你所維護倉庫中的每一個Artifact。Nexus是一套「開箱即用」的系統不須要數據庫,它使用文件系統加Lucene來組織數據。Nexus 使用ExtJS來開發界面,利用Restlet來提供完整的REST APIs,經過m2eclipse與Eclipse集成使用。Nexus支持WebDAV與LDAP安全身份認證。 Nexus分爲專業收費的Nexus Pro與免費的Nexus OSS兩個版本。本文以Nexus OSS爲主體安全

安裝與配置

下載Nexus OSS Nexus OSS 3.0 已經不支持Maven格式,因此這裏咱們下載 2.x 版本, 下載地址bash

安裝Nexus OSSeclipse

$ cd /path/to/Downloads
$ tar -xf nexus-2.14.1-01-bundle.tar.gz
$ cd nexus-2.14.1-01-bundle 
$ sudo mv nexus-2.14.1-01 /usr/local/

# 創建倉庫存放目的
$ sudo mkdir /Data
$ sudo mv sonatype-work /Data/

# 創建bin運行軟鏈
# sudo ln -s /usr/local/nexus /usr/local/nexus-2.14.1-01
# sudo ln -s /usr/loca/nexus-2.14.1-01/bin/nexus /usr/local/bin/

配置Nexus OSSmaven

$ cd /usr/local/nexus-2.14.1-01/conf
$ sudo vim nexus-propertities

# 修改如下內容
nexus-work=/Data/nexus-repos/sonatype-work/nexus

測試運行

$ nexus start

# 中止
$ nexus stop

# 重啓
$ nexus restart

瀏覽器打開http://localhost:8081/nexus,便可看到nexus oss的歡迎界面

登陸用戶:admin,默認密碼:admin123,登陸後可在我的中心修改。

nginx反代方式

$ cd /path/to/nginx/conf/vhosts
$ sudo vim nexus.local.me.conf

# 內容以下:
server                                                                             
{                                                                                  
    server_name nexus.aeonluck.me;                                                 
                                                                                   
    location / {                                                                   
        proxy_pass   http://127.0.0.1:8081;                                        
                                                                                   
        proxy_redirect  off;                                                       
        proxy_set_header Host $host;                                               
        proxy_set_header X-Real-IP $remote_addr;                                   
        proxy_set_header X-Forwarded-For                                           
        $proxy_add_x_forwarded_for;                                                
   }                                                                               
}

添加本地host

# sudo vim /etc/hosts

# 增長如下內容
127.0.0.1 nexus.local.me

測試反代

$ sudo nginx -s reload

瀏覽器打開http://nexus.local.me/nexus便可見到nexus oss歡迎界面

倉庫配置

Nexus的倉庫分爲如下幾種:

  • proxy : 代理倉庫,對遠程倉庫的本地代理。
  • hosted : 本地倉庫。
  • virtual:影子倉庫,對proxy或hosted倉庫的映射。
  • group:倉庫組,做爲邏輯倉庫組對外

首先,咱們要對幾個重要倉庫的配置進行修改,如 central,Apache Snapshots等,你也能夠本身添加外部倉庫。

  • 點擊左側 repositories,右側打開倉庫列表。
  • 選擇倉庫 central,點擊下方 configuration,找到 「Download Remote Indexes」,修改成 true,保存。
  • 右擊倉庫列表中 central,選擇 Update Indexs,而後打開左側管理菜單 Administration > Scheduled Tasks,便可在計劃任務列表中看到剛纔創建的「update indexs」任務,這須要必定時間。
  • 索引下載完成後,咱們便可在倉庫的 Browse Index 中查看索引,並可進行相應的搜索

小提示:

  1. 其它倉庫配置能夠參照上述過程。
  2. 能夠經過Nexus OSS左側菜單 Administration > Logging 查看相應的日誌。
  3. 關於Nexus OSS的其餘管理功能再也不累述,只需點擊左側菜單按提示操做便可

 

Maven與Nexus OSS的配合使用

修改Maven配置,加入私庫

$ vim ~/.m2/settings.xml

# servers 內增長咱們的私庫用戶
<server>                                                                       
  <id>snapshots</id>                                                                 
  <username>admin</username>                                                   
  <password>admin123</password>                                                
</server> 

# mirrors增長私庫
<mirror>                                                                    
  <id>nexus</id>                                                            
  <name>Local nexus repo</name>                                             
  <url>http://nexus.aeonluck.me/nexus/content/groups/public/</url>          
  <mirrorOf>*</mirrorOf>                                                    
</mirror>

特別要注意的是:
必定要配置爲 <mirrorOf>*</mirrorOf>,即讓全部的倉庫都先通過私庫,這樣能夠將遠程下載的包緩存到本地

小提示:

  1. Maven安裝目錄下的 /conf/settings.xml 起全局控制做用。
  2. 用戶目下的Maven配置文件,即:~/.m2/settings.xml 僅對當前用戶用效

 

添加個國內倉庫 默認的apache的倉庫下載速度比較慢,這裏選擇阿里雲的Nexus倉庫

$ vim ~/.m2/setting2.xml
                        
# 在mirrors中增長如下內容
# 注意,位置於咱們的私庫以後,不然私服不能緩存到下載的包。                                                    
<mirror>                                                                    
  <id>alimaven</id>                                                         
  <name>aliyun maven</name>                                                 
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>           
  <mirrorOf>central</mirrorOf>                                              
</mirror>

關於Maven的mirror:

  1. mirrors能夠配置多個mirror,每一個mirror有id,name,url,mirrorOf屬性,id是惟一標識一個mirror就很少說了,name貌似沒多大用,至關於描述,url是官方的庫地址,mirrorOf表明了一個鏡像的替代位置,例如central就表示代替官方的中央庫。
  2. 鏡像庫並非一個分庫的概念,就是說當a.jar在第一個mirror中不存在的時候,maven會去第二個mirror中查詢下載。但事實卻不是這樣,當第一個mirror中不存在a.jar的時候,並不會去第二個mirror中查找,甚至於,maven根本不會去其餘的mirror地址查詢。
  3. maven的mirror是鏡像,而不是「分庫」,只有當前一個mirror沒法鏈接的時候,纔會去找後一個,相似於備份和容災。
  4. mirror也不是按settings.xml中寫的那樣的順序來查詢的。所謂的第一個並不必定是最上面的那個。當有id爲B,A,C的順序的mirror在mirrors節點中,maven會根據字母排序來指定第一個,因此無論怎麼排列,必定會找到A這個mirror來進行查找,當A沒法鏈接,出現意外的狀況下,纔會去B查詢。

 

Maven工程發佈與私庫

通常狀況下,一個使用Maven的Java團隊,都會有本身的項目倉庫,當開發完成相應的功能以後,都會發布相應的jar/war包到私服。供其它項目成員使用

發佈配置 在Maven工程的pom.xml中增長如下內容

<!-- 工程自述 -->
<groupId>org.aeonluck</groupId>
<artifactId>org.aeonluck.hello</artifactId>
<packaging>jar</packaging>
<version>0.1.0-SNAPSHOT</version>

<!-- 發佈配置 -->
<distributionManagement>  
    <repository>  
        <id>snapshots</id>  
        <name>Snapshots</name>  
        <url>http://nexus.local.me/nexus/content/repositories/snapshots/</url>  
    </repository>  
</distributionManagement>  

 

重要提示:

  1. 當發佈到屬性爲snapshot的倉庫時,工程自述說明小節中的 <version>,須要帶上後綴 SNAPSHOT,不然會當成 release 發佈。會收到 400 Bad Request 錯誤。
  2. 發佈配置中的 <url> 地址必定要區分清楚。並在 release 與 snapshot 倉庫裏配置不一樣的地址。此外,id、name 要與Nexus中倉庫的配置 configuration 中的內容一致。
  3. Nexus OSS的倉庫屬性:
  • snapshot : 快照版本,即不穩定的頻繁發佈場所,經常使用於團隊成員快速聯調。
  • release : 正式版本,即穩定包所在場所

發佈jar到的私庫

$ cd /path/to/myproject
$ mvn deploy

包發佈以後,咱們便可在Nexus OSS的管理倉庫中看到咱們剛纔發佈的包

小提示

$ mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar

# 發佈到本地倉庫
mvn install:install-file -DgroupId=com.bea.xml -DartifactId=jsr173-ri -Dversion=1.0 -Dpackaging=jar -Dfile=[path to file]

# 發佈到私服
mvn deploy:deploy-file -DgroupId=com.bea.xml -DartifactId=jsr173-ri -Dversion=1.0 -Dpackaging=jar -Dfile=[path to file] -Durl=[url] -DrepositoryId=[id]
相關文章
相關標籤/搜索