Maven私服Nexus3.x環境構建操做記錄

 

1、Maven介紹
Apache Maven是一個創新的軟件項目管理和綜合工具。
Maven提供了一個基於項目對象模型(POM)文件的新概念來管理項目的構建,能夠從一箇中心資料片管理項目構建,報告和文件。
Maven最強大的功能就是可以自動下載項目依賴庫。
Maven提供了開發人員構建一個完整的生命週期框架。開發團隊能夠自動完成項目的基礎工具建設,Maven使用標準的目錄結構和默認構建生命週期。
在多個開發團隊環境時,Maven能夠設置按標準在很是短的時間裏完成配置工做。因爲大部分項目的設置都很簡單,而且可重複使用,Maven讓開發人員的工做更輕鬆,同時建立報表,檢查,構建和測試自動化設置。
Maven項目的結構和內容在一個XML文件中聲明,pom.xml 項目對象模型(POM),這是整個Maven系統的基本單元。html

Maven提供了開發人員的方式來管理:
1)Builds
2)Documentation
3)Reporting
4)Dependencies
5)SCMs
6)Releases
7)Distribution
8)mailing list
歸納地說,Maven簡化和標準化項目建設過程。處理編譯,分配,文檔,團隊協做和其餘任務的無縫鏈接。
Maven增長可重用性並負責創建相關的任務。
Maven最初設計,是以簡化Jakarta Turbine項目的建設。在幾個項目,每一個項目包含了不一樣的Ant構建文件。 JAR檢查到CVS。
Apache組織開發Maven能夠創建多個項目,發佈項目信息,項目部署,在幾個項目中JAR文件提供團隊合做和幫助。java

Maven主要目標是提供給開發人員:
1)項目是可重複使用,易維護,更容易理解的一個綜合模型。
2)插件或交互的工具,這種聲明性的模式。node

2、私服介紹
私服是指私有服務器,是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構建。有了私服以後,當 Maven 須要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;不然,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。linux

3、Nexus介紹
Nexus是一個強大的Maven倉庫管理器,它極大地簡化了本地內部倉庫的維護和外部倉庫的訪問。
若是使用了公共的Maven倉庫服務器,能夠從Maven中央倉庫下載所須要的構件(Artifact),但這一般不是一個好的作法。
正常作法是在本地架設一個Maven倉庫服務器,即利用Nexus私服能夠只在一個地方就可以徹底控制訪問和部署在你所維護倉庫中的每一個Artifact。
Nexus在代理遠程倉庫的同時維護本地倉庫,以下降中央倉庫的負荷,節省外網帶寬和時間,Nexus私服就能夠知足這樣的須要。
Nexus是一套「開箱即用」的系統不須要數據庫,它使用文件系統加Lucene來組織數據。
Nexus使用ExtJS來開發界面,利用Restlet來提供完整的REST APIs,經過m2eclipse與Eclipse集成使用。
Nexus支持WebDAV與LDAP安全身份認證。
Nexus還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。web

爲何要構建Nexus私服?
若是沒有Nexus私服,咱們所需的全部構件都須要經過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的全部人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,若是網速慢的話,還會影響項目的進程。不少狀況下項目的開發都是在內網進行的,鏈接不到maven倉庫怎麼辦呢?開發的公共構件怎麼讓其它項目使用?這個時候咱們不得不爲本身的團隊搭建屬於本身的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,固然前提條件就是你的私服中擁有項目所需的全部構件。數據庫

總之,在本地構建nexus私服的好處有:
1)加速構建;
2)節省帶寬;
3)節省中央maven倉庫的帶寬;
4)穩定(應付一旦中央服務器出問題的狀況);
5)控制和審計;
6)可以部署第三方構件;
7)能夠創建本地內部倉庫;
8)能夠創建公共倉庫
這些優勢使得Nexus日趨成爲最流行的Maven倉庫管理器。apache

