天天看點

Maven經驗總結

一、概念

Maven是一款自動化建構工具,專注服務于Java平台的項目自動化建構和jar包依賴管理。

二、建構環節

以下建構環節都由Maven自動建構進行

1.清理:删除以前的編譯結果,為重新編譯做好準備。

2.編譯:将java源程式編譯為位元組碼檔案。

3.測試:針對項目中的關鍵點進行測試,確定項目在疊代開發過程中關鍵點的正确性。

4.報告:在每一次測試後以标準的格式記錄和展示測試結果。

5.打包:将一個包含諸多檔案的工程封裝為一個壓縮檔案用于安裝或部署。Java工程對應 jar包,Web工程war包

6.安裝:在Maven環境下特指将打包的結果——jar包或war包安裝到本地倉庫中。

7.部署:将打包的結果部署到遠端倉庫或将war包部署到伺服器上運作。

三、Maven九個核心概念

1.POM:pom.xml配置檔案

2.約定的目錄結構:

3.坐标:pom中依賴jar包的路徑,路徑指向本地倉庫

4.依賴管理:jar包之間的依賴管理

5.倉庫管理:放jar包的地方

6.生命周期:maven的執行過程

7.插件和目标:

8.繼承:父子項目之間的關系

9.聚合:多個項目聚合到一個項目

四、Maven項目

第一步:建立約定的目錄結構

Hello(項目名)
src
——main(存放主程式——業務代碼、配置檔案)
    ——java(包名、類)
    ——resources(三大架構配置檔案)
——test(存放測試程式)
    ——java(單元測試代碼)
    —resources(單元測試用到的資源檔案)
pom.xml

           

第二步:建立Maven的核心配置檔案pom.xml

第三步:編寫主程式

在src/main/java/com/atguigu/maven目錄下建立新檔案Hello.java

第四步:編寫測試代碼

在src/test/java/com/atguigu/maven目錄下建立測試檔案HelloTest.java

第五步:運作幾個基本的Maven指令

1.打開cmd指令行,進入Hello項目根目錄(pom.xml檔案所在目錄)執行

mvn complie(編譯) 指令,檢視根目錄變化

2.cmd中繼續錄入mvn clean(清理)指令,然後再次檢視根目錄變化

3.cmd中錄入mvn clean compile指令,檢視根目錄變化

4.cmd中錄入mvn test-compile(對測試程式進行編譯) 指令,檢視target目錄 變化

5.cmd中錄入mvn clean test(運作) 指令,檢視target目錄變化

6.cmd 中錄入mvn clean package(打jar包) 指令,檢視target 目錄變化

7.cmd 中錄入 mvn source:jar (生成源碼包)指令,檢視target 目錄變化

8.cmd 中錄入 mvn install(安裝)指令

注意:運作Maven指令時一定要進入pom.xml檔案所在的目錄

五、pom.xml檔案

<?xml version="1.0" ?>
<project	
xmlns="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>
 
	<!--坐标 gav -->
	<groupId>com.atguigu.maven</groupId><!--組織+項目+ID-->
	<artifactId>Hello</artifactId><!--子產品名 -->
	<version>0.0.1-SNAPSHOT</version><!--版本-->
	<!--項目名-->
	<name>Hello</name>
	  
	<!--依賴管理:需要引用第三方jar包,通過dependency标簽來進行配置 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.0</version>
			<scope>test</scope><!--依賴範圍-->
		</dependency>
	</dependencies>
</project>
           

六、通過坐标到倉庫中查找jar包

1.将gav三個向量連接配接起來

com.atguigu.maven+Hello+0.0.1-SNAPSHOT
           

2.以連起來的字元串作為目錄結構到倉庫中查找

com/atguigu/maven/Hello/0.0.1-SHAPSHOT/Hello-0.0.1-SNAPSHOT.jar
           

##注意:我們自己的Maven工程必須執行安裝操作才會進入倉庫。安裝指令是mvn install

安裝:将目前項目打好的jar包從工作空間整到倉庫的過程叫做安裝

<!-- Mavnen項目類型:
    jar  表示Java項目,預設值
    war  表示Web項目
    pom  表示父工程
 -->
           

七、依賴管理

http://mvnrepository.com

1.基本概念

當A jar包需要用到B jar包中的類時,我們就說A 對 B 有依賴。例如:commons-fileupload-1.3.jar 依賴于commons-io-2.0.1.jar。

2.直接依賴和間接依賴

如果A依賴B,B依賴C,那麼A——B和B——C都是直接依賴,而A——C是間接依賴。

3.依賴的範圍

當一個Maven工程添加了對某個jar包的依賴後,這個依賴的jar包可以對應下面幾個可選的範圍:

(1)compile

A.main目錄下的java代碼可以通路這個範圍的依賴

