Maven介紹 Apache Maven是一個創(chuàng)新的軟件項目管理和綜合工具。 Maven提供了一個基于項目對象模型(POM)文件的新概念來管理項目的構(gòu)建,可以從一個中心資料片管理項目構(gòu)建,報告和文件。 Maven最強大的功能就是能夠自動下載項目依賴庫。 Maven提供了開發(fā)人員構(gòu)建一個完整的生命周期框架。開發(fā)團隊可以自動完成項目的基礎工具建設,Maven使用標準的目錄結(jié)構(gòu)和默認構(gòu)建生命周期。 在多個開發(fā)團隊環(huán)境時,Maven可以設置按標準在非常短的時間里完成配置工作。由于大部分項目的設置都很簡單,并且可重復使用,Maven讓開發(fā)人員的工作更輕松,同時創(chuàng)建報表,檢查,構(gòu)建和測試自動化設置。 Maven項目的結(jié)構(gòu)和內(nèi)容在一個XML文件中聲明,pom.xml 項目對象模型(POM),這是整個Maven系統(tǒng)的基本單元。
Maven提供了開發(fā)人員的方式來管理: 1)Builds 2)Documentation 3)Reporting 4)Dependencies 5)SCMs 6)Releases 7)Distribution 8)mailing list 概括地說,Maven簡化和標準化項目建設過程。處理編譯,分配,文檔,團隊協(xié)作和其他任務的無縫連接。 Maven增加可重用性并負責建立相關的任務。 Maven最初設計,是以簡化Jakarta Turbine項目的建設。在幾個項目,每個項目包含了不同的Ant構(gòu)建文件。 JAR檢查到CVS。 Apache組織開發(fā)Maven可以建立多個項目,發(fā)布項目信息,項目部署,在幾個項目中JAR文件提供團隊合作和幫助。
Maven主要目標是提供給開發(fā)人員: 1)項目是可重復使用,易維護,更容易理解的一個綜合模型。 2)插件或交互的工具,這種聲明性的模式。
私服介紹 私服是指私有服務器,是架設在局域網(wǎng)的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構(gòu)建。有了私服之后,當 Maven 需要下載構(gòu)件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構(gòu)件下載到私服,再提供給本地倉庫下載。

Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了本地內(nèi)部倉庫的維護和外部倉庫的訪問。 如果使用了公共的Maven倉庫服務器,可以從Maven中央倉庫下載所需要的構(gòu)件(Artifact),但這通常不是一個好的做法。 正常做法是在本地架設一個Maven倉庫服務器,即利用Nexus私服可以只在一個地方就能夠完全控制訪問和部署在你所維護倉庫中的每個Artifact。 Nexus在代理遠程倉庫的同時維護本地倉庫,以降低中央倉庫的負荷,節(jié)省外網(wǎng)帶寬和時間,Nexus私服就可以滿足這樣的需要。 Nexus是一套“開箱即用”的系統(tǒng)不需要數(shù)據(jù)庫,它使用文件系統(tǒng)加Lucene來組織數(shù)據(jù)。 Nexus使用ExtJS來開發(fā)界面,利用Restlet來提供完整的REST APIs,通過m2eclipse與Eclipse集成使用。 Nexus支持WebDAV與LDAP安全身份認證。 Nexus還提供了強大的倉庫管理功能,構(gòu)件搜索功能,它基于REST,友好的UI是一個extjs的REST客戶端,它占用較少的內(nèi)存,基于簡單文件系統(tǒng)而非數(shù)據(jù)庫。
為什么要構(gòu)建Nexus私服? 如果沒有Nexus私服,我們所需的所有構(gòu)件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重復的從maven倉庫下載構(gòu)件無疑加大了倉庫的負載和浪費了外網(wǎng)帶寬,如果網(wǎng)速慢的話,還會影響項目的進程。很多情況下項目的開發(fā)都是在內(nèi)網(wǎng)進行的,連接不到maven倉庫怎么辦呢?開發(fā)的公共構(gòu)件怎么讓其它項目使用?這個時候我們不得不為自己的團隊搭建屬于自己的maven私服,這樣既節(jié)省了網(wǎng)絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構(gòu)件。
總之,在本地構(gòu)建nexus私服的好處有: 1)加速構(gòu)建; 2)節(jié)省帶寬; 3)節(jié)省中央maven倉庫的帶寬; 4)穩(wěn)定(應付一旦中央服務器出問題的情況); 5)控制和審計; 6)能夠部署第三方構(gòu)件; 7)可以建立本地內(nèi)部倉庫; 8)可以建立公共倉庫 這些優(yōu)點使得Nexus日趨成為最流行的Maven倉庫管理器。
Maven的安裝 下載地址:http://maven./download.cgi 提前在服務器上安裝jdk環(huán)境(參考:Centos中yum方式安裝java) [root@master-node ~]# cd /usr/local/src/ [root@master-node src]# wget http://mirrors./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/maven
接著配置系統(tǒng)環(huán)境變量,在/etc/profile文件底部添加如下內(nèi)容: [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的環(huán)境變量設置 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的環(huán)境變量設置 export PATH=$PATH:$MAVEN_HOME/bin [root@master-node src]# source /etc/profile
最后驗證是否安裝成功,出現(xiàn)如下信息,說明安裝成功 [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"
Nexus安裝 Nexus的安裝有兩種實現(xiàn)方式: 1)war包安裝方式 下載地址:https://sonatype-download.global.ssl./nexus/oss/nexus-2.14.2-01.war 直接將war包放在tomcat的根目錄下,啟動tomcat就可以用了
2)源碼安裝方式(之前在用的是2.14.4版本,這里是新版本) 下載地址:https://www./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./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 上面在啟動過程中出現(xiàn)告警:不推薦使用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 (如果出現(xiàn)404,就訪問http://localhost:8081/nexus)

