目錄
- 一、什么是Maven?
- 1)Maven好處
- 2)作用
- 二、Maven的基本原理
- 三、Maven安裝
- 1)Window安裝Maven
- 1、解壓
- 2、Maven環境變數配置
- 3、驗證
- 4、配置本地倉庫(資源下到哪)
- 5、配置阿里鏡像倉庫(資源從哪來)
- 2)Linux安裝Maven
- 1、下載解壓
- 2、配置環境變數
- 3、驗證
- 1)Window安裝Maven
- 四、創建Maven專案
- 1)手動構建maven專案
- 1、創建檔案
- 2、編譯(mvn compile)
- 3、清理(mvn clean)
- 4、測驗(mvn test)
- 5、打包(mvn package)
- 6、安裝到本地倉庫(mvn install)
- 2)通過maven插件構建專案(命令列操作)
- 1、構建工程(模板)
- 2、構建java工程
- 3、構建web工程
- 3)通過IDEA創建空專案來構建maven java專案
- 1、創建一個Empty Project
- 2、配置jdk
- 3、配置maven
- 4、創建maven工程
- 5、撰寫測驗代碼
- 6、編譯構建
- 7、配置運行環境
- 4)通過IDEA模板構建maven java專案
- 1、搜索quickstart模板創建
- 2、默認的目錄結構
- 3、手動創建缺少的目錄
- 4、修改目錄屬性
- 5)通過IDEA模板構建maven java-web專案
- 1、搜索webapp模板創建
- 2、默認目錄結構
- 3、手動創建沒創建的目錄
- 4、創建一個index.jsp檔案
- 5、添加tomcat插件
- 6、運行web工程
- 7、配置快捷運行方式
- 1)手動構建maven專案
- 五、Maven依賴管理
- 1)依賴配置
- 2)依賴傳遞
- 3)依賴管理
- 1、依賴傳遞沖突問題
- 2、可選依賴
- 3、排除依賴
- 4、依賴范圍
- 5、依賴范圍的傳遞性
- 六、生命周期與插件
- 1)專案構建生命周期
- 2)Maven對構建的生命周期劃分三個階段
- 1、clean生命周期
- 2、default構建生命周期
- 3、site構建的生命周期
- 3)插件
- 七、工程版本管理
- 八、多環境資源配置
- 九、跳過測驗
- 1)跳過測驗環節的應用場景
- 2)跳過測驗的兩種方法
一、什么是Maven?
Apache Maven是一個軟體專案管理的綜合工具,基于專案物件模型(POM)的概念,提供了幫助管理構建、檔案、報告、依賴、發布等方法,Maven簡化和標準化專案建設程序,處理編譯,分配,檔案,團隊協作和其他任務的無縫連接, Maven增加可重用性并負責建立相關的任務,

1)Maven好處
-
可以將專案程序規范化、自動化、高效化以及強大的可擴展性,利用maven自身及其插件還可以獲得代碼檢查報告、單元測驗覆寫率、實作持續集成等等,
-
使得專案的管理變得容易,構建專案的速度更快,由于Maven提供了倉庫的概念去管理jar包,所以用git或者svn的時候,存盤構建的專案體積會更小,
2)作用
管理專案的構建、檔案生成、報告、依賴、SCMs(software configuration Management)、分布、分發、郵件串列,
二、Maven的基本原理
采用遠程倉庫和本地倉庫以及一個核心的組態檔pom.xml,pom.xml中定義的jar檔案從遠程倉庫下載到本地倉庫,各個專案使用同一個本地倉庫的jar,同一個版本的jar只需下載一次,而且避免每個應用都去拷貝jar,同時它采用了現在流行的插件體系架構,所以maven的核心非常的小,只有幾兆大小的檔案,在執行maven任務時,才會自動下載需要的插件,
具體的概念模型如下圖:

