Maven專案管理
Maven是什麼?
- Maven是Apache下的專案管理工具,它由純Java語言開發,可以幫助我們更方便的管理和構建Java專案。
為什麼要使用Maven?
1、 jar包管理:
- a) 從Maven中央倉庫獲取標準的規範的jar包以及相關依賴的jar包,避免自己下載到錯誤的jar包;
- b) 本地倉庫統一管理jar包,使jar包與專案分離,減輕專案體積。
2、 maven是跨平臺的可以在window、linux上使用。
3、 清晰的專案結構;
4、 多工程開發,將模組拆分成若干工程,利於團隊協作開發。
5、 一鍵構建專案:使用命令可以對專案進行一鍵構建,作業系統中無需安裝eclipse和tomcat。
下載、安裝、配置環境變數Maven
a) http://maven.apache.org/download.cgi
b) 安裝JDK 1.8;
c) 配置環境變數;
-
i. win + r 開啟執行視窗 或者 進入cmd命令視窗;
-
ii. 輸入sysdm.cpl開啟系統屬性 -> 高階 -> 環境變數;
-
iii. 新建系統變數,變數名:
MAVEN_HOME
,變數值:Maven安裝路徑
; -
iv. 在
Path
下追加一條屬性指向Maven的bin目錄%MAVEN_HOME%/bin
Maven的優點
a) jar包管理:依賴管理
-
i. 從Maven中央倉庫獲取標準的規範的jar包以及相關依賴的jar包,避免自己下載到錯誤的jar包;
-
ii. 本地倉庫統一管理jar包,使jar包與專案分離,減輕專案體積。
-
iii. Maven專案通過座標的方式從本地倉庫獲取jar包;
座標 | 本地倉庫 |
---|---|
由公司/組織名(groupId) + 專案名/子專案名(artifactId) + 版本號(version)組成 | 存放很多jar包,供Maven專案使用 |
-
Maven通過建立本地倉庫索引,可以快速的找到符合要求的jar包,從而解決效率問題;
-
多個Maven專案都可以從本地倉庫獲取jar包;
-
設定本地倉庫:maven根目錄 -> conf -> settings.xml,將
localRepository
標籤中的路徑替換成自己本地倉庫的路徑;
- iv. Maven三種倉庫概念:本地倉庫、遠端倉庫、中央倉庫
- v. 設定阿里雲Maven倉庫映象:
- 在
settings.xml
檔案中的mirrors
下新增mirror
標籤;
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
b) maven由純Java語言開發,是跨平臺的可以在window、linux、mac上使用。
c) 清晰的專案結構;
d) 使用Maven將大型專案按照模組拆分成若干工程,不同的團隊維護各自的工程,可大大的提升開發效率;
- i. 大型商城專案按業務分成商品管理、使用者管理、訂單管理等等模組。
- ii. 中小型專案按照傳統專案分為Web、Service、Dao層,依照員工自身的業務能力分配工作。
e) 一鍵構建專案:使用命令可以對專案進行一鍵構建,作業系統中無需安裝eclipse和tomcat。
Maven常用命令
clean
: 清理,編譯後的目錄;compile
: 編譯,只編譯main目錄,不編譯test中的程式碼;test-compile
:編譯test目錄中的程式碼;test
: 執行test裡邊的程式碼;package
: 打包- i. java專案->打成jar包;
- ii. web專案->打成war包;
install
:釋出專案到本地倉庫,用在打jar包上,打成jar包可以被其他專案使用;tomcat:run
:一鍵構建專案;
Maven命令的生命週期
不同的生命週期可以一起執行,例如:先clean 再compile
命令 | 生命週期 |
---|---|
Clean | clean |
Default | compile、test-compile、test、package、install |
Site | site命令,生成專案描述文件靜態頁 |
Maven命令的執行順序
-
在相同生命週期中的命令才會受執行順序的影響;
-
Default生命週期中的命令執行順序:
compile <- test-compile <- test <- package <- install;
Maven入門程式
Ø 入門程式:
-
建立Maven專案;
-
在src -> main -> webapp下建立WEB-INF目錄,並在目錄下建立web.xml;
-
修改Maven預設編譯級別:
-
a) 全域性編譯級別 -> 修改settings.xml
-
b) 專案級別修改 -> 專案對應的pom.xml
-
-
在Java Resourcese -> src/main/java下寫程式碼,建立包和Servlet;
-
新增servlet-api:
-
在servlet-api中新增
scope
標籤,值為:proviede;- a) 如果不加此標籤有很大機率報錯,因為tomcat中也有servlet-api的包導致衝突;
-
執行:發生錯誤,原因是maven預設使用tomcat6.xx,不支援@WebServle註解;
-
a) 解決方案1:需要去web.xml中配置
Servlet
; -
b) 解決方案2:配置高版本tomcat外掛;
-
-
最後測試,啟動服務,在位址列輸入請求,顯示結果;
Ø 使用tomcat7外掛執行專案
Ø Scope依賴作用域也可稱作依賴範圍:maven中的依賴,會根據程式所處的階段和場景發生變化,所以maven用scope屬性來做限制;
- a)
compile
(預設值):在編譯、執行、測試、打包都有效; - b)
provided
:編譯、測試時有效,執行、打包無效; - c)
test
:僅在測試時有效; - d)
runtime
:測試、執行、打包時有效; - e)
system
:不推薦使用,使用system作用域不會去本地倉庫尋找依賴,要指定本地路徑;
Maven熱部署
Maven 3.5.4 + tomcat 8.5.32 熱部署:
熱部署:在tomcat執行時將專案部署上去;
- 開啟tomcat熱部署:
- a) 修改tomcat -> conf-> tomcat-users.xml 配置檔案;
- b) 在tomcat-users標籤中加入以下程式碼:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="joey" password="123123" roles="manager-gui, manager-script"/>
-
c) 啟動tomcat;
-
d) 修改專案中pom.xml,在tomcat7的外掛上新增以下程式碼:
<configuration>
<url>http://localhost:8080/manager/text</url>
<username>joey</username>
<password>123123</password>
</configuration>
-
e) 右鍵專案-> run as -> maven build… 在goals中使用tomcat7:deploy或tomcat7:redeploy來進行熱部署;
-
i. tomcat7:deploy,第一次部署時使用。
-
ii. tomcat7:redeploy,非第一次部署時使用。
-
-
f) 部署完畢,開啟瀏覽器測試;
Maven整合SSM框架
- Maven+SSM框架整合;
-
a) 加入SSM框架所需的依賴;
-
b) 配置外掛;
-
c) 匯入SSM框架所需配置檔案;
-
d) 配置Maven Resources資源放行:
- i. 因為Maven會把src/main/java下的*.java檔案檔案編譯放到target/classes目錄目錄中,但這目錄中的其他檔案會被忽略;
- ii. Mybatis Mapper對映檔案也要放在src/main/java下,所以不能忽略;
- iii. 因此我們需要對src/main/java下的配置檔案進行過濾,不能被忽略;
- iv. 利用Maven中的
Resources
標籤可以進行配置;
- 測試;
- a) 新建名為User的bean物件,有
username
,password
倆欄位; - b) 新建login.jsp,可以輸入使用者名稱和密碼,通過表單提交到後臺;
- c) 後臺接受使用者名稱和密碼,跳轉頁面,並顯示;
- 讀取資料庫顯示遊戲列表;
- a) 匯入item_info表;
- b) 在login.jsp中增加
button
,點選後跳轉頁面,顯示列表;
Maven模組化開發
Ø 需求:將Maven-SSM專案以層為單位拆分,按模組開發;
-
建立父專案,在父專案中加入依賴;
-
建立mapper層子專案繼承父專案;
-
子專案可以繼承父專案的依賴;
-
利用junit測試mapper模組專案;
-
Maven的依賴傳遞,與依賴版本管理;
- a) 依賴傳遞:新增依賴的jar包如果還依賴其他jar包,則在新增時會一起引入;
- b) 依賴衝突:Base-project由3個子專案組成,A-project依賴Tools.jar 1.0版本,C-project依賴Tools.jar 2.0版本,根據依賴傳遞機制,Base-project將同時依賴Tools.jar兩個版本,但這造成了衝突。根據路徑最近獲勝策略,該專案最終依賴Tools.jar 1.0,導致C-project無法呼叫getAll方法從而報錯,因此我們要手動選擇一個適合專案的版本。
- c) 解決依賴衝突的辦法:
-
i. 直接宣告:直接新增Tools.jar 2.0依賴;
-
ii. 排除:使用
<dependency>
標籤中的<exclusions>
標籤排除A-project中的Tools.jar 1.0依賴; -
iii. 依賴管理,版本鎖定:
<dependencyManagement>
-
1. <dependencyManagement>是依賴管理,該標籤下新增的<dependencies>可以宣告依賴,但是不會引入jar包;
2. 只有宣告在<project>標籤下<dependencies>中的依賴才會被引用到專案中;
3. 在<dependencyManagement>下新增jar包座標後,<project>標籤下<dependencies>標籤的版本號可以忽略不寫;
4. < properties>標籤可以自定義版本號,用el表示式賦值給<version>標籤;
5. 統一管理jar包版本,修改方便;
-
建立scervice模組專案,利用junit測試service模組專案;
-
依賴作用域對依賴傳遞的影響;
-
建立controller模組專案,執行程式;
Maven遠端倉庫Nexus(私服)
Ø Nexus獲取與配置:
1、 下載Nexus 點選我下載
2、 Nexus安裝,解壓縮到本地即可;
3、 Nexus安裝目錄下nexus-3.14.0-04/etc/nexus-default.properties配置表中可以修改以下屬性:
a) application-host : Nexus服務監聽的主機;
b) application-port: Nexus服務監聽的埠;
c) nexus-context-path : Nexus服務的上下文路徑;
4、 Nexus服務配置和啟動:
a) 以管理員身份執行cmd -> 進入到nexus安裝目錄../nexus-3.14.0-04/bin目錄下;
b) 在cmd中執行 nexus.exe/install 可以安裝nexus服務;
c) 在cmd中執行 nexus.exe/start 可以啟動nexus服務;
d) 在cmd中執行 nexus.exe/stop 可以停止nexus服務;
5、 登入Nexus:
a) 啟動服務後,根據nexus-default.properties的配置進行登入,如果沒有修改,可以在瀏覽器中輸入http://localhost:8081來登入;
b) 預設使用者名稱是admin,密碼是admin123;
6、 倉庫型別:nexus有多種倉庫型別:
Ø Nexus使用:
需求:將專案中的mapper.jar包提交到遠端倉庫中, 使service專案從遠端倉庫獲取;
✧☼ 上傳jar包到遠端倉庫;
1、 在Maven的 setting.xml中配置nexus訪問許可權;
2、 在專案的pom.xml中配置nexus倉庫位置;
3、 以上2個配置標籤中的id要一致;
4、 使用deploy命令將專案打包,釋出到nexus中;
5、 檢查倉庫中是否有上傳好的jar包;
✧☼ 從遠端倉庫下載jar包:
1、 使用profiles標籤在Maven的setting.xml中配置倉庫位置;
2、 啟用profiles標籤,使它發生作用;
3、 如果之前打包了,刪除本地倉庫下的mapper.jar;
4、 關閉mapper子專案,讓service子專案依賴mapper.jar包;
5、 更新專案,從遠端倉庫中獲取mapper.jar;
✧☼ 使用自定義使用者和自定義倉庫進行上傳和下載jar包:
1、 建議先將管理員密碼修改;
2、 在Roles中可以增加使用者許可權組,裡邊可以自定義使用者許可權;
3、 在Users中可以增加使用者,分配設定好的許可權;
4、 在Repositories中新建倉庫;
a) name:倉庫名稱;
b) version pollcy:版本策略;
i. Release:發行版;
ii. Snapshot:快照版;
iii. Mixed:混合模式;
c) Layout pollcy:佈局策略;
i. Strict:嚴格;
ii. Permissive:寬鬆;
d) Deployment pollcy:部署策略;
i. Allow redeploy:允許重新部署;
ii. Disable redeploy:禁止重新部署;
iii. Read-only:只讀;
5、 修改配置,將jar包上傳到自定義倉庫,然後從自定義倉庫下載jar包;