您好,登錄后才能下訂單哦!
Maven介紹:
Maven是屬于apache軟件基金會下一個開源免費的項目,是跨平臺的項目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM.xml的文件中。主要服務于基于Java平臺的項目構建,依賴管理和項目信息管理,可以在代碼進行部署的過程中自動解決項目中代碼的依賴環境,需要從maven的鏡像倉庫中進行下載依賴環境,通常下載比較慢,企業中會在公司內部搭建nexus(私服),將構建項目中的依賴環境保存到nexus服務器中,提高訪問速度
POM項目對象模型,是Maven工程的基本工作單元,是一個XML文件,包含了項目的基本信息,用于描述項目如何構建,聲明項目依賴等等
執行任務或目標時,Maven會在當前目錄中查找POM。讀取POM,獲取所需的配置信息,然后執行目標
POM中可以指定以下配置:項目依賴、插件、執行目標、項目構建profile、項目版本、項目開發列表、相關郵件列表信息
Mavne功能:
應用場景: 從運維角度理解
1、 原來項目中的jar包必須手動復制、粘貼到WEB-INF/lib項目下,而借助maven,可以將jar包僅僅保存在倉庫中,有需要使用的工程只需要引用這個文件,并不需要重復復制到工程中
2、 原來的項目中所需要的jar包都是提前下載好的,而maven在聯網狀態下會自動下載所需要的jar包。首先在本地倉庫中找,找不到就在網上進行下載
3、 原來的項目中一個jar包所依賴的其他jar包必須手動導進來,而maven會自動將被依賴的jar包導進來
4、 原來的項目一個項目就是一個工程,而借助maven可以講一個項目拆分成多個工程
項目構建過程包括【清理項目】→【編譯項目】→【測試項目】→【生成測試報告】→【打包項目】→【部署項目】這幾個步驟,這六個步驟就是一個項目的完整構建過程。
關于倉庫
本地倉庫
maven會將工程依賴的構件(jar包)從遠程下載到本機一個目錄下管理,每個電腦默認的倉庫是在 "用戶家目錄/.m2/repository"
第三方倉庫
第三方倉庫又稱為內部中心倉庫,也成為私服
私服:一般是由公司自己設立的,只為本公司內部共享使用。它既可以作為公司內部構件協作和存檔,也可以作為公用類庫鏡像緩存,減少在外部訪問和下載的頻率(使用了私服就減少了對中央倉庫的訪問)
中央倉庫
maven內置了遠程公用倉庫:http://repo1.maven.org/maven2 這個公共倉庫是由maven自己維護,里面有大量的常用類庫,并包含了世界上大部分流行的開源項目構件,目前是以Java為主。工程以來的jar包如果本地倉庫沒有,默認從中央倉庫下載。
安裝Maven,需要依賴jdk1.8版本
24 cd /usr/src/
25 mkdir tomcat 創建放置tomcat包的目錄
26 cd tomcat/
27 rz 上傳tomcat相關安裝包
29 cd ..
30 mkdir macven+nexus 創建放置tomcat包的目錄
31 cd macven+nexus/
32 rz 上傳macven+nexus相關安裝包
33 ls
35 cd ../tomcat/
36 rpm -qa | grep jdk 查看linux有關jdk的包
40 rpm -e java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 java-1.8.0-openjdk-headless --nodeps 刪除自帶的jdk環境
41 tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/ 解壓jdk安裝包到/usr/local
42 vim /etc/profile 修改環境變量
在最后一行添加
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=/usr/local/jdk1.8.0_211/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
43 source /etc/profile 刷新一下環境變量
44 java -version 查看版本號
47 cd ../macven+nexus/
48 tar zxf apache-maven-3.6.1-bin.tar.gz
49 mv apache-maven-3.6.1 /usr/local/maven
50 vim /etc/profile 修改環境變量
在最后一行添加
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
51 source /etc/profile 刷新一下環境變量
測試maven是否安裝成功
52 mvn -v
構建第一個項目測試
55 mkdir /tmp/testdir
56 cd /tmp/testdir/
57 mvn archetype:generate -DgroupId=com.wuhao.maven.quickstart -DartifactIdk=bdqnapp -DarchetypeArtifactId=maven-archetype-quickstart
創建一個maven項目(Java類型),有交互就回車確認,可加-DinteractiveMode=false取消交互過程
命令解釋:archetype:generate:創建一個簡單的java項目
archetype 也就是原型,是一個 Maven 插件,準確說是一個項目模板,它的任務是根據模板創建一個項目結構。我們將使用 quickstart 原型插件創建一個簡單的 java 應用程序。
-DgroupId:組織名,公司網址的反寫(反向域名)+項目名稱
-DartifactIdk:項目名或者模塊名
- DarchetypeArtifactId:指定 ArchetypeId,maven-archetype-quickstart,創建一個簡單的 Java 應用
-DinteractiveMode: 是否使用交互模式
POM文件參數解釋
[root@localhost bdqnapp]# cat pom.xml
project: 根,這是對Project添加一些根元素的約束信息
modelversion:指定當前maven模型的版本號
grouopId:應該是公司名或者組織名。一般來說groupID有三個部分組成,每個部分之間以“.”分隔,第一部分是項目的用途,比如用于商業的就是com,用于非商業盈利性組織的就是org,第二部分是公司名,比如tentxun/baidu/alibaba,第三部分是你的項目名
artifactId:可以認為是maven構建的項目名,比如你的項目中有子項目,就可以使用“項目名-子項目的命名方式
packaging: 指定生成的格式(jar/war/rar/pom/ear)
version:版本號,SNAPSHOT意味快照,說明該項目還在開發中,是不穩定的版本
name:項目的名稱, Maven產生的文檔用
url:項目主頁的url,Maven產生的文檔用
dependencies標簽:指定開發構建(jar包)
JUnit是一個Java語言的單元測試框架
本地倉庫目錄結構
[root@localhost ~]# cd .m2/repository/ 安裝依賴的位置
[root@localhost repository]# ls
antlr commons-codec commons-io jdom org
asm commons-collections commons-lang net
Maven文件配置
Maven setting.xml存在兩個地方
1、安裝的目錄 /usr/local/apache-maven-3.6.0/conf/settings.xml
2、用戶的目錄 /root/.m2/settings.xml
其中,安裝目錄配置又叫做全局配置,用戶目錄配置被稱為用戶配置。如果兩者都存在,他們的內容將被合并,并且用戶范圍的settings.xml優先。
默認用戶目錄不存在配置文件,可以copy maven安裝目錄下的settings.xml到用戶目錄
常用配置修改
1、修改本地倉庫存儲路徑,默認值是/root/.m2/repository 可在settings.xml中的localrepository修改成自己需要的目錄
2、如果構建服務器因為網絡故障或者安全問題不能與遠程倉庫相連,需要離線模式下,設置offline屬性,設置為true,默認為false
3、修改中央倉庫服務器,修改配置文件中便簽,添加或修改鏡像地址
使用阿里云倉庫地址
vim /usr/local/maven/conf/settings.xml #160添加
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
mirror就是鏡像,主要提供一個方便地切換遠程倉庫地址的途徑
<mirrorOf>central</mirrorOf>里是要替代的倉庫的id。代理原有倉庫,如果填寫*表示替換所有倉庫
構建第一個項目測試
64 mkdir /xgp
65 cd /xgp/
66 mvn archetype:generate -DgroupId=com.wuhao.maven.quickstart -DartifactIdk=bdqnapp -DarchetypeArtifactId=maven-archetype-quickstart
Maven常用命令以及演示
68 cd bdqnapp/
69 ls
編譯:mvn compile
73 ls target/
74 cat target/classes/com/wuhao/maven/quickstart/App.class
75 cat src/main/java/com/wuhao/maven/quickstart/A
76 cat src/main/java/com/wuhao/maven/quickstart/App.java
/target 打包輸出目錄,如打包好的jar或war文件
/target/classes 編譯輸出目錄
/target/test-classes 測試編譯輸出目錄
79 mvn clean
80 mvn package
81 ls target/
83 mvn install
測試:mvn test
清理:mvn clean
打包:mvn package
安裝 mvn install
將壓縮文件jar包或者war包上傳到本地倉庫
86 ls /root/.m2/repository/com/wuhao/maven/quickstart/bdqnapp/1.0-SNAPSHOT/
發布:mvn deploy
將包上傳到私服,暫無私服環境,此模塊后續補充
命令生命周期
maven基于構建生命周期這個中心概念,這意味著構建和分發特定項目的過程被明確定義
例如:直接使用maven install命令對項目進行上傳到本地倉庫,那么前面所有的步驟將會自動執行,比如源代碼的編譯、打包等等
構建一個web項目,打出war包
88 cd ..
89 mvn archetype:generate -DgroupId=cn.bdqn.bdqnweb -DartifactId=bdqnweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
90 ls
91 cd bdqnweb/
92 cat src/main/webapp/index.jsp
93 mvn package
目錄結構
打war包
Tomcat運行war包,搭建tomcat將war包放入tomcat網頁根目錄中,啟動tomcat訪問測試
94 cd /usr/src/tomcat/
95 tar zxf apache-tomcat-8.5.35.tar.gz
96 mv apache-tomcat-8.5.35 /usr/local/tomcat
97 /usr/local/tomcat/bin/startup.sh
98 netstat -anpt | grep 8080
99 systemctl stop firewalld
100 cd /xgp/bdqnweb/
101 ls
102 cd tar
103 cd target/
104 cp bdqnweb /usr/local/tomcat/webapps/
105 ls
106 cp bdqnweb.war /usr/local/tomcat/webapps/
107 pwd
Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫服務器,在代理遠程倉庫的同時維護本地倉庫,以節省帶寬和時間,Nexus就可以滿足這樣的需要。此外,他還提供了強大的倉庫管理功能,構件搜索功能,它基于REST,友好的UI是一個extjs的REST客戶端,它占用較少的內存,基于簡單文件系統而非數據庫。這些優點使其日趨成為最流行的Maven倉庫管理器。
Nexus不是Maven的核心概念,它僅僅是一種衍生出來的特殊的Maven倉庫。對于Maven來說,倉庫只有兩種:本地倉庫和遠程倉庫。
本地倉庫就是我們在maven的setting.xml中配置的本地倉庫地址。由于最原始的本地倉庫是空的,Maven必須知道至少一個可用的遠程倉庫,才能在執行Maven命令的時候下載到需要的構件。中央倉庫是maven默認的遠程倉庫。
私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之后,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。
jboss是一個開放源代碼的應用服務器 java .net是指java倉庫和.net倉庫
Nexus的功能:
1、節省外網帶寬。大量對于外部倉庫的重復請求會消耗帶寬,利用私服代理外部倉庫,可以消除對外的重復構件下載,降低帶寬的壓力。
2、加速Maven構建。加速Maven構建。不停地連接請求外部倉庫十分的耗時,Maven在執行構建的時候不停地檢查遠程倉庫的數據。利用私服,Maven只檢查局域網的數據,提高構建的速度。
3、部署第三方構件。部署第三方構件。當某個構件無法從任何一個外部遠程倉庫獲得。建立私服之后,便可以將這些構件部署到私服,供內部的Maven項目使用。
4、提高穩定性,增強控制。提高穩定性,增強控制。Maven構建高度依賴于遠程倉庫,因此,當網絡不穩定的時候,Maven構建也會變得不穩定,甚至無法構建。私服緩存了大量構建,即使暫時沒有網絡,Maven也可以正常的運行。
5、降低中央倉庫的負荷。降低中央倉庫的負荷。使用私服可以避免很多對中央倉庫的重復下載,降低中央倉庫的壓力。
安裝nexus:
108 cd
109 mkdir /usr/local/nexus
110 cd /usr/src/macven+nexus/
111 tar zxf nexus-3.17.0-01-unix.tar.gz -C /usr/local/nexus/
112 useradd nexus
113 chown -R nexus /usr/local/nexus/
114 cd /usr/local/nexus/
115 ls
nexus-3.17.0-01/ 為應用目錄 sonatype-work/ 為工作目錄,存放鏡像倉庫
運行內存和工作目錄nexus-3.17.0-01/bin/nexus.vmoptions (修改對應字段即可)
運行監聽地址和端口nexus-3.17.0-01/etc/nexus-default.properties
Nexus默認運行的端口為8081,這個版本不能使用root用戶啟動,要不會報下面的錯誤
117 ln -s /usr/local/nexus/nexus-3.17.0-01/bin/nexus /usr/local/bin/
118 nexus start
[root@localhost nexus]# su nexus
[nexus@localhost nexus]$ nexus start
Starting nexus
[nexus@localhost nexus]$ netstat -anpt | grep 8081
(No info could be read for "-p": geteuid()=1001 but you should be root.)
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN -
瀏覽器訪問http://192.168.1.40:8081
cat /usr/local/nexus/sonatype-work/nexus3/admin.password 查看密碼復制到密碼框
然后一路下一步
創建角色和用戶
默認倉庫類型:
group(倉庫組類型):又叫組倉庫,用于方便開發人員,自己設定的倉庫
hosted(宿主類型):內部項目的發布倉庫(內部開發人員發布上去存放的倉庫)
proxy(代理類型):從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值,即被代理的遠程倉庫的路徑)
virtual(虛擬類型):虛擬倉庫(這個基本上用不到)
Public Repositories下的倉庫類型
3rd party: 無法從公共倉庫獲得的第三方發布版本的構件倉庫,即第三方依賴的倉庫,這個數據通常是由內部人員自行下載之后發布上去;
Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫
Central: 用來代理maven中央倉庫中發布版本構件的倉庫
entral M1 shadow: 用于提供中央倉庫中M1格式的發布版本的構件鏡像倉庫
Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫
Releases: 內部的模塊中release模塊的發布倉庫,用來部署管理內部的發布版本構件的宿主類型倉庫;release是發布版本;
Snapshots:發布內部的SNAPSHOT模塊的倉庫,用來部署管理內部的快照版本構件的宿主類型倉庫;snapshots是快照版本,也就是不穩定版本
開啟 release的重復發版權限
開發中需要重復發版,則需要開啟release類型倉庫的對應權限設置 allow redeploy
設置代理倉庫(阿里云maven倉庫)
點擊頁面下邊的create repository 創建完成之后可以看到新增加了阿里云庫
將添加的阿里云proxy加入默認group中
點擊頁面下的save創建完成后再次點進來就會看到當前nexus地址
常見使用場景
重點:
release發版倉庫(nexus默認已建立:maven-releasees)
snapshot 測試中心快照倉庫(nexus默認已建立:maven-snapshots)
central 中央倉庫 (nexus默認已建立:maven-central)
關于組:在nexus中可以建立組,將不同類型倉庫集合在一起(nexus默認已建立:maven-public)
場景一: 自定義新建proxy類型倉庫,在maven配置中分別配置不同調用地址,或是將自定義新建的proxy倉庫統一加入一個組,在maven配置中調用一個地址
場景二: 使用maven已經建立好的proxy倉庫,且使用已建立好的組(maven-public)配置maven調用地址
場景一和場景二本質上講沒有什么變化,根據公司開發習慣和需求進行配置即可
Mavne配置nexus私服,將遠程倉庫設置成本地搭建的nuxus私服
回到maven的配置文件路徑修改主配置文件
123 cd /usr/local/maven/conf/
125 vim settings.xml
<mirror>
<id>nexus-bdqnconf</id>
<mirrorOf>*</mirrorOf>
<name>nexus bdqnconf</name>
<url>http://192.168.1.40:8081/repository/maven-public/</url> #171
</mirror>
![](https://s1.51cto.com/images/blog/201911/19/1a7ae62c2562ac9aa968d4b9b5d003dd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
<profile> #289
<id>bdqnconf</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://192.168.1.40:8081/repository/maven-public/</url>
<releases>
<enable>true</enable>
</releases>
<snapshots>
<enable>true</enable>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://192.168.1.40:8081/repository/maven-public/</url>
<releases>
<enable>true</enable>
</releases>
<snapshots>
<enable>true</enable>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
激活上面的profile,<activeProfile>里面的內容一定要上面profile的id
<activeProfiles> #299
<activeProfile>bdqnconf</activeProfile>
</activeProfiles>
創建一個maven項目進行測試,先刪除本地倉庫的緩存
127 cd /xgp/
128 rm -rf /root/.m2/repository/*
129 mvn archetype:generate -DgroupId=cn.bdqn.bdqnweb -DartifactId=bdqnweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
先進入已存在bdqnweb清除緩存
142 cd /xgp/bdqnweb/
144 mvn clean
將項目進行打包,回到nexus中查看是否有緩存依賴包
147 mvn package
配置認證將打包好的項目上傳到nexus中,配置認證上傳不了
[root@localhost bdqnweb]# vim /usr/local/maven/conf/settings.xml
<server> #133
<id>test-nexus</id>
<username>xgpdev</username>
<password>1234.com</password>
</server>
[root@localhost bdqnweb]# vim /xgp/bdqnweb/pom.xml
<distributionManagement> #23
<snapshotRepository>
<id>test-nexus</id> (這里的id需要和setting配置文件中的id相同)
<name>Nexus Snapshot</name>
<url>http://192.168.1.40:8081/repository/maven-snapshots/</url>
</snapshotRepository>
<repository>
<id>test-nexus</id>
<name>Nexus releases</name>
<url>http://192.168.83.3:8081/repository/maven-releases/</url>
</repository>
</distributionManagement>
回到nexus中查看是否上傳成功
這里是測試版的有時間戳
###如果在部署的過程中出現下面報錯,這種錯誤是因為權限的問題,第一檢查一下配置settings.xml的時候賬號密碼有沒有寫錯,第二個檢查一下settings.xml里的id標簽和pom.xml文件中的id標簽是否相同,不相同會報401的錯誤
上傳到maven-releases倉庫
如果要打release包,可以將pom文件中的SNAPSHOT標識去掉
把這行 <version>1.0-SNAPSHOT</version> 改成 <version>1.0</version>
[root@localhost bdqnweb]# vim /xgp/bdqnweb/pom.xml
<version>1.0</version> #7
再次上傳maven包,可以在終端看到上傳到releases倉庫中
[root@localhost bdqnweb]# mvn deploy
上傳第三方maven包到nexus私服中
Maven添加第三方倉庫地址(全局配置)
[root@localhost ~]# vim /usr/local/maven/conf/settings.xml
<repository> #294添加
<id>3rdnexus</id>
<url>http://192.168.1.40:8081/repository/3rd/</url> #(剛剛復制的)
<release>
<enable>true</enable>
</release>
<snapshots>
<enable>true</enable>
</snapshots>
</repository>
添加一個3rd認證
<server> #138添加
<id>3rdnexus</id>
<username>xgpdev</username>
<password>1234.com</password>
</server>
[root@localhost target]# mv /usr/src/macven+nexus/aliyun-sdk-oss-2.6.1.jar .
[root@localhost target]# mvn deploy:deploy-file -DgroupId=com.aliyun.oss -DartifactId=aliyun-sdk-oss -Dversion=2.6.1 -Dpackaging=jar -Dfile=/xgp/bdqnweb/target/aliyun-sdk-oss-2.6.1.jar -Durl=http://192.168.1.40:8081/repository/3rd/ -DrepositoryId=3rdnexus
瀏覽器查看
實驗完畢
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。