4、Maven的安裝
下載地址:http://maven.apache.org/download.cgi
提早在服務器上安裝jdk環境(參考:Centos中yum方式安裝java
[root@master-node ~]# cd /usr/local/src/
[root@master-node src]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
[root@master-node src]# tar -zvxf apache-maven-3.3.9-bin.tar.gz
[root@master-node src]# mv apache-maven-3.3.9 /usr/local/mavenvim

接着配置系統環境變量,在/etc/profile文件底部添加以下內容:
[root@master-node src]# java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)
[root@master-node src]# vim /etc/profile
.....
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk                                //java的環境變量設置
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin緩存

export MAVEN_HOME=/usr/local/maven                                                 //maven的環境變量設置
export PATH=$PATH:$MAVEN_HOME/bin
[root@master-node src]# source /etc/profiletomcat

最後驗證是否安裝成功,出現以下信息,說明安裝成功
[root@master-node src]# mvn --version                   # 最好按照java jdk
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

5、Nexus安裝
Nexus的安裝有兩種實現方式:
1)war包安裝方式
下載地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01.war
直接將war包放在tomcat的根目錄下,啓動tomcat就能夠用了

2)源碼安裝方式(以前在用的是2.14.4版本,這裏是新版本)
下載地址:https://www.sonatype.com/download-oss-sonatype           (雲盤下載:http://pan.baidu.com/s/1miKFm5a
[root@master-node ~]# cd /usr/local/src/
[root@master-node src]# wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.2.0-01-unix.tar.gz
[root@master-node src]# tar -zvxf nexus-3.2.0-01-unix.tar.gz
[root@master-node src]# mv nexus-3.2.0-01 /usr/local/nexus

啓動nexus(默認端口是8081)
[root@master-node src]# /usr/local/nexus/bin/nexus
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
[root@master-node src]# /usr/local/nexus/bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
上面在啓動過程當中出現告警:不推薦使用root用戶啓動。這個告警不影響nexus的正常訪問和使用。
去掉上面WARNING的辦法:
[root@master-node src]# vim /etc/profile
......
export RUN_AS_USER=root
[root@master-node src]# source /etc/profile
[root@master-node src]# lsof -i:8081            //nexus服務啓動成功後,須要稍等一段時間,8081端口才起來
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1486 root 859u IPv4 23504303 0t0 TCP *:tproxy (LISTEN)

在部署機上的iptables裏打開8081端口
[root@master-node src]# vim /etc/sysconfig/iptables
....
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
[root@master-node src]# /etc/init.d/iptables restart

訪問nexus,即http://localhost:8081    (若是出現404,就訪問http://localhost:8081/nexus)

出現上述頁面,說明配置nexus成功!
點擊右上角「Log in」,
輸入默認用戶名(admin)和默認密碼(admin123)登陸

能夠點擊上面的「設置」圖標,在「設置」裏能夠添加用戶、角色,對接LDAP等的設置,以下:

能夠在「管理」裏查看nexus的系統信息

6、Nexus說明
1.component name的一些說明:
    1)maven-central:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar
    2)maven-releases:私庫發行版jar
    3)maven-snapshots:私庫快照(調試版本)jar
    4)maven-public:倉庫分組,把上面三個倉庫組合在一塊兒對外提供服務,在本地maven基礎配置settings.xml中使用。
2.Nexus默認的倉庫類型有如下四種:
    1)group(倉庫組類型):又叫組倉庫,用於方便開發人員本身設定的倉庫;
    2)hosted(宿主類型):內部項目的發佈倉庫(內部開發人員,發佈上去存放的倉庫);
    3)proxy(代理類型):從遠程中央倉庫中尋找數據的倉庫(能夠點擊對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值即被代理的遠程倉庫的路徑);
    4)virtual(虛擬類型):虛擬倉庫(這個基本用不到,重點關注上面三個倉庫的使用);
3.Policy(策略):表示該倉庫爲發佈(Release)版本倉庫仍是快照(Snapshot)版本倉庫;
4.Public Repositories下的倉庫
   1)3rd party: 沒法從公共倉庫得到的第三方發佈版本的構件倉庫,即第三方依賴的倉庫,這個數據一般是由內部人員自行下載以後發佈上去;
   2)Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫
   3)Central: 用來代理maven中央倉庫中發佈版本構件的倉庫
   4)Central M1 shadow: 用於提供中央倉庫中M1格式的發佈版本的構件鏡像倉庫
   5)Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫
   6)Releases: 內部的模塊中release模塊的發佈倉庫,用來部署管理內部的發佈版本構件的宿主類型倉庫;release是發佈版本;
   7)Snapshots:發佈內部的SNAPSHOT模塊的倉庫,用來部署管理內部的快照版本構件的宿主類型倉庫;snapshots是快照版本,也就是不穩定版本
