1.Maven介紹
Apache Maven是一個創新的軟件項目管理和綜合工具。
Maven提供了一個基於項目對象模型(POM)文件的新概念來管理項目的構建,可以從一個中心資料片管理項目構建,報告和文件。
Maven最強大的功能就是能夠自動下載項目依賴庫。
Maven提供了開發人員構建一個完整的生命周期框架。開發團隊可以自動完成項目的基礎工具建設,Maven使用標准的目錄結構和默認構建生命周期。
在多個開發團隊環境時,Maven可以設置按標准在非常短的時間里完成配置工作。由於大部分項目的設置都很簡單,並且可重復使用,Maven讓開發人員的工作更輕松,同時創建報表,檢查,構建和測試自動化設置。
Maven項目的結構和內容在一個XML文件中聲明,pom.xml 項目對象模型(POM),這是整個Maven系統的基本單元。
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文件提供團隊合作和幫助。
Maven主要目標是提供給開發人員:
1)項目是可重復使用,易維護,更容易理解的一個綜合模型。
2)插件或交互的工具,這種聲明性的模式。
2.私服介紹
私服是指私有服務器,是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構建。有了私服之后,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。
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客戶端,它占用較少的內存,基於簡單文件系統而非數據庫。
1.為什么要構建Nexus私服
如果沒有Nexus私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重復的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,如果網速慢的話,還會影響項目的進程。很多情況下項目的開發都是在內網進行的,連接不到maven倉庫怎么辦呢?開發的公共構件怎么讓其它項目使用?這個時候我們不得不為自己的團隊搭建屬於自己的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構件。
2.本地構建Nexus私服的好處
1)加速構建;
2)節省帶寬;
3)節省中央maven倉庫的帶寬;
4)穩定(應付一旦中央服務器出問題的情況);
5)控制和審計;
6)能夠部署第三方構件;
7)可以建立本地內部倉庫;
8)可以建立公共倉庫
這些優點使得Nexus日趨成為最流行的Maven倉庫管理器。
4.maven的安裝
下載地址:http://maven.apache.org/download.cgi
提前在服務器上安裝jdk環境(參考:https://www.cnblogs.com/qingbaizhinian/p/12201073.html)具體需要什么版本,看我們我們需要安裝什么版本的maven.
安裝過程
[root@test-no ~]# cd /usr/local/src/ [root@test-no src]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz [root@test-no src]# tar -zvxf apache-maven-3.3.9-bin.tar.gz [root@test-no src]# ll total 8296 drwxr-xr-x 6 root root 99 May 13 14:10 apache-maven-3.3.9 -rw-r--r-- 1 root root 8491533 Nov 18 2015 apache-maven-3.3.9-bin.tar.gz [root@test-no src]# mv apache-maven-3.3.9 /usr/local/maven
#接着配置系統環境變量,在/etc/profile文件底部添加如下內容: [root@test-no java]# vim /etc/profile 。。。。 export JAVA_HOME=/usr/java/default #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@test-no java]# source /etc/profile #最后驗證是否安裝成功,出現如下信息,說明安裝成功
[root@test-no java]# mvn --version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00) Maven home: /usr/local/maven Java version: 1.8.0_241, vendor: Oracle Corporation Java home: /usr/java/jdk1.8.0_241-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-693.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.源碼安裝方式
下載地址:https://www.sonatype.com/download-oss-sonatype (雲盤下載:鏈接:https://pan.baidu.com/s/1BbKcMODLnciSi6oHVYWm8g
提取碼:lb8j)
[root@test-no ~]# cd /usr/local/src/ [root@test-no src]# wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.12.1-01-unix.tar.gz [root@test-no src]# tar -zxvf nexus-3.12.1-01-bundle.tar.gz
[root@test-no src]# mv nexus-3.12.1-01 /usr/local/nexus
[root@test-no 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}
#啟動nexus(默認端口是8081)
[root@test-no 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@test-no src]# vim /etc/profile
export RUN_AS_USER=root
[root@test-no src]# source /etc/profile
[root@test-no src]# lsof -i:8081 #nexus服務啟動成功后,需要稍等一段時間,8081端口才起來
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 18742 root 914u IPv4 2577829 0t0 TCP *:tproxy (LISTEN
這個時候一般就可以進行訪問了,如果訪問出問題,用下面的解決方法
在部署機上的iptables里打開8081端口 這里需要注意的是centos7下/etc/sysconfig/目錄沒有iptables,解決方法如下: 1.不管防火牆關沒關,都是用systemctl stop firewalld 關閉防火牆。 2.然后使用yum install iptables-services 安裝或者更新服務 3.然后使用systemctl enable iptables 啟動iptables 4.最后使用systemctl start iptables 打開iptables 5.輸入命令vim /etc/sysconfig/iptables 6.既可以修改iptables文件 [root@test-no src]# vim /etc/sysconfig/iptables 。。。。 -A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT [root@test-no src]# systemctl restart iptables 訪問nexus,即http://localhost:8081 (如果出現404,就訪問http://localhost:8081/nexus),如果訪問還是沒反應,多是防火牆的問題,
解決方法可以參考學習一下,防火牆的相關配置,如果上線緊急,可以粗暴點,直接iptables -F先清空防火牆
進入web頁面發現上面的提示,解決方法如下
[root@test-no ~]# vim /etc/security/limits.conf #修改配置文件,加入下面兩行 * soft nofile 65536 * hard nofile 65536
[root@test-no ~]# /usr/local/nexus/bin/nexus restart #重啟nexus
6.Nexus的說明和使用
1.Nexus默認的倉庫類型
在界面中點擊 配置的圖標,點擊 Repositorys,就可以看見倉庫的列表信息,可以看見倉庫有一個字段類型叫Type,如下圖所示
1、hosted(宿主倉庫): 主要用於存儲無法從中央倉庫獲取的包(比如數據庫的驅動包),以及微服務項目之前依賴的API包(比如商品系統需要調用價格系統的 API)
2、proxy (代理倉庫):代理公共的遠程倉庫(比如,所有的服務器都只能訪問內外服務器,而只有這台服務器可以訪問外網時,就可以用這台服務器為所有的機器做一層代理)
3、virtual 虛擬倉庫:用於適配 Maven 1
4、group (倉庫組):倉庫組,用來合並多個hosted/proxy倉庫,當你的項目希望在多個repository使用依賴項時,無需引用多個倉庫了,只需要引用一個類型為group的repository即可,下載時按配置順序從中依次查找,。
2.component name的一些說明:
1)maven-central:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar ,這個地址在國外,一般我們在這里會把改成國內阿里雲的http://maven.aliyun.com/nexus/content/groups/public
2)maven-releases:私庫發行版jar
3)maven-snapshots:私庫快照(調試版本)jar
4)maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml中使用。
3.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前面,下載包會更快。
4.nexus目錄和配置文件介紹
1.Nexus默認的端口是8081,可以在etc/nexus-default.properties配置中修改。
2.Nexus默認的用戶名密碼是admin/admin123
3.當遇到奇怪問題時,重啟nexus,重啟后web界面要1分鍾左右后才能訪問。
4.Nexus的工作目錄是sonatype-work(路徑一般在nexus同級目錄下)
[root@test-no nexus]# pwd /usr/local/nexus [root@test-no nexus]# ll etc/nexus-default.properties -rw-r--r-- 1 nexus nexus 341 Jun 8 2018 etc/nexus-default.properties [root@test-no nexus]# cd .. [root@test-no local]# ll sonatype-work/ total 0 drwxr-xr-x 14 nexus nexus 220 May 13 17:54 nexus3 [root@test-no local]# cd sonatype-work/ [root@test-no sonatype-work]# pwd /usr/local/sonatype-work
[root@nexus1-no iflytek]# cat nexus/bin/nexus.vmoptions #源碼安裝的在這里設置了啟動參數,這里可以知道數據目錄
-Xms1200M
-Xmx1200M
-XX:MaxDirectMemorySize=2G
-XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass
-XX:+LogVMOutput
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=../sonatype-work/nexus3 #這里就是指定數據目錄
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
5.倉庫的創建和權限的配置
1.倉庫的創建
2.權限的創建
數據權限:repository權限有兩種類型,repository admin和repository view,每種類型又有6種權限標識,分別是:*,add,browse、delete、edit、read,*包含其它5種權限,也可以自定義操作標識,正常系統的生成權限足夠使用
- nx-repository-admin 開頭的是針對倉庫本身的相關權限
- nx-repository-view 開頭的是針對倉庫里jar的相關權限
3.角色的創建
4.用戶的創建
至此nexus倉庫的創建和權限指定已演示完畢。接下來演示nexus結合maven進行依賴倉庫的使用和依賴組件的上傳
6.新建的hosted和proxy庫如何加入指定倉庫組
具體操作步驟如下圖
7.依賴包上傳倉庫
1.通過項目層面進行上傳
1.在項目的pom.xml配置相關信息
<distributionManagement> <repository> <id>test-release</id> #這里的name和id名字隨便取,但是id要和setting.xml里一樣,因為需要指定有上傳的用戶權限 <name>test-release</name> <url>http://172.31.46.3:8081/repository/test-release/</url> </repository> </distributionManagement>
2.在setting.xml配置相關信息
<server> <id>test-release</id> #這個id隨便取,和pom.xml里面的id一致就行。下面寫有權限的賬號和密碼。 <username>test-release</username> <password>liu342622</password> </server>
3.進入項目所在目錄下執行
mvn deploy
2.通過web界面直接上傳
3.通過命令上傳
mvn deploy:deploy-file -DgroupId=IME.PyEngine.Test -DartifactId=Client.Make -Dversion=112 \
-Dpackaging=jar -Dfile=D:\AiInput\trunk\code_mix\Target\AiInput_RELEASE.jar
-Durl=http://maven.iflytek.com:8081/nexus/content/repositories/CTI-3rdParty/
-DrepositoryId=thirdparty
8.nexus跨主機遷移(附帶版本升級操作)
nexus跨主機遷移分跨主機同版本遷移和不同版本遷移。
1.跨主機同版本遷移
nexus的跨主機同版本遷移只需把nexus的主目錄和nexus的數據目錄sonatype-work傳到新的服務器上就行,這個比較簡單。(這里的同版本的意思是同一個大版本號)
2.同版本升級
這里的同版本升級只是升級小版本號。列如2.10.4版本升級到2.14.8。這里一般我都會在老版本的服務器上直接安裝一個新的,然后改一個啟動端口號,然后把老sonatype-work 目錄里的數據拷到新的數據目錄里,然后直接啟動就行了,這個時候你會發現系統上運行了兩個nexus,只是端口號不一樣。進新的nexus里看數據對不對,發現數據完整的遷移過來了。
這個只需把老nexus停掉就行。這樣就完成了同版本升級了。
3.跨主機版本遷移(跨版本升級一樣)
nexus跨版本主機遷移的話,這個比較麻煩,列如從2.10.4版本的nexus遷移到3.12.1,這里遷移之前還需要把2.10.4版本升級到2.14.8或者更新的2.幾版本,這樣才能進行跨版本遷移,
不然你直接遷移的話,就會報版本不支持的提示,提示里會告訴你老機器需要是什么版本nexux才能遷移到新的nexus里
如果不升級成2.14.8,下面的遷移動作會報下面的提示,為了不做重復工,我們提前升級成2.14.8
准備工作做好后,執行下面操作進行跨版本遷移。
首先在老版本機器上配置Upgrade:Agent,Upgrade:Agent的配置比較簡單,如下
上圖中的Access Token非常重要,進行遷移的時候要用這個值,你可以設一個自己容易記得值,我這里設成qingbai123下圖就是我們設置好的Upgrade:Agent
然后我們到新版本nexus上執行下面操作,首先開啟Upgrade功能,如下
接着在新nexus上執行遷移操作,nexus遷移操作是在web界面完成的,具體操作如下
上圖中的url填寫的是老nexus的web訪問地址,Access Token是老nexus的Upgrade:Agent中配置的是qingbai123。
下面基本就可以一路next就行了。
上圖說明已經倉庫已經遷移完畢,下面我們可以通過web界面和du -sh驗證這老新兩個倉庫的完整性。