Maven官方把maven定義為一個專案管理工具,下面我們來看看maven給我們的專案管理做了哪些作業?
- 專案標準化
Maven專案具有統一的專案結構,這個專案結構是參考業界的最佳實踐而成,為后面使用統一的maven命令打下了基礎,如測驗mvn test、打包mvn package等,無需寫一行腳本,就可以方便的實作眾多功能,
- 檔案和報告
使用mvn site可以快速生成專案站點,apache很多開源專案站點都采用maven生成,會出現built by maven字樣的圖示,
- 類別庫管理
類別庫管理是maven一個比較核心的功能,我們就需要將專案所依賴的類別庫加入到pom.xml中,那么maven會自動將依賴的類別庫下載到本地,并且下載的類別庫如果還依賴其他的類別庫,它也會自動下載過來,這樣我們就不需要一個一個類別庫去下載了,
發布管理
使用maven可以方便的進行專案發表管理,在專案開發到一定階段,可以使用mvn package打包,它會自動先運行mvn test,跑所有的Test Case,只有全部通過才能正確打包,生成的war包(如果專案的packaging為war)在target目錄下,這個 war包與使用ant腳本生成一樣,但無需一行腳本,這也是maven對比ant的優勢之一,使用mvn install將編譯和打包好的檔案發布到本地倉庫中,使用mvn deploy在整合或者發布環境下執行,將最終版本的包拷貝到遠程的repository,
三、Maven安裝
官網地址:http://maven.apache.org/
Maven下載地址:http://maven.apache.org/download.cgi

這里我兩個環境的版本都下載,分別在我本機和linux虛擬機安裝,
1)Window安裝Maven
1、解壓
# 解壓的目錄
D:\software\Maven\apache-maven-3.8.4-bin

Maven根目錄檔案介紹:
- bin:Maven的運行腳本,bin\mvn.cmd是基于windows的腳本,在cmd中每輸入一條mvn的命令都是在呼叫并執行這些腳本,
- boot:該專案只有一個檔案plexus-classworlds-2.5.2.jar,他是一個類加載器的框架,相當于對JDK中的類的加載器,提供了豐富的語法以此用來方便配置,Maven使用該框架加載自己的類別庫,
- conf:該目錄包含了一個非常重要的檔案setting.xml,配置該檔案就可以在Project中定制Maven的行為,
- lib:包含了所有Maven運行時需要的Java類別庫以及用到的第三方類別庫,
- LICENSE:軟體許可
- NOTICE:軟體參考的三方軟體
- README.txt:包含了Maven的簡介
2、Maven環境變數配置
-
依賴Java,需要配置JAVA_HOME,沒有裝jdk的還得先裝jdk
-
設定Maven自身自身的運行環境,需要配置MAVEN_HOME
-
配置完JAVA_HOME和MAVEN_HOME,還得配置Path,在Path加上:%JAVA_HOME%\bin和%MAVEN_HOME%\bin

3、驗證
# 這里使用git bash
$ java -version
$ mvn -v

4、配置本地倉庫(資源下到哪)
# 創建本地存放jar包目錄
D:\software\Maven\repository
# 找到maven安裝目錄下conf/settings.xml

5、配置阿里鏡像倉庫(資源從哪來)
先查找默認的配置,在lib目錄下隨便找個jar包用解壓工具打開-》再回到上層目錄-》ctrl+F搜索pom.找到pom-4.0.0.xml-》把這個檔案拖出來打開




但是注意不是去修改jar包里面的這個配置,還是回到conf/setting.xml這個組態檔,修改這個組態檔,
<mirror>
<!-- 此鏡像的唯一標識,用來區分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 對哪種倉庫進行鏡像,簡單的就是替代哪個倉庫 -->
<mirrorOf>central</mirrorOf>
<!-- 鏡像名稱 -->
<name>Nexus aliyun</name>
<!-- 鏡像url -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

2)Linux安裝Maven
1、下載解壓
$ mkdir -p /opt/software
$ cd /opt/software
$ wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
$ tar -zvxf apache-maven-3.8.4-bin.tar.gz -C /opt/software/
2、配置環境變數
# 在/etc/profile
export PATH=/opt/software/apache-maven-3.8.4/bin:$PATH
# 加載生效
$ source /etc/profile
3、驗證
$ java -version
$ mvn -v