因此自定義構建的倉庫組代理倉庫的順序爲:Releases,Snapshots,3rd party,Central。也可使用oschina放到Central前面,下載包會更快。
5.Nexus默認的端口是8081,能夠在etc/nexus-default.properties配置中修改。
6.Nexus默認的用戶名密碼是admin/admin123
7.當遇到奇怪問題時,重啓nexus,重啓後web界面要1分鐘左右後才能訪問。
8.Nexus的工做目錄是sonatype-work(路徑通常在nexus同級目錄下)
[root@master-node local]# pwd
/usr/local
[root@master-node local]# ls nexus/
bin deploy etc lib LICENSE.txt NOTICE.txt public system
[root@master-node local]# ls sonatype-work/
nexus3
[root@master-node local]# ls sonatype-work/nexus3/
backup blobs cache db elasticsearch etc generated-bundles health-check instances keystores lock log orient port tmp

Nexus倉庫分類的概念
1)Maven可直接從宿主倉庫下載構件,也能夠從代理倉庫下載構件,而代理倉庫間接的從遠程倉庫下載並緩存構件
2)爲了方便,Maven能夠從倉庫組下載構件,而倉庫組並無時間的內容(下圖中用虛線表示,它會轉向包含的宿主倉庫或者代理倉庫得到實際構件的內容).

 

Nexus的web界面功能介紹

1.Browse Server Content

1.1  Search
這個就是相似Maven倉庫上的搜索功能,就是從私服上查找是否有哪些包。
注意:
1)在Search這級是支持模糊搜索的,如圖所示:

2)若是進入具體的目錄,好像不支持模糊搜索,如圖所示:

1.2  Browse

1)Assets
這是能看到全部的資源,包含Jar,已經對Jar的一些描述信息。
2)Components
這裏只能看到Jar包。

2.Server Adminstration And configuration

看到這個選項的前提是要進行登陸的,如上面已經介紹登錄方法,右上角點擊「Sign In」的登陸按鈕,輸入admin/admin123,登陸成功以後,便可看到此功能,如圖所示:

2.1 Blob Stores
文件存儲的地方,建立一個目錄的話,對應文件系統的一個目錄,如圖所示:

2.2 Repositories

1)Proxy
這裏就是代理的意思,代理中央Maven倉庫,當PC訪問中央庫的時候,先經過Proxy下載到Nexus倉庫,而後再從Nexus倉庫下載到PC本地。
這樣的優點只要其中一我的從中央庫下來了,之後你們都是從Nexus私服上進行下來,私服通常部署在內網,這樣大大節約的寬帶。
建立Proxy的具體步驟
1--點擊「Create Repositories」按鈕

2--選擇要建立的類型

3--填寫詳細信息
Name:就是爲代理起個名字
Remote Storage: 代理的地址,Maven的地址爲: https://repo1.maven.org/maven2/
Blob Store: 選擇代理下載包的存放路徑

2)Hosted
Hosted是宿主機的意思,就是怎麼把第三方的Jar放到私服上。
Hosted有三種方式,Releases、SNAPSHOT、Mixed
Releases: 通常是已經發布的Jar包
Snapshot: 未發佈的版本
Mixed:混合的
Hosted的建立和Proxy是一致的,具體步驟和上面基本一致。以下:

注意事項:
Deployment Pollcy: 須要把策略改爲「Allow redeploy」。

3)Group
能把兩個倉庫合成一個倉庫來使用,目前沒使用過,因此沒作詳細的研究。

2.3 Security
這裏主要是用戶、角色、權限的配置(上面已經提到了在這裏添加用戶和角色等)

2.4 Support
包含日誌及數據分析。

