Maven項(xiàng)目管理工具的介紹和使用(如何用maven管理項(xiàng)目)
在我們的項(xiàng)目開(kāi)發(fā)過(guò)程中,常常會(huì)使用Maven作為依賴(lài),來(lái)快速地引入依賴(lài)進(jìn)行開(kāi)發(fā)。很多人都知道m(xù)aven或者使用的次數(shù)也非常多,今天我們就來(lái)了解一下maven,系統(tǒng)地介紹一下。
1、Maven的基本概念
Maven是跨平臺(tái)的項(xiàng)目管理工具。主要服務(wù)于基于Java平臺(tái)的項(xiàng)目構(gòu)建,依賴(lài)管理和項(xiàng)目信息管理。接下來(lái)我們就來(lái)介紹一下項(xiàng)目構(gòu)建和依賴(lài)管理。
1.1、項(xiàng)目構(gòu)建
項(xiàng)目構(gòu)建過(guò)程包括【清理項(xiàng)目】→【編譯項(xiàng)目】→【測(cè)試項(xiàng)目】→【生成測(cè)試報(bào)告】→【打包項(xiàng)目】→【安裝項(xiàng)目】→【部署項(xiàng)目】這幾個(gè)步驟,這幾個(gè)步驟就是一個(gè)項(xiàng)目的完整構(gòu)建過(guò)程,我們?cè)陧?xiàng)目開(kāi)發(fā)過(guò)程中不一定需要使用所有的步驟,往往只需要使用到其中幾個(gè)關(guān)鍵步驟。
[1] 清理clean:將以前編譯得到的舊文件class字節(jié)碼文件刪除,為下一次編譯做準(zhǔn)備;
[2] 編譯compile:將java源程序編譯成class字節(jié)碼文件;
[3] 測(cè)試test:自動(dòng)測(cè)試,自動(dòng)調(diào)用junit程序;
[4] 報(bào)告report:測(cè)試程序執(zhí)行的結(jié)果;
[5] 打包package:動(dòng)態(tài)Web工程打War包,java工程打jar包;
[6] 安裝install:Maven特定的概念—–將打包得到的文件復(fù)制到“倉(cāng)庫(kù)”中的指定位置;
[7] 部署deploy:將動(dòng)態(tài)Web工程生成的war包復(fù)制到Servlet容器下,使其可以運(yùn)行;
相關(guān)的maven命令:
- mvn clean:清理;
- mvn compile:編譯主程序;
- mvn test-compile:編譯測(cè)試程序;
- mvn test:執(zhí)行測(cè)試;
- mvn package:打包;
- mvn install:安裝jar到本地倉(cāng)庫(kù);
- mvn deploy:將最終的包復(fù)制到遠(yuǎn)程的倉(cāng)庫(kù),以讓其它開(kāi)發(fā)人員與項(xiàng)目共享;
- mvn site:生成項(xiàng)目站點(diǎn)信息;
- mvn clean install:組合命令,告訴Maven clean在每個(gè)模塊中執(zhí)行install階段;
1.2、依賴(lài)管理
依賴(lài)指的是jar包之間的相互依賴(lài),比如我們搭建一個(gè)struts2的開(kāi)發(fā)框架時(shí),如果只有struts2-core.jar這個(gè)jar包是不行的,struts2-core.jar還依賴(lài)其它的jar包,依賴(lài)管理指的就是使用Maven來(lái)管理項(xiàng)目中使用到的jar包,Maven管理的方式就是“自動(dòng)下載項(xiàng)目所需要的jar包,統(tǒng)一管理jar包之間的依賴(lài)關(guān)系”。
2、Maven安裝
2.1、安裝或者查看環(huán)境
首先要確保開(kāi)發(fā)環(huán)境已經(jīng)安裝了JDK,配置好JDK的環(huán)境變量,使用如下的兩個(gè)命令檢查檢查JDK安裝的情況。
① Echo %JAVA_HOME%
② Java –version
2.2、下載maven
到官網(wǎng)maven.apache.org下載對(duì)應(yīng)操作系統(tǒng)的版本,比如我是windows系統(tǒng),我會(huì)選擇下載apache-maven-3.8.6-bin.zip,下載之后對(duì)zip壓縮文件進(jìn)行解壓。如果是linux操作系統(tǒng),可以下載后綴是gz格式的壓縮包。
2.3、設(shè)置系統(tǒng)環(huán)境變量
桌面“我的電腦”->右鍵打開(kāi)“屬性”->“高級(jí)系統(tǒng)設(shè)置”->"環(huán)境變量" 中設(shè)置 MAVEN_HOME,設(shè)置為maven的解壓縮目錄。小編之前已經(jīng)安裝了3.8.1版本,而不是最新的3.8.6版本,后續(xù)以此版本截圖說(shuō)明。
2.4、設(shè)置環(huán)境變量Path
將%MAVEN_HOME%bin加入Path中,一定要注意要用分號(hào);與其他值隔開(kāi)。%MAVEN_HOME%bin代表的就是"D:installapache-maven-3.8.1bin"目錄(這是我的安裝目錄,每個(gè)人這里對(duì)應(yīng)的自己的安裝目錄)。
2.5、驗(yàn)證Maven安裝是否成功
打開(kāi)cmd窗口,輸入"mvn –v"命令 查看Maven的相關(guān)信息。會(huì)顯示maven的版本、jdk的版本信息以及操作信息的相關(guān)信息。
3、Maven的簡(jiǎn)單使用
3.1、Maven項(xiàng)目的目錄約定
3.2、maven的配置文件setting.xml
我們先來(lái)了解一下setting.xml 配置文件格式和內(nèi)容。
上面這個(gè)例子看起來(lái)比較復(fù)雜,但我們?cè)趯?shí)際使用中往往只關(guān)注兩個(gè)方面,一個(gè)是配置本地倉(cāng)庫(kù)的路徑,一個(gè)是設(shè)置下載依賴(lài)的來(lái)源。
<!--本地倉(cāng)庫(kù)。該值表示構(gòu)建系統(tǒng)本地倉(cāng)庫(kù)的路徑。其默認(rèn)值為~/.m2/repository。 --> <localRepository>E:mavenRepositoryrepository</localRepository><!--為倉(cāng)庫(kù)列表配置的下載鏡像列表。 --> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
配置好setting.xml 配置文件,然后就可以在開(kāi)發(fā)工具中引入,我以IntelliJ IDEA為例。
4、Maven坐標(biāo)
maven項(xiàng)目,跟maven相關(guān)的最重要的文件就是pom.xml文件了,我們來(lái)了解一下。
4.1、Maven坐標(biāo)主要組成
- groupId:組織標(biāo)識(shí)(包名);
- artifactId:項(xiàng)目名稱(chēng);
- version:項(xiàng)目的當(dāng)前版本;
- packaging:項(xiàng)目的打包方式,最為常見(jiàn)的jar和war兩種。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath /></parent><groupId>com.bianchengxia.springboot</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><packaging>jar</packaging> <!-- jar或者war -->
4.2、依賴(lài)管理
我們?cè)跇?biāo)簽對(duì)dependencies內(nèi),引入項(xiàng)目所需要的依賴(lài)。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--切面日志 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!-- mysql依賴(lài)jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency></dependencies>
4.3、添加外部依賴(lài)
正常的我們引入遠(yuǎn)程倉(cāng)庫(kù)的依賴(lài),直接可以是使用上面的方式,但是如果我們需要引入項(xiàng)目里面的依賴(lài),比如一個(gè)開(kāi)源的項(xiàng)目有一個(gè)私有的依賴(lài)包,我們下載下來(lái)之后需要引入才能正常運(yùn)行或者打包。那我們就可以使用下面的方式:除了引入依賴(lài)之外,再添加配置,設(shè)置includeSystemScope為true。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--打包時(shí)將外部引入的jar包打包,不加此配置,本地可以運(yùn)行,但服務(wù)器上jar中是沒(méi)有的--> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins></build>
5、Maven倉(cāng)庫(kù)
maven倉(cāng)庫(kù)的分類(lèi):本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。其中遠(yuǎn)程倉(cāng)庫(kù)包括中央倉(cāng)庫(kù)、私服和其他公共庫(kù)。
5.1、遠(yuǎn)程倉(cāng)庫(kù)
(1)中央倉(cāng)庫(kù):Maven默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù),中央倉(cāng)庫(kù)是遠(yuǎn)程倉(cāng)的核心。中央倉(cāng)庫(kù)包含了絕大多數(shù)流行開(kāi)源Java構(gòu)件,以及源碼、作者信息、SCM、信息、許可證信息等。如果中央倉(cāng)庫(kù)慢可以用mirrors來(lái)替換它,它的id是central。
<!-- 中央倉(cāng)庫(kù) --><repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository></repositories>
(2)私服:是一種特殊的遠(yuǎn)程倉(cāng)庫(kù),maven私服是指私有服務(wù)器,是針對(duì)局域網(wǎng)而言的,目的是代理遠(yuǎn)程倉(cāng)庫(kù)及部署第三方構(gòu)建,很多公司會(huì)搭建自己的私服。有了私服之后,當(dāng) Maven 需要下載構(gòu)件時(shí),直接請(qǐng)求私服,私服上存在則下載到本地倉(cāng)庫(kù);否則,私服請(qǐng)求外部的遠(yuǎn)程倉(cāng)庫(kù),將構(gòu)件下載到私服,再提供給本地倉(cāng)庫(kù)下載。
(3)其他公共庫(kù):默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù)也就是中央倉(cāng)庫(kù)往往下載比較慢,所以很多公司會(huì)搭建私服,但是搭建私服也比較麻煩,這個(gè)時(shí)候有人就想,能不能使用“拿來(lái)主義”直接使用別人搭建好的倉(cāng)庫(kù)呢?當(dāng)然可以,這就是其他公共庫(kù),對(duì)外開(kāi)放,我們可以直接使用。比如我們?cè)谏厦娴膕etting.xml 配置文件里面<mirror>標(biāo)簽對(duì)里面設(shè)置的倉(cāng)庫(kù),就是阿里云開(kāi)放的公共倉(cāng)庫(kù)。
5.2、本地倉(cāng)庫(kù)
maven在本地存儲(chǔ)構(gòu)件的路徑,一般本地倉(cāng)庫(kù)地址可以在settings.xml里邊指定。我們?cè)谏厦娼榻Bsettings.xml文件時(shí)也說(shuō)明了,設(shè)置localRepository元素的值為本地倉(cāng)庫(kù)路徑。
6、maven模塊聚合和繼承
6.1、頂級(jí)pom文件配置
6.2、模塊聚合配置
6.3、繼承配置代碼
繼承代碼過(guò)程中,可以定義屬性,例如:
<!--屬性定義--><properties> <!--項(xiàng)目構(gòu)建基本配置--> <spring.version>3.2.0.RELEASE</spring.version> <struts.version>2.3.15.1</struts.version> <servlet.version>3.0.1</servlet.version> <urlrewriter.version>4.0.4</urlrewriter.version></properties>
訪問(wèn)屬性的方式為${junit.version},例如:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope></dependency>
父模塊用dependencyManagement進(jìn)行管理:
<dependencyManagement> <dependencies> <dependency> <groupId>com.tydic.framework</groupId> <artifactId>frameworkbase</artifactId> <version>${framework.version}</version> </dependency> </dependencies><dependencyManagement>