四、創建Maven專案
1)手動構建maven專案
默認git bash是沒有tree命令的,這里提供下載地址:
官網下載地址:http://gnuwin32.sourceforge.net/packages/tree.htm
百度云下載地址:
鏈接:https://pan.baidu.com/s/17fc79rQUQSnBhWzej9xd9g
提取碼:6666
把tree.exe放到git安裝目錄下的usr/bin/目錄下
1、創建檔案
### 查看創建的目錄和目錄結構
$ tree hello/
$ cat hello/src/main/java/com/test2022/Hello.java
$ cat hello/src/test/java/com/test2022/HelloTest.java
$ cat hello/pom.xml


2、編譯(mvn compile)
$ cd hello
$ mvn compile
發現編譯報錯了:
【問題】 [ERROR] 不再支持源選項 5,請使用 7 或更高版本,
[ERROR] 不再支持目標選項 5,請使用 7 或更高版本,

- 【解決方案一】修改全域,修改maven安裝目錄下conf/setting.xml檔案,配置jdk,內容如下:
<profile>
<id>jdk-13</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>13</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>13</maven.compiler.source>
<maven.compiler.target>13</maven.compiler.target>
</properties>
</profile>
- 【解決方案二】修改區域,修改專案目錄下的 pom.xml檔案,配置jdk,內容如下:
<properties>
<!-- 這里填jdk的版本,我使用的是jkd13 -->
<maven.compiler.target>13</maven.compiler.target>
<maven.compiler.source>13</maven.compiler.source>
</properties>
這里我采用【解決方案一】修改全域的配置
再編譯,編譯成功
$ mvn compile

3、清理(mvn clean)
$ mvn clean
# 發現上面編譯產生的target目錄會刪掉
$ tree .

4、測驗(mvn test)
$ mvn test

5、打包(mvn package)
【溫馨提示】這里只打包編譯好的源程式(xxx.class檔案)
$ mvn package

6、安裝到本地倉庫(mvn install)
【溫馨提示】這里groupid決定放在倉庫的哪個檔案下,配置<groupId>com.hello</groupId>,所以生成的包就會放在倉庫目錄的com/hello目錄下,


會經歷編譯(compile)-》測驗(test)-》打包(package) -》安裝(install)的程序,

2)通過maven插件構建專案(命令列操作)
1、構建工程(模板)
模板:
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
示例:
2、構建java工程
$ mvn archetype:generate -DgroupId=com.test2022 -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false

目錄結構

3、構建web工程
$ mvn archetype:generate -DgroupId=com.test2022 -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false

目錄結構

3)通過IDEA創建空專案來構建maven java專案
【溫馨提示】IDEA官網下載地址:https://www.jetbrains.com/idea/
1、創建一個Empty Project


2、配置jdk

3、配置maven
File->Settings,把默認配置自帶的maven修改上面下載的版本

4、創建maven工程







5、撰寫測驗代碼

6、編譯構建

7、配置運行環境

配置編譯

配置清理

右上角就有兩個運行的快捷選項了

4)通過IDEA模板構建maven java專案
1、搜索quickstart模板創建



2、默認的目錄結構
會默認創建一個org.example的demo,可以刪掉

3、手動創建缺少的目錄
發現main和test里面都沒創建resources,下面我們手動創建

4、修改目錄屬性
如果創建的是普通目錄,則可以右鍵目錄修改目錄屬性

5)通過IDEA模板構建maven java-web專案
1、搜索webapp模板創建


2、默認目錄結構

3、手動創建沒創建的目錄


4、創建一個index.jsp檔案

5、添加tomcat插件
在maven庫中搜索tomcat:https://mvnrepository.com/


這里使用2.1版本的


<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>

6、運行web工程
【溫馨提示】默認埠是8080,上面配置的80

發現報錯了
嚴重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
【原因&解決】是因為默認創建的web.xml組態檔里有spring的配置,先把這些配置刪掉就行,最后web.xml只保留如下內容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
再運行