2.5 System
主要是郵件服務器,調度的設置地方
這部分主要講怎麼和Maven作集成,集成的方式主要分如下種狀況:代理中央倉庫、Snapshot包的管理、Release包的管理、第三方Jar上傳到Nexus上。

代理中央倉庫
只要在PMO文件中配置私服的地址(好比http://192.168.1.14:8081)便可,配置以下:

<repositories>
        <repository>
            <id>maven-central</id>
            <name>maven-central</name>
            <url>http://192.168.1.14:8081/repository/maven-central/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

Snapshot包的管理
1)修改Maven的settings.xml文件,加入認證機制

<servers>
<server>
      <id>nexus</id>
      <username>admin</username>
      <password>admin123</password>
     </server>

2)修改工程的Pom文件

<distributionManagement>
        <snapshotRepository>
            <id>nexus</id>
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.14:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
        <site>
            <id>nexus</id>
            <name>Nexus Sites</name>
            <url>dav:http://192.168.1.14:8081/repository/maven-snapshots/</url>
        </site>
    </distributionManagement>

注意事項:

上面修改的Pom文件如截圖中的名字要跟/usr/local/maven/conf/settings.xml文件中的名字必定要對應上。

3)上傳到Nexus上

1--項目編譯成的jar是Snapshot(POM文件的頭部)

<groupId>com.woasis</groupId>
<artifactId>test-nexus</artifactId>
<version>1.0.0-<span style="color: #ff0000;">SHAPSHOT</span></version>
<packaging>jar</packaging>

2--使用mvn deploy命令運行便可(運行結果在此略過)

3--由於Snapshot是快照版本,默認他每次會把Jar加一個時間戳,作爲歷史備份版本。

Releases包的管理

1)與Snapshot大同小異,只是上傳到私服上的Jar包不會自動帶時間戳
2)與Snapshot配置不一樣的地方,就是工程的PMO文件,加入repository配置

<distributionManagement>
        <repository>
            <id>nexus</id>
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.14:8081/repository/maven-releases/</url>
        </repository>

3)打包的時候須要把Snapshot去掉

<groupId>com.woasis</groupId>
    <artifactId>test-nexus</artifactId>
    <version>1.0.0</version>
<packaging>jar</packaging>

第三方Jar上傳到Nexus

[root@master-node src]# mvn deploy:deploy-file -DgroupId=org.jasig.cas.client -DartifactId=cas-client-core -Dversion=3.1.3 -Dpackag
注意事項:
-DrepositoryId=nexus 對應的就是Maven中settings.xml的認證配的名字。

7、Nexus庫被刪除的恢復方法 
在整理Maven私服的時候,不當心把Release庫刪掉了。瞬間冒出冷汗來了!腦子裏閃過第一個辦法就是看是否有回收站,剛好在Nexus UI中看到了一個叫Trash...的功能。但是我點擊後發現只有Empty Trash的功能,這要按下去還得了啊。

最後在Sonatype Nexus官方搜索到一篇文章,原文以下:

When you delete a repository from the Nexus UI, nexus will remove the repository from any groups it belongs too and move the repository contents to 
it's trash folder. Sometimes you will want to restore this repository back into service.
To restore a deleted repository with id of 'releases':
1. mv sonatype-work/nexus/trash/releases sonatype-work/storage so that you end up with sonatype-work/storage/releases 2. Recreate the repository with the same repository id 'releases' using the repositories tab user interface. 3. Add the repository to any groups that it was in before. The act of creating the repository in the UI will force a reindex of the previous repository storage contents.

幸虧!找到了被刪除文件恢復的辦法。最後按照官方所提供的辦法成功地恢復了被刪Release庫下全部的數據。操做步驟以下:

1)首先找到sonatype-work/nexus/trash 下找到你刪除的庫,並保存到其餘地方;

2)而後經過nexus控制檯點擊Add,選擇Hosted Repository,而後輸入被刪除的Repository信息;

3)把剛纔保存的庫文件copy到指定的sonatype-work/nexus/storage/[releases]下便可;
4)點擊列表中的Public Repositories,而後在下方的Configuration標籤下將Releases添加到Ordered Group Repositories中;

5)最後Save保存就能夠了。

相關文章
相關標籤/搜索