B.test目錄下的java代碼可以通路這個範圍的依賴

C.部署到Tomcat伺服器上運作時要放在WEB-INF的lib目錄下

例如:對Hello的依賴。主程式、測試程式和伺服器運作時都需要用到。

(2)test

A.Main目錄下的java代碼不能通路這個範圍的依賴

B.Test目錄下的java代碼可以通路這個範圍的依賴

C.部署到Tomcat伺服器上運作時不會放在WEB-INF的lib目錄下

例如:對junit的依賴。僅僅是測試程式部分需要

(3)provided

A.Main目錄下的java代碼可以通路這個範圍的依賴

B.Test目錄下的java代碼可以通路這個範圍的依賴

C.部署到Tomcat伺服器上運作時不會放在WEB-INF 的lib目錄下

例如:servlet-api 在伺服器上運作時,Servlet容器會提供相關API,是以部署的時候不要。

(4)runtime[了解]

(5)其他:import、system等。

八、依賴的傳遞性

A依賴于B:在A的pom.xml檔案配置B的gav資訊

compile範圍具有傳遞性,test和provided的範圍不具有傳遞性

最短路徑者優先

路徑相同時先聲明者優先

九、依賴的排除

對是以依賴的其他包進行依賴排除,把用不上的包排除掉

有時候為了確定 程式正确可以将有可能重複的間接依賴排除。排除後也可以自行依賴其他版本。

<exclusions>
<exclusion>
	<g>
	<a>
</exclusion>
</exclusions>
           

十、統一管理目标jar包的版本

以對Spring的jar包依賴為例:Spring的每一個版本都包含spring-core(核心包)、spring-context(上下文)等jar包。我們應該導入版本一緻的Spring jar包,而不是使用5.2.5的spring-core的同時使用5.2.6的spring-context。

<!--全局變量聲明。可以聲明版本号-->
<properties>
<spring.version>5.2.5.RELEASE</spring.version><!--自己随便定義的-->
</properties>		                                
##放在<dependencies>外面的

<dependency> <!-- 放到版本号的位置-->                                  
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${spring.version}</version>
</dependency>

           

十一、Maven倉庫

下載下傳解壓後在conf檔案夾裡打開settings.xml檔案,在标記中插入如下代碼(如果沒有的标記需要在标記外加入标記):

<mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <mirrorOf>central</mirrorOf>        
        </mirror>
           

如果配置完setting.xml檔案後不能從阿裡雲下載下傳,就在pom.xml檔案配置如下代碼:

<repositories>
        <repository>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
           

<repositories>

标記和pom.xml檔案中的

<dependencies>

标記同級

十二、Maven的生命周期

作用:Maven生命周期定義了各個建構環節的執行順序,有了這個清單,Maven就可以自動化的執行建構指令了

類型:

Clean Lifecycle 在進行真正的建構之前進行一些清理工作

Default Lifecycle(預設) 建構的核心部分,編譯,測試,打包,安裝,部署等等

Site Lifecycle 生成項目報告,站點,釋出站點。

mvn site:生成站點

1、clean聲明周期

(1)pre-clean執行一些需要clean之前完成的工作

(2)clean移除所有上一次建構生成的檔案

(3)post-clean執行一些需要在clean之後立刻完成的工作

2、Site生命周期

(1)pre-site執行一些需要在生成站點文檔之前完成的工作

(2)Site生成項目的站點文檔

(3)Post-site執行一些需要在生成站點文檔之後完成的工作,并且為部署做準備

(4)Site-deploy将生成的站點文檔部署到特定的伺服器上

這是經常用到的是site階段和site-deploy階段,用以生成和釋出Maven站點,這是Maven強大的功能。

3、Default生命周期

complie

clean

package

install

4、運作任何一個階段的時候,它前面的所有階段都會被運作。

十三、繼承

例:

父工程:Maven001

<!-- 依賴管理配置聲明:聲明配置,目前項目并不會直接引入jar包。
子項目繼承父項目,子項目不能直接使用jar包。子項目想用,
必須的聲明才能使用。
優點:由父工程管理版本,子工程不需要管理版本
父工程中改為<packaging>pom</packaging>-->

<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
           

子工程:A

<!-- A繼承maven001 父工程(<dependencies>标簽外)
通過繼承關系,推薦由父工程管理版本和依賴範圍,将子工程内的a和v 删除-->
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>maven001</artifactId>             <!--父工程位址-->
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!--- 相對路徑指定父工程的pom檔案位置-->
</parent>
           

十四、聚合

在總的聚合工程中使用modules/module标簽組合,指定子產品工程的相對路徑即可

<!-- 聚合:對目前項目進行任何操作,被聚合的項目都跟着做相同操作-->
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
</modules>
           
上一篇: DRP經驗總結