7、配置快捷運行方式


五、Maven依賴管理
1)依賴配置
依賴指當前專案運行所需的jar包,一個專案可以設定多個依賴,示例如下:
<!-- 設定當前專案所有依賴的所有jar包 -->
<dependencies>
<!-- 設定具體的依賴 -->
<dependency>
<!-- 依賴所屬群組id -->
<groupId>junit</groupId>
<!-- 依賴所屬專案id -->
<artifactId>junit</artifactId>
<!-- 依賴版本號 -->
<version>4.12</version>
</dependency>
</dependencies>
2)依賴傳遞
依賴具有傳遞性:
- 間接依賴:在當前專案中通過依賴配置建立的依賴關系
- 直接依賴:被資源的資源如果依賴其它資源,當前專案間接依賴其它資源
3)依賴管理
1、依賴傳遞沖突問題
- 路徑優先:當前依賴中出現相同的資源時,層級越深,優先級越低,層級越淺,優先級越高,
- 宣告優先:當資源在相同層級被依賴時,配置順序靠前的覆寫配置順序靠后的,
- 特殊優先:當同級配置了相同資源的不同版本,后配置的覆寫先配置的,
2、可選依賴
可選依賴指對外隱藏當前所依賴的資源----不透明
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 配置不透明 -->
<optional>true</optional>
</dependency>
3、排除依賴
排除依賴指主動斷開依賴的資源,被排除的資源無需指定版本----不需要
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 配置排除依賴 -->
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
4、依賴范圍
- 依賴的jar默認情況可以在任何地方使用,可以通過scope標簽設定起作用范圍
- 作用范圍
- 主程式范圍有效(main檔案夾范圍內)
- 測驗程式范圍有效(test檔案夾范圍內)
- 是否參與打包(package指令范圍內)

5、依賴范圍的傳遞性
帶有依賴范圍的資源在進行傳遞時,作用范圍將受到影響

六、生命周期與插件
1)專案構建生命周期
Maven構建生命周期描述的是一次構建程序經歷了多少的事件

2)Maven對構建的生命周期劃分三個階段
- clean:清理作業
- default:核心作業,例如編譯、測驗、打包、部署等,
- site:產生報告,發布站點等,
1、clean生命周期
- pre-clean:執行一些需要在clean之前完成的作業
- clean:移除所有上一次構建生成的檔案
- post-clean:執行一些需要在clean之后立刻完成的作業
2、default構建生命周期
- validate (校驗):校驗專案是否正確并且所有必要的資訊可以完成專案的構建程序,
- initialize (初始化):初始化構建狀態,比如設定屬性值,
- generate-sources (生成源代碼):生成包含在編譯階段中的任何源代碼,
- process-sources (處理源代碼):處理源代碼,比如說,過濾任意值,
- generate-resources (資源檔案):生成將會包含在專案包中的資源檔案,
- process-resources (處理資源檔案):復制和處理資源到目標目錄,為打包階段最好準備,
- compile (編譯):編譯專案的源代碼,
- process-classes (處理類檔案):處理編譯生成的檔案,比如說對Java class檔案做位元組碼改善優化,
- generate-test-sources (生成測驗源代碼):生成包含在編譯階段中的任何測驗源代碼,
- process-test-sources (處理測驗源代碼):處理測驗源代碼,比如說,過濾任意值,
- generate-test-resources (生成測驗資源檔案):為測驗創建資源檔案,
- process-test-resources (處理測驗資源檔案):復制和處理測驗資源到目標目錄,
- test-compile (編譯測驗原始碼):編譯測驗源代碼到測驗目標目錄,
- process-test-classes (處理測驗類檔案):處理測驗原始碼編譯生成的檔案,
- test (測驗):使用合適的單元測驗框架運行測驗(Juint是其中之一),
- prepare-package (準備打包):在實際打包之前,執行任何的必要的操作為打包做準備,
- package (打包):將編譯后的代碼打包成可分發格式的檔案,比如JAR、WAR或者EAR檔案,
- pre-integration-test (集成測驗前):在執行集成測驗前進行必要的動作,比如說,搭建需要的環境,
- integration-test (集成測驗):處理和部署專案到可以運行集成測驗環境中,
- post-integration-test (集成測驗后):在執行集成測驗完成后進行必要的動作,比如說,清理集成測驗環境,
- verify (驗證):運行任意的檢直來驗證專案包有效達到質量標準,
- install (安裝):安裝專案包到本地倉庫,這樣專案包可以用作其他本地專案的依賴,
- deploy (部署):將最終的專案包復制到遠程倉庫中與其他開發者和專案共享,
【溫馨提示】:像compile、test、test-compile、package、install等,排在它們前面的步驟都會執行,圖示如下:

