1. 程式人生 > 實用技巧 >Maven專案管理

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專案使用
  1. Maven通過建立本地倉庫索引,可以快速的找到符合要求的jar包,從而解決效率問題;

  2. 多個Maven專案都可以從本地倉庫獲取jar包;

  3. 設定本地倉庫:maven根目錄 -> conf -> settings.xml,將localRepository標籤中的路徑替換成自己本地倉庫的路徑;

  • iv. Maven三種倉庫概念:本地倉庫、遠端倉庫、中央倉庫

  • v. 設定阿里雲Maven倉庫映象:
  1. 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命令的執行順序

  1. 在相同生命週期中的命令才會受執行順序的影響;

  2. Default生命週期中的命令執行順序:

compile <- test-compile <- test <- package <- install;

Maven入門程式

Ø 入門程式:

  1. 建立Maven專案;

  2. 在src -> main -> webapp下建立WEB-INF目錄,並在目錄下建立web.xml;

  3. 修改Maven預設編譯級別:

    • a) 全域性編譯級別 -> 修改settings.xml

    • b) 專案級別修改 -> 專案對應的pom.xml

  4. 在Java Resourcese -> src/main/java下寫程式碼,建立包和Servlet;

  5. 新增servlet-api:

  6. 在servlet-api中新增scope標籤,值為:proviede;

    • a) 如果不加此標籤有很大機率報錯,因為tomcat中也有servlet-api的包導致衝突;
  7. 執行:發生錯誤,原因是maven預設使用tomcat6.xx,不支援@WebServle註解;

    • a) 解決方案1:需要去web.xml中配置Servlet;

    • b) 解決方案2:配置高版本tomcat外掛;

  8. 最後測試,啟動服務,在位址列輸入請求,顯示結果;

Ø 使用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執行時將專案部署上去;

  1. 開啟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框架

  1. 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標籤可以進行配置;
  1. 測試;
  • a) 新建名為User的bean物件,有usernamepassword倆欄位;
  • b) 新建login.jsp,可以輸入使用者名稱和密碼,通過表單提交到後臺;
  • c) 後臺接受使用者名稱和密碼,跳轉頁面,並顯示;
  1. 讀取資料庫顯示遊戲列表;
  • a) 匯入item_info表;
  • b) 在login.jsp中增加button,點選後跳轉頁面,顯示列表;

Maven模組化開發

Ø 需求:將Maven-SSM專案以層為單位拆分,按模組開發;

  1. 建立父專案,在父專案中加入依賴;

  2. 建立mapper層子專案繼承父專案;

  3. 子專案可以繼承父專案的依賴;

  4. 利用junit測試mapper模組專案;

  5. 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包版本,修改方便;
  1. 建立scervice模組專案,利用junit測試service模組專案;

  2. 依賴作用域對依賴傳遞的影響;

  3. 建立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包;