出現(xiàn)上述頁面,說明配置nexus成功! 點擊右上角“Log in”, 輸入默認用戶名(admin)和默認密碼(admin123)登錄
可以點擊上面的“設置”圖標,在“設置”里可以添加用戶、角色,對接LDAP等的設置,如下:


可以在“管理”里查看nexus的系統(tǒng)信息

注意下面幾點說明: 1.component name的一些說明: 1)maven-central:maven中央庫,默認從https://repo1./maven2/拉取jar 2)maven-releases:私庫發(fā)行版jar 3)maven-snapshots:私庫快照(調(diào)試版本)jar 4)maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml中使用。 2.Nexus默認的倉庫類型有以下四種: 1)group(倉庫組類型):又叫組倉庫,用于方便開發(fā)人員自己設定的倉庫; 2)hosted(宿主類型):內(nèi)部項目的發(fā)布倉庫(內(nèi)部開發(fā)人員,發(fā)布上去存放的倉庫); 3)proxy(代理類型):從遠程中央倉庫中尋找數(shù)據(jù)的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值即被代理的遠程倉庫的路徑); 4)virtual(虛擬類型):虛擬倉庫(這個基本用不到,重點關注上面三個倉庫的使用); 3.Policy(策略):表示該倉庫為發(fā)布(Release)版本倉庫還是快照(Snapshot)版本倉庫; 4.Public Repositories下的倉庫 1)3rd party: 無法從公共倉庫獲得的第三方發(fā)布版本的構(gòu)件倉庫,即第三方依賴的倉庫,這個數(shù)據(jù)通常是由內(nèi)部人員自行下載之后發(fā)布上去; 2)Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構(gòu)件倉庫 3)Central: 用來代理maven中央倉庫中發(fā)布版本構(gòu)件的倉庫 4)Central M1 shadow: 用于提供中央倉庫中M1格式的發(fā)布版本的構(gòu)件鏡像倉庫 5)Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構(gòu)件的倉庫 6)Releases: 內(nèi)部的模塊中release模塊的發(fā)布倉庫,用來部署管理內(nèi)部的發(fā)布版本構(gòu)件的宿主類型倉庫;release是發(fā)布版本; 7)Snapshots:發(fā)布內(nèi)部的SNAPSHOT模塊的倉庫,用來部署管理內(nèi)部的快照版本構(gòu)件的宿主類型倉庫;snapshots是快照版本,也就是不穩(wěn)定版本 所以自定義構(gòu)建的倉庫組代理倉庫的順序為: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可直接從宿主倉庫下載構(gòu)件,也可以從代理倉庫下載構(gòu)件,而代理倉庫間接的從遠程倉庫下載并緩存構(gòu)件 2)為了方便,Maven可以從倉庫組下載構(gòu)件,而倉庫組并沒有時間的內(nèi)容(下圖中用虛線表示,它會轉(zhuǎn)向包含的宿主倉庫或者代理倉庫獲得實際構(gòu)件的內(nèi)容).

Nexus的web界面功能介紹
1.Browse Server Content

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

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

1.2 Browse

1)Assets 這是能看到所有的資源,包含Jar,已經(jīng)對Jar的一些描述信息。 2)Components 這里只能看到Jar包。
2.Server Adminstration And configuration
看到這個選項的前提是要進行登錄的,如上面已經(jīng)介紹登陸方法,右上角點擊“Sign In”的登錄按鈕,輸入admin/admin123,登錄成功之后,即可看到此功能,如圖所示:

2.1 Blob Stores 文件存儲的地方,創(chuàng)建一個目錄的話,對應文件系統(tǒng)的一個目錄,如圖所示:

2.2 Repositories

1)Proxy 這里就是代理的意思,代理中央Maven倉庫,當PC訪問中央庫的時候,先通過Proxy下載到Nexus倉庫,然后再從Nexus倉庫下載到PC本地。 這樣的優(yōu)勢只要其中一個人從中央庫下來了,以后大家都是從Nexus私服上進行下來,私服一般部署在內(nèi)網(wǎng),這樣大大節(jié)約的寬帶。 創(chuàng)建Proxy的具體步驟 1--點擊“Create Repositories”按鈕

2--選擇要創(chuàng)建的類型

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

2)Hosted Hosted是宿主機的意思,就是怎么把第三方的Jar放到私服上。 Hosted有三種方式,Releases、SNAPSHOT、Mixed Releases: 一般是已經(jīng)發(fā)布的Jar包 Snapshot: 未發(fā)布的版本 Mixed:混合的 Hosted的創(chuàng)建和Proxy是一致的,具體步驟和上面基本一致。如下:



注意事項: Deployment Pollcy: 需要把策略改成“Allow redeploy”。

3)Group 能把兩個倉庫合成一個倉庫來使用,目前沒使用過,所以沒做詳細的研究。
2.3 Security 這里主要是用戶、角色、權限的配置(上面已經(jīng)提到了在這里添加用戶和角色等)

2.4 Support 包含日志及數(shù)據(jù)分析。

2.5 System 主要是郵件服務器,調(diào)度的設置地方 這部分主要講怎么和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命令運行即可(運行結(jié)果在此略過)
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的認證配的名字。
|