3、site構建的生命周期
- pre-site:執行一些需要在生成站點檔案之前完成的作業
- site:生成專案的站點檔案
- post-site:執行一些需要在生成站點檔案之后完成的作業,并且為部署做準備
- site-deploy:將生成的站點檔案部署到特殊的服務器上
3)插件
插件與生命周期內的階段系結,在執行到對應生命周期時執行對應的插件功能,默認maven在各個生命周期上系結有預設的功能,通過插件可以自定義其他功能,
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
七、工程版本管理
- SNAPSHOT (快照版本)
專案開發程序中,為方便團隊成員合作,解決模塊間相互依賴和時時更新的問題,開發者對每個模塊進行構建的時候,輸出的臨時性版本叫快照版本(測驗階段版本),快照版本會隨著開發的進展不斷更新,
- RELEASE (發布版本)
專案開發到進入階段里程碑后,向團隊外部發布較為穩定的版本,這種版本所對應的構件檔案是穩定的,即便進行功能的后續開發,也不會改變當前發布版本內容,這種版本稱為發布版本,
工程版本號約定規范:
【版本格式】<主版本>.< 次版本>.<i曾量版本 >.<里程碑版本>
- 主版本:表示專案重大架構的變更,如:spring5相較于spring4的迭代
- 次版本:表示有較大的功能增加和變化,或者全面系統地修復漏洞
- 增量版本:表示有重大漏洞的修復
- 里程碑版本:表明一個版本的里程碑(版本內部),這樣的版本同下一個正式版本相比,相對來說不是很穩定,有待更多的測驗,
【范例】
5.1.9.RELEASE或5.1.9-RELEASE
八、多環境資源配置
一般公司至少有三套環境(開發、測驗、生產),如果每次把程式打包好上傳到對應的環境之前就得更改一下配置,是很煩的操作,所以就有了這里的多環境資源配置了,

示例:
<!-- 創建多環境 -->
<profiles>
<!-- 定義具體的環境:開發環境 -->
<profile>
<id>dev</id>
<!--…… -->
</profile>
<!-- 定義具體的環境:測驗環境 -->
<profile>
<id>test</id>
<!--…… -->
</profile>
<!-- 定義具體的環境:生產環境 -->
<profile>
<!-- 定義環境對應的唯一id -->
<id>pro</id>
<!-- 定義環境中專用的屬性 -->
<properties>
<jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
</properties>
<!-- 設定默認啟動 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
通過命令加載指定環境
【呼叫格式】mvn 指令 -P 環境定義id
【示例】
$ mvn install -P pro
九、跳過測驗
1)跳過測驗環節的應用場景
- 整體模塊功能未開發
- 模塊中某個功能未開發完畢
- 單個功能更新除錯導致其他功能失敗
- 快速打包
2)跳過測驗的兩種方法
- 使用命令跳過測驗
【呼叫格式】mvn 指令 –D skipTests
- 使用配置跳過測驗
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<!-- 設定跳過測驗 -->
<skipTests>true</skipTests>
<!-- 包含指定測驗用例 -->
<includes>
<include>**/User*Test.java</include>
</includes>
<!-- 排除指定測驗用例 -->
<excludes>
<exclude>**/User*TestCase.java</exclude>
</excludes>
</configuration>
</plugin>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/469673.html
標籤:其他
