關(guān)于Maven構(gòu)建命令使用詳解
1. Maven 構(gòu)建命令概述
Maven 是 Java 生態(tài)中最流行的構(gòu)建工具之一,它提供了一套標(biāo)準(zhǔn)化的構(gòu)建命令,使得開(kāi)發(fā)者可以輕松管理項(xiàng)目的編譯、測(cè)試、打包、安裝和部署等任務(wù)。
本篇文章將深入解析 Maven 中最常用的構(gòu)建命令,包括:
mvn clean
mvn compile
mvn test
mvn package
mvn install
mvn deploy
- 其他常見(jiàn)命令,如
mvn dependency:tree
、mvn help:effective-pom
等。
2. Maven 構(gòu)建命令詳解
2.1 mvn clean
作用:清除 target/
目錄,刪除之前構(gòu)建的文件,確保下一次構(gòu)建的干凈環(huán)境。
mvn clean
執(zhí)行過(guò)程:
- 刪除
target/
目錄 - 移除編譯生成的 class 文件、打包的 JAR 文件等
適用場(chǎng)景:
- 在重新構(gòu)建項(xiàng)目之前,避免舊的編譯文件影響新版本。
示例:
mvn clean package
效果:
- 先清理
target/
目錄,再進(jìn)行打包。
2.2 mvn compile
作用:編譯 src/main/java
目錄下的源代碼,并生成 .class
文件到 target/classes/
目錄。
mvn compile
執(zhí)行過(guò)程:
- 解析
pom.xml
- 下載項(xiàng)目依賴(lài)(如果依賴(lài)不存在)
- 編譯
src/main/java
目錄下的 Java 源代碼 - 生成
.class
文件到target/classes/
適用場(chǎng)景:
- 當(dāng)需要僅編譯代碼而不執(zhí)行測(cè)試時(shí)。
示例:
mvn clean compile
效果:
- 先清理
target/
目錄,然后編譯代碼。
2.3 mvn test
作用:編譯 src/test/java
目錄下的測(cè)試代碼,并運(yùn)行單元測(cè)試(JUnit、TestNG)。
mvn test
執(zhí)行過(guò)程:
- 先執(zhí)行
mvn compile
- 編譯
src/test/java
目錄下的測(cè)試代碼 - 運(yùn)行測(cè)試(JUnit 或 TestNG)
適用場(chǎng)景:
- 運(yùn)行項(xiàng)目中的單元測(cè)試,確保代碼邏輯正確。
示例:
mvn clean test
效果:
- 先清理
target/
目錄,然后運(yùn)行所有測(cè)試。
2.4 mvn package
作用:將編譯后的代碼打包(如 JAR、WAR)到 target/
目錄。
mvn package
執(zhí)行過(guò)程:
- 先執(zhí)行
mvn test
- 打包
target/classes/
下的文件為 JAR 或 WAR
適用場(chǎng)景:
- 當(dāng)需要生成可部署的 JAR/WAR 文件時(shí)。
示例:
mvn clean package
效果:
- 清理舊的
target/
目錄,編譯代碼,運(yùn)行測(cè)試,最終打包 JAR/WAR。
2.5 mvn install
作用:將打包好的 JAR/WAR 文件安裝到 本地 Maven 倉(cāng)庫(kù)(~/.m2/repository/
),供其他項(xiàng)目使用。
mvn install
執(zhí)行過(guò)程:
- 先執(zhí)行
mvn package
- 將
target/
目錄中的 JAR/WAR 文件復(fù)制到本地 Maven 倉(cāng)庫(kù)
適用場(chǎng)景:
- 當(dāng)開(kāi)發(fā)多個(gè)模塊(Module)時(shí),一個(gè)模塊可以安裝到本地倉(cāng)庫(kù),以便另一個(gè)模塊引用。
示例:
mvn clean install
效果:
- 清理舊的構(gòu)建,編譯代碼,運(yùn)行測(cè)試,打包,并安裝到本地倉(cāng)庫(kù)。
2.6 mvn deploy
作用:將構(gòu)建好的 JAR/WAR 部署到 遠(yuǎn)程 Maven 倉(cāng)庫(kù),如 Nexus、Artifactory。
mvn deploy
執(zhí)行過(guò)程:
- 先執(zhí)行
mvn install
- 上傳
target/
目錄中的 JAR/WAR 文件到遠(yuǎn)程 Maven 倉(cāng)庫(kù)
適用場(chǎng)景:
- 當(dāng)開(kāi)發(fā)的庫(kù)需要在團(tuán)隊(duì)內(nèi)部共享時(shí),可以部署到私有倉(cāng)庫(kù)(如 Nexus)。
示例:
mvn clean deploy
效果:
- 清理、編譯、測(cè)試、打包,并上傳到遠(yuǎn)程倉(cāng)庫(kù)。
3. 其他常用 Maven 命令
3.1 查看依賴(lài)樹(shù)
作用:列出所有項(xiàng)目依賴(lài),包括傳遞性依賴(lài),幫助分析依賴(lài)沖突。
mvn dependency:tree
示例:
mvn dependency:tree
輸出:
[INFO] com.example:my-app:jar:1.0-SNAPSHOT
[INFO] ├─ org.springframework:spring-core:jar:5.3.9:compile
[INFO] ├─ commons-logging:commons-logging:jar:1.2:compile
3.2 強(qiáng)制更新依賴(lài)
作用:強(qiáng)制更新所有依賴(lài),確保拉取最新版本。
mvn clean install -U
3.3 顯示 Maven 有效的 POM 配置
作用:查看合并后的 pom.xml
,幫助調(diào)試依賴(lài)管理。
mvn help:effective-pom
3.4 跳過(guò)測(cè)試
作用:構(gòu)建時(shí)跳過(guò)單元測(cè)試,提高構(gòu)建速度。
mvn clean package -DskipTests
3.5 運(yùn)行單個(gè)測(cè)試
作用:只運(yùn)行指定的測(cè)試類(lèi),而不是運(yùn)行所有測(cè)試。
mvn test -Dtest=MyTestClass
3.6 運(yùn)行 Web 項(xiàng)目
作用:如果使用 tomcat7-maven-plugin
,可以直接運(yùn)行 Web 項(xiàng)目。
mvn tomcat7:run
4. Maven 常用命令總結(jié)
命令 | 作用 |
---|---|
mvn clean | 刪除 target/ 目錄,清理構(gòu)建文件 |
mvn compile | 編譯 src/main/java 目錄中的代碼 |
mvn test | 運(yùn)行 src/test/java 目錄下的測(cè)試代碼 |
mvn package | 生成 JAR/WAR 文件 |
mvn install | 將 JAR/WAR 安裝到本地 Maven 倉(cāng)庫(kù) |
mvn deploy | 將 JAR/WAR 部署到遠(yuǎn)程倉(cāng)庫(kù) |
mvn dependency:tree | 查看項(xiàng)目的依賴(lài)樹(shù) |
mvn clean install -U | 強(qiáng)制更新依賴(lài) |
mvn help:effective-pom | 查看合并后的 POM 配置 |
mvn clean package -DskipTests | 跳過(guò)測(cè)試打包 |
mvn test -Dtest=MyTestClass | 只運(yùn)行指定的測(cè)試類(lèi) |
5. 總結(jié)
- Maven 提供了一套標(biāo)準(zhǔn)的構(gòu)建命令,涵蓋了 清理、編譯、測(cè)試、打包、安裝、部署 等功能。
- 通過(guò)
mvn clean install
可以完成一次完整的構(gòu)建,并安裝到本地倉(cāng)庫(kù)。 - 通過(guò)
mvn deploy
可以將構(gòu)建好的 JAR/WAR 部署到遠(yuǎn)程倉(cāng)庫(kù),供團(tuán)隊(duì)共享。 - 通過(guò)
mvn dependency:tree
可以分析依賴(lài)關(guān)系,幫助解決依賴(lài)沖突。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot獲取maven打包時(shí)間的兩種方式
這篇文章主要介紹了SpringBoot獲取maven打包時(shí)間的兩種方式,文章通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05Java動(dòng)態(tài)設(shè)置注解值及原理詳解
這篇文章主要介紹了Java動(dòng)態(tài)設(shè)置注解值及原理詳解,AnnotationInvocationHandler是注解的代理hander,通過(guò)反射獲取類(lèi)的注解時(shí)會(huì)通過(guò)AnnotationInvocationHandler創(chuàng)建代理對(duì)象并將數(shù)據(jù)存儲(chǔ)到memberValues里,需要的朋友可以參考下2023-11-11Java項(xiàng)目中添加外部jar包的兩種方式(收藏版)
這篇文章主要介紹了java項(xiàng)目中添加外部jar包的兩種方式,第二種方式是將外部jar包引入到本地maven倉(cāng)庫(kù)中,本文給大家講解的非常詳細(xì),需要的朋友可以參考下2023-03-03SpringBoot接口數(shù)據(jù)加解密實(shí)戰(zhàn)記錄
現(xiàn)今對(duì)于大多數(shù)公司來(lái)說(shuō),信息安全工作尤為重要,下面這篇文章主要給大家介紹了關(guān)于SpringBoot接口數(shù)據(jù)加解密的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07SpringBoot?Profile多環(huán)境配置方式
這篇文章主要介紹了SpringBoot?Profile多環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06關(guān)于Java中byte[]?和?String互相轉(zhuǎn)換問(wèn)題
這篇文章主要介紹了Java中byte[]?和?String互相轉(zhuǎn)換問(wèn)題,通過(guò)用例給大家介紹了通過(guò)String類(lèi)將String轉(zhuǎn)換成byte[]或者byte[]轉(zhuǎn)換成String,具體實(shí)例代碼跟隨小編一起看看吧2022-01-01