重量級 | 重量級!Maven史上最全教程,看了必懂

Hi! 我是小小,今天是本周的第一篇,本周第一篇主要內(nèi)容是maven項目的創(chuàng)建和使用。
前言
為了持續(xù)集成和持續(xù)部署,需要把項目改造為,或者使用maven創(chuàng)建項目,下面介紹maven
為什么要使用maven
在開發(fā)中經(jīng)常需要依賴第三方包,包與包之間存在依賴關(guān)系,版本之間存在兼容問題,還有需要把包進行升級和降級,當(dāng)項目復(fù)雜到了一定程度的時候,需要對包進行管理。
maven是當(dāng)前最受歡迎的自動化綜合工具,類似的還有ant,npm,nuget,composer。
maven提供了開發(fā)人員構(gòu)建一個完整生命周期的框架,開發(fā)團隊可以自動化的完成項目的基礎(chǔ)工具建設(shè),maven使用標(biāo)準(zhǔn)目錄結(jié)構(gòu)和默認構(gòu)建生命周期,
因此maven是一個項目管理工具。主要做了以下幾件事情
統(tǒng)一開發(fā)規(guī)范與工具。 統(tǒng)一管理jar包
maven生命周期
maven把項目構(gòu)建劃分為不同的生命周期,它這個過程包括編譯,測試,打包,集成測試,驗證,部署,maven的所有執(zhí)行動作都需要指明自己在這個過程的執(zhí)行位置,然后在maven執(zhí)行的時候,依照過程的發(fā)展依次調(diào)用包進行處理。這個是maven的一個基本的調(diào)度機制,
maven的標(biāo)準(zhǔn)工程結(jié)構(gòu)
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
|-- java(java源代碼目錄)
|-- resources(資源文件目錄)
|-- test
|-- java(單元測試代碼目錄)
|-- target(輸出目錄,所有的輸出物都存放在這個目錄下)
|-- classes(編譯后的class文件存放處)
Maven的約定優(yōu)于配置
所謂的約定優(yōu)于配置,在maven中,并不是完全不可以修改,他們只是一些配置的默認值。每一個階段的任務(wù)都知道自己要這么正確的完成自己的工作,比如compile任務(wù)就知道從src/main/java下編譯所有的java文件,并把它的輸出的class文件存放到target/classes文件中。對于maven來說,采用約定優(yōu)于配置,可以減少工作量,降低學(xué)習(xí)成本。
Maven版本規(guī)范
groupId - 團體、組織的標(biāo)識符。團體標(biāo)識的約定是,它以創(chuàng)建這個項目的組織名稱的逆向域名(reverse domain name)開頭。一般對應(yīng)著 JAVA 的包的結(jié)構(gòu)。例如 org.apache artifactId - 單獨項目的唯一標(biāo)識符。比如我們的 tomcat, commons 等。不要在 artifactId 中包含點號(.)。version - 一個項目的特定版本。packaging - 項目的類型,默認是 jar,描述了項目打包后的輸出。類型為 jar 的項目產(chǎn)生一個 JAR 文件,類型為 war 的項目產(chǎn)生一個 web 應(yīng)用。
maven版本規(guī)范一般定義為
、、-
處理邏輯的版本號為
SNAPSHOT - 這個版本一般用于開發(fā)過程中,表示不穩(wěn)定的版本。
LATEST - 指某個特定構(gòu)件的最新發(fā)布,這個發(fā)布可能是一個發(fā)布版,也可能是一個 snapshot 版,具體看哪個時間最后。
RELEASE - 指最后一個發(fā)布版。
安裝
配置環(huán)境變量
(1)解壓壓縮包(以 apache-maven-3.3.9-bin.zip 為例)
(2)添加環(huán)境變量 MAVEN_HOME,值為 apache-maven-3.3.9 的安裝路徑
(3)在 Path 環(huán)境變量的變量值末尾添加%MAVEN_HOME%bin
(4)在 cmd 輸入 mvn –version,如果出現(xiàn) maven 的版本信息,說明配置成功。
本地倉儲配置
從中央倉庫下載的jar包都會統(tǒng)一的保存在本地倉庫中,我們需要配置本地倉庫的位置。在conf目錄下的setting.xml文件。
第一個maven工程
在 Intellij 中創(chuàng)建 Maven 工程
(1)創(chuàng)建 Maven 工程
依次點擊 File -> New -> Project 打開創(chuàng)建工程對話框,選擇 Maven 工程。
(2)輸入項目信息
(3)點擊 Intellij 側(cè)邊欄中的 Maven 工具界面,有幾個可以直接使用的 maven 命令,可以幫助你進行構(gòu)建。
Maven 命令構(gòu)建方式
進入工程目錄,輸入maven命令
使用指導(dǎo)
添加外部依賴 jar 包
在maven工程中添加 jar 包,只需要在 pom 文件中引入對應(yīng)的標(biāo)簽即可。
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.zp.maven
MavenDemo
0.0.1-SNAPSHOT
jar
MavenDemo
http://maven.apache.org
UTF-8
3.8.1
junit
junit
${junit.version}
test
log4j
log4j
1.2.12
compile
標(biāo)簽具有四個屬性。
- 項目組織唯一的標(biāo)識符,實際對應(yīng) JAVA 的包的結(jié)構(gòu)。
- 項目唯一的標(biāo)識符,實際對應(yīng)項目的名稱,就是項目根目錄的名稱。
- jar 包的版本號??梢灾苯犹畎姹緮?shù)字,也可以在 properties 標(biāo)簽中設(shè)置屬性值。
- jar 包的作用范圍??梢蕴顚?compile、runtime、test、system 和 provided。用來在編譯、測試等場景下選擇對應(yīng)的 classpath。
如何尋找 jar 包
在 ?mvnrepository.com 站點搜尋你想要的 jar 包版本
使用 maven 插件
要添加 Maven 插件,可以在 pom.xml 文件中添加
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.7
1.7
一次編譯多個工程
需要創(chuàng)建一個父 maven 工程,它有兩個字工程,my-app,my-webapp
+- pom.xml
+- my-app
| +- pom.xml
| +- src
| +- main
| +- java
+- my-webapp
| +- pom.xml
| +- src
| +- main
| +- webapp
app 工程的pom.xml 如下,重點在于 modules 中引入了兩個子 module
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">
4.0.0
com.mycompany.app
app
1.0-SNAPSHOT
pom
my-app
my-webapp
選擇編譯 某某 時,會依次對它所有的 module 執(zhí)行相同的操作。
如何打包一個可以直接運行的Spring Boot jar 包
可以使用 Spring-boot-maven-plugin 插件
org.springframework.boot
spring-boot-maven-plugin
repackage
如果引入了第三方j(luò)ar包,如何打包 首先,添加依賴
io.github.dunwu
dunwu-common
1.0.0
system
${project.basedir}/src/main/resources/lib/dunwu-common-1.0.0.jar
然后配置插件
org.springframework.boot
spring-boot-maven-plugin
repackage
true
最佳實踐
通過 bom 統(tǒng)一管理版本 使用類似 spring-boot-dependencies的方式統(tǒng)一管理依賴版本 spring-boot-dependencies的pom.xml的形式
4.0.0
org.springframework.boot
spring-boot-dependencies
2.1.4.RELEASE
pom
其他項目中,通過引入來管理依賴
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
關(guān)于作者
我是小小,一個生于二線,活在一線城市的程序猿,我是小小,我們下期再見。
