Maven專案的構建與管理
1.Maven命令
Maven是Apache的一個跨平臺的軟體專案管理和構建工具,主要用於基於java平臺的專案構建、依賴管理。
Maven專案構建過程如上圖所示,主要構建命令有幾種:
mvn validate驗證,驗證專案是正確的並且所有的資訊是可用的;
mvnclean 清理,清理專案快取輸出,一般是target資料夾被刪除;
mvncompile 編譯,將java原始檔編譯成.class檔案;
mvn test測試,生成測試報告,執行test目錄下的所有單元測試;
mvnpackage 打包,將專案打成jar、war或者pom;
mvninstall 安裝,將當前專案安裝到本地maven庫,供其他專案依賴。
mvn deploy部署,在構建環境中完成,複製最終的包到遠端庫。
執行後面的命令會自動執行前面的命令,比如執行mvn package時會執行validate、clean、compile、test、package五個階段。
2.Maven安裝與配置
1)安裝jdk1.7並配置環境變數
2)安裝並配置maven環境變數
到maven官網下載maven最新版壓縮包,解壓到本地,新增系統環境變數
MAVEN_HOME: D:\develop\apache-maven-3.5.0
Path: % MAVEN _HOME%\bin
以上兩步配置完畢後,在命令列執行mvn –v,可以maven版本資訊和基本配置資訊表示配置成功。
3)自定義maven倉庫位置
找到maven安裝目錄conf,開啟setting檔案,修改localRepository節點配置為指定路徑即可,比如:<localRepository>D:/maven/repository</localRepository>
4)maven安裝目錄結構
說明:
bin中存放可執行的二進位制檔案
conf存放settings.xml檔案
lib 執行maven所依賴的jar包
5)maven專案目錄約定
src/main/java 存放專案的java原始檔
src/main/resources 存放專案的資原始檔,如spring,hibernate、mybatis的配置檔案
src/test/java 存放所有的測試的java檔案
src/test/resources 存放測試用的資原始檔
target 專案輸出位置
pom.xml 依賴管理檔案
3.Maven核心概念
1)專案物件模型
說明:maven根據pom.xml檔案,把它轉化成專案物件模型(POM),這時要解析依賴關係,然後去相對應的maven庫中查詢所依賴的jar包。在clean,compile,test,package等生命週期階段都有相應的Plug-in來做這些事情,而這些plug-in會產生一些中間產物。
2)maven倉庫
Maven倉庫用來存放Maven管理的所有Jar包。分為:本地倉庫local和中央倉庫central。
本地倉庫:Maven本地庫的Jar包倉庫。
中央倉庫:Maven官方提供的遠端倉庫。
當專案編譯時,Maven首先從本地倉庫中尋找專案所需的Jar包,若本地倉庫沒有,再到Maven的中央倉庫下載所需Jar包到本地倉庫。
3)maven座標
座標是Jar包的唯一標識,Maven通過座標在倉庫中找到專案所需的Jar包。
groupId:定義當前maven專案屬於哪個專案
artifactId:定義實際專案中的某一個模組
version:定義當前專案的當前版本
packaging:定義當前專案的打包方式
4)依賴管理
依賴分為傳遞依賴、排除依賴,還有依賴衝突解決
- 傳遞依賴:如果專案引用了一個Jar包,而該Jar包又引用了其他Jar包,那麼在預設情況下專案編譯時,Maven會把直接引用和間接引用的Jar包都下載到本地。
- 排除依賴:如果我們只想下載直接引用的Jar包,那麼需要在pom.xml將需要排除的Jar包的座標寫在中。
- 依賴衝突:若專案中多個Jar同時引用了相同的Jar時,會產生依賴衝突,但Maven採用了最短路徑優先和宣告優先兩種避免衝突的策略,因此在Maven中是不存在依賴衝突的。
5)聚合與繼承
- 聚合:多個專案或者模組聚合到一起,建立一個package方式為pom的專案parent專門負責聚合工作,並使用modules-module指定子模組。
- 繼承:多個模組聚合時,子模組需要繼承父模組以消除重複。
4.Maven專案結構的幾種構建方式
1)手動建立maven目錄
安裝Maven專案目錄約定手動建立各個資料夾即可,一般不會使用這種方式;
2)命令列maven命令自動建立maven專案
本地磁碟建立一個空目錄C:/maven/hello,命令列進入到hello目錄,執行下面的命令
mvn archetype:generate-DgroupId=com.cloud.hellomaven -DartifactId=hellomaven-service -Dversion=1.0.0-SNAPSHOT-Dpackage=com.cloud.service
執行成功的話會自動在hello中建立符合maven專案約定的目錄結構。
說明:
archetype:generate:生成maven專案骨架
-DgroupId指定maven座標的groupId
- DartifactId指定maven座標的artifactId
- Dversion指定maven座標的version
- Dpackage指定maven專案的src下的包名
自動建立的maven專案結構如下
3)Eclipse IDE建立maven專案
Eclipse提供了一個很好的外掛m2eclipse無縫將Maven和Eclipse整合在一起,配置外掛選擇本地maven目錄和配置檔案setting.xml即可。
點選Eclipse選單欄File->New->Ohter->Maven,選擇Maven Project,一路預設Next,有一步需要填寫GroupId、Artifact Id、Version、選擇打包方式Package(jar、war、pom),選擇編譯環境即可
完成後目錄結構如下
4)Idea IDE建立maven專案
Idea IDE是一款很不錯的開發Maven專案的IDE,建立一個mavenweb專案的過程如下:
選擇File-New-Project,選擇Maven,勾選Create from archetype,選擇maven-archetype-webapp,
點選Next,填寫Group Id、Artifact Id、Version三項
點選Next,選擇Maven home,選擇setting file
點選Next,填寫Project name,選擇專案路徑即可
Finish完成maven web專案建立
5.Pom檔案說明
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 子模組對父模組的繼承,繼承父模組的所有依賴-->
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</parent>
<!-- 指定多個模組一起進行編譯-->
<modules>
<module></module>
</modules>
<!--groupId 反寫的公司網站+專案名稱 -->
<groupId>com.demo.ssm</groupId>
<!--artifactId 專案名稱+模組名稱 -->
<artifactId>demo-ssm</artifactId>
<!--第一個0表示大版本號
第二個0表示分支版本號
第三個0表示小版本號 0.0.1
snapshot快照 alpha內部測試 beta公測
Release穩定版本 GA正式釋出
-->
<version>0.0.1-SNAPSHOT</version>
<!-- 預設是jar可以是war jar pom -->
<packaging>jar</packaging>
<!--專案描述名稱-->
<name>demo-ssm</name>
<!--專案地址-->
<url>www.gseem.com</url>
<!--專案描述-->
<description>這是專案描述</description>
<!--開發者列表-->
<developers>feiyue</developers>
<!--專案許可證-->
<licenses></licenses>
<!--專案組織資訊-->
<organization></organization>
<!--專案屬性-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--專案依賴列表-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<type></type>
<!-- 作用範圍
-->
<scope>test</scope>
<!-- 設定依賴是否可選-->
<optional></optional>
<!-- 排除依賴傳遞列表-->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.demo.maven</groupId>
<artifactId>demo.maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- 依賴的管理
-->
<dependencyManagement>
<dependencies>
<dependency></dependency>
</dependencies>
</dependencyManagement>
<build>
<!-- 外掛列表
-->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
</project>
歡迎大家關注博主訂閱號“Java技術日誌”,提供Java相關技術分享,從Java程式設計基礎到Java高階技術,從JavaWeb技術基礎Jsp、Servlet、JDBC到SSH、SSM開發框架,從REST風格介面設計到分散式專案實戰。剖析主流開源技術框架,用親身實踐來譜寫深度Java技術日誌。
Java技術日誌