Maven安裝配置全教程
一、Maven 簡介
Maven 是什么
Maven (opens new window)是一個項目管理工具。它負責管理項目開發過程中的幾乎所有的東西。
- 版本 - maven 有自己的版本定義和規則。
- 構建 - maven 支持許多種的應用程序類型,對於每一種支持的應用程序類型都定義好了一組構建規則和工具集。
- 輸出物管理 - maven 可以管理項目構建的產物,並將其加入到用戶庫中。這個功能可以用於項目組和其他部門之間的交付行為。
- 依賴關系 - maven 對依賴關系的特性進行細致的分析和划分,避免開發過程中的依賴混亂和相互污染行為
- 文檔和構建結果 - maven 的 site 命令支持各種文檔信息的發布,包括構建過程的各種輸出,javadoc,產品文檔等。
- 項目關系 - 一個大型的項目通常有幾個小項目或者模塊組成,用 maven 可以很方便地管理。
- 移植性管理 - maven 可以針對不同的開發場景,輸出不同種類的輸出結果。
Maven 的生命周期
maven 把項目的構建划分為不同的生命周期(lifecycle)。粗略一點的話,它這個過程(phase)包括:編譯、測試、打包、集成測試、驗證、部署。maven 中所有的執行動作(goal)都需要指明自己在這個過程中的執行位置,然后 maven 執行的時候,就依照過程的發展依次調用這些 goal 進行各種處理。
這個也是 maven 的一個基本調度機制。一般來說,位置稍后的過程都會依賴於之前的過程。當然,maven 同樣提供了配置文件,可以依照用戶要求,跳過某些階段。
Maven 的標准工程結構
Maven 的標准工程結構如下:
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
|-- java(java源代碼目錄)
|-- resources(資源文件目錄)
|-- test
|-- java(單元測試代碼目錄)
|-- target(輸出目錄,所有的輸出物都存放在這個目錄下)
|-- classes(編譯后的class文件存放處)
Maven 的"約定優於配置"
所謂的"約定優於配置",在 maven 中並不是完全不可以修改的,他們只是一些配置的默認值而已。但是除非必要,並不需要去修改那些約定內容。maven 默認的文件存放結構如下:
每一個階段的任務都知道怎么正確完成自己的工作,比如 compile 任務就知道從 src/main/java 下編譯所有的 java 文件,並把它的輸出 class 文件存放到 target/classes 中。
對 maven 來說,采用"約定優於配置"的策略可以減少修改配置的工作量,也可以降低學習成本,更重要的是,給項目引入了統一的規范。
Maven 的版本規范
maven 使用如下幾個要素來唯一定位某一個輸出物:
- groupId - 團體、組織的標識符。團體標識的約定是,它以創建這個項目的組織名稱的逆向域名(reverse domain name)開頭。一般對應着 JAVA 的包的結構。例如 org.apache
- artifactId - 單獨項目的唯一標識符。比如我們的 tomcat, commons 等。不要在 artifactId 中包含點號(.)。
- version - 一個項目的特定版本。
- packaging - 項目的類型,默認是 jar,描述了項目打包后的輸出。類型為 jar 的項目產生一個 JAR 文件,類型為 war 的項目產生一個 web 應用。
例如:想在 maven 工程中引入 4.12 版本的 junit 包,添加如下依賴即可。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
maven 有自己的版本規范,一般是如下定義 <major version>
、<minor version>
、<incremental version>-<qualifier>
,比如 1.2.3-beta-01。要說明的是,maven 自己判斷版本的算法是 major,minor,incremental 部分用數字比 較,qualifier 部分用字符串比較,所以要小心 alpha-2 和 alpha-15 的比較關系,最好用 alpha-02 的格式。
maven 在版本管理時候可以使用幾個特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如"1.0-SNAPSHOT"。各個部分的含義和處理邏輯如下說明:
- SNAPSHOT - 這個版本一般用於開發過程中,表示不穩定的版本。
- LATEST - 指某個特定構件的最新發布,這個發布可能是一個發布版,也可能是一個 snapshot 版,具體看哪個時間最后。
- RELEASE - 指最后一個發布版。
二、Maven 安裝
Linux 環境安裝可以使用我寫一鍵安裝腳本:https://github.com/dunwu/linux-tutorial/tree/master/codes/linux/ops/service/maven
環境准備
Maven 依賴於 Java,所以本地必須安裝 JDK。
打開控制台,執行 java -version
確認本地已安裝 JDK。
$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
下載解壓
進入 官網下載地址 (opens new window),選擇合適版本,下載並解壓到本地。解壓命令如下:
# 以下解壓命令分別針對 zip 包和 tar 包
unzip apache-maven-3.6.3-bin.zip
tar xzvf apache-maven-3.6.3-bin.tar.gz
環境變量
添加環境變量 MAVEN_HOME
,值為 Maven 的安裝路徑。
配置 Unix 系統環境變量
輸入 vi /etc/profile
,添加環境變量如下:
# MAVEN 的根路徑
export MAVEN_HOME=/opt/maven/apache-maven-3.5.2
export PATH=$MAVEN_HOME/bin:$PATH
執行 source /etc/profile
,立即生效。
配置 Windows 系統環境變量
右鍵 "計算機",選擇 "屬性",之后點擊 "高級系統設置",點擊"環境變量",來設置環境變量,有以下系統變量需要配置:
檢測安裝成功
檢驗是否安裝成功,執行 mvn -v
命令,如果輸出類似下面的 maven 版本信息,說明配置成功。
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe)
Maven home: /opt/maven/apache-maven-3.5.4
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /mnt/disk1/jdk1.8.0_191/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
Maven 配置文件
setting.xml
文件是 Maven 的默認配置文件,其默認路徑為:<Maven 安裝目錄>/conf/settings.xml
。
如果需要修改 Maven 配置,直接修改 setting.xml
並保持即可。
例如:想要修改本地倉庫位置可以按如下配置,這樣,所有通過 Maven 下載打包的 jar 包都會存儲在 D:\maven\repo
路徑下。
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<localRepository>D:\maven\repo<localRepository/> <- 修改本地倉庫位置
<mirror>
<id>alimaven</id>
<name>aliyun-maven</name>
<mirrorOf>central</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url> <-阿里加速
</mirror>
</mirrors>
</settings>
三、快速入門
創建 Maven 工程
初始化工程
執行指令:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
會在當前路徑新建一個名為 my-app
的 Maven 工程,其目錄結構如下:
my-app
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
其中, src/main/java
目錄包含 java 源碼, src/test/java
目錄包含 java 測試源碼,而 pom.xml
文件是 maven 工程的配置文件。
POM 配置
pom.xml 是 maven 工程的配置文件,它描述了 maven 工程的構建方式,其配置信息是很復雜的,這里給一個最簡單的配置示例:
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>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
構建項目
執行以下命令,即可構建項目:
mvn clean package -Dmaven.test.skip=true -B -U
構建成功后,會輸出類似下面的信息:
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.953 s
[INFO] Finished at: 2019-11-24T13:05:10+01:00
[INFO] ------------------------------------------------------------------------
這時,在當前路徑下會產生一個 target
目錄,其中包含了構建的輸出物,如:jar 包、class 文件等。
這時,我們可以執行以下命令啟動 jar 包:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
在 Intellij 中創建 Maven 工程
(1)創建 Maven 工程
依次點擊 File -> New -> Project 打開創建工程對話框,選擇 Maven 工程。
(2)輸入項目信息
(3)點擊 Intellij 側邊欄中的 Maven 工具界面,有幾個可以直接使用的 maven 命令,可以幫助你進行構建。
在 Eclipse 中創建 Maven 工程
(1)Maven 插件
在 Eclipse 中創建 Maven 工程,需要安裝 Maven 插件。
一般較新版本的 Eclipse 都會帶有 Maven 插件,如果你的 Eclipse 中已經有 Maven 插件,可以跳過這一步驟。
點擊 Help -> Eclipse Marketplace,搜索 maven 關鍵字,選擇安裝紅框對應的 Maven 插件。
(2)Maven 環境配置
點擊 Window -> Preferences
如下圖所示,配置 settings.xml 文件的位置
(3)創建 Maven 工程
File -> New -> Maven Project -> Next,在接下來的窗口中會看到一大堆的項目模板,選擇合適的模板。
接下來設置項目的參數,如下:
groupId是項目組織唯一的標識符,實際對應 JAVA 的包的結構,是 main 目錄里 java 的目錄結構。
artifactId就是項目的唯一的標識符,實際對應項目的名稱,就是項目根目錄的名稱。
點擊 Finish,Eclipse 會創建一個 Maven 工程。
(4)使用 Maven 進行構建
Eclipse 中構建方式:
在 Elipse 項目上右擊 -> Run As 就能看到很多 Maven 操作。這些操作和 maven 命令是等效的。例如 Maven clean,等同於 mvn clean 命令。
你也可以點擊 Maven build,輸入組合命令,並保存下來。如下圖:
Maven 命令構建方式:
當然,你也可以直接使用 maven 命令進行構建。
進入工程所在目錄,輸入 maven 命令就可以了。
四、使用說明
如何添加依賴
在 Maven 工程中添加依賴 jar 包,很簡單,只要在 POM 文件中引入對應的<dependency>
標簽即可。
參考下例:
<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>
<groupId>com.zp.maven</groupId>
<artifactId>MavenDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MavenDemo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
<dependency>
標簽最常用的四個屬性標簽:
<groupId>
- 項目組織唯一的標識符,實際對應 JAVA 的包的結構。<artifactId>
- 項目唯一的標識符,實際對應項目的名稱,就是項目根目錄的名稱。<version>
- jar 包的版本號。可以直接填版本數字,也可以在 properties 標簽中設置屬性值。<scope>
- jar 包的作用范圍。可以填寫 compile、runtime、test、system 和 provided。用來在編譯、測試等場景下選擇對應的 classpath。
如何尋找 jar 包
可以在 http://mvnrepository.com/ (opens new window)站點搜尋你想要的 jar 包版本
例如,想要使用 log4j,可以找到需要的版本號,然后拷貝對應的 maven 標簽信息,將其添加到 pom .xml 文件中。
如何使用 Maven 插件(Plugin)
要添加 Maven 插件,可以在 pom.xml 文件中添加 <plugin>
標簽。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<configuration>
標簽用來配置插件的一些使用參數。
如何一次編譯多個工程
假設要創建一個父 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:
<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>
<groupId>com.mycompany.app</groupId>
<artifactId>app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>my-app</module>
<module>my-webapp</module>
</modules>
</project>
選擇編譯 XXX 時,會依次對它的所有 Module 執行相同操作。
常用 Maven 插件
#maven-antrun-plugin(opens new window)
maven-antrun-plugin 能讓用戶在 Maven 項目中運行 Ant 任務。用戶可以直接在該插件的配置以 Ant 的方式編寫 Target, 然后交給該插件的 run 目標去執行。在一些由 Ant 往 Maven 遷移的項目中,該插件尤其有用。此外當你發現需要編寫一些自定義程度很高的任務,同時又覺 得 Maven 不夠靈活時,也可以以 Ant 的方式實現之。maven-antrun-plugin 的 run 目標通常與生命周期綁定運行。
#maven-archetype-plugin(opens new window)
Archtype 指項目的骨架,Maven 初學者最開始執行的 Maven 命令可能就是mvn archetype:generate,這實際上就是讓 maven-archetype-plugin 生成一個很簡單的項目骨架,幫助開發者快速上手。可能也有人看到一些文檔寫了mvn archetype:create, 但實際上 create 目標已經被棄用了,取而代之的是 generate 目標,該目標使用交互式的方式提示用戶輸入必要的信息以創建項目,體驗更好。 maven-archetype-plugin 還有一些其他目標幫助用戶自己定義項目原型,例如你由一個產品需要交付給很多客戶進行二次開發,你就可以為 他們提供一個 Archtype,幫助他們快速上手。
#maven-assembly-plugin(opens new window)
maven-assembly-plugin 的用途是將項目打包,該包可能包含了項目的可執行文件、源代碼、readme、平台腳本等等。 maven-assembly-plugin 支持各種主流的格式如 zip、tar.gz、jar 和 war 等,具體打包哪些文件是高度可控的,例如用戶可以 按文件級別的粒度、文件集級別的粒度、模塊級別的粒度、以及依賴級別的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly- plugin 要求用戶使用一個名為assembly.xml
的元數據文件來表述打包,它的 single 目標可以直接在命令行調用,也可以被綁定至生命周期。
#maven-dependency-plugin(opens new window)
maven-dependency-plugin 最大的用途是幫助分析項目依賴,dependency:list能夠列出項目最終解析到的依賴列表,dependency:tree能進一步的描繪項目依賴樹,dependency:analyze可以告訴你項目依賴潛在的問題,如果你有直接使用到的卻未聲明的依賴,該目標就會發出警告。maven-dependency-plugin 還有很多目標幫助你操作依賴文件,例如dependency:copy-dependencies能將項目依賴從本地 Maven 倉庫復制到某個特定的文件夾下面。
#maven-enforcer-plugin(opens new window)
在一個稍大一點的組織或團隊中,你無法保證所有成員都熟悉 Maven,那他們做一些比較愚蠢的事情就會變得很正常,例如給項目引入了外部的 SNAPSHOT 依賴而導致構建不穩定,使用了一個與大家不一致的 Maven 版本而經常抱怨構建出現詭異問題。maven-enforcer- plugin 能夠幫助你避免之類問題,它允許你創建一系列規則強制大家遵守,包括設定 Java 版本、設定 Maven 版本、禁止某些依賴、禁止 SNAPSHOT 依賴。只要在一個父 POM 配置規則,然后讓大家繼承,當規則遭到破壞的時候,Maven 就會報錯。除了標准的規則之外,你還可以擴展該插 件,編寫自己的規則。maven-enforcer-plugin 的 enforce 目標負責檢查規則,它默認綁定到生命周期的 validate 階段。
#maven-help-plugin(opens new window)
maven-help-plugin 是一個小巧的輔助工具,最簡單的help:system可以打印所有可用的環境變量和 Java 系統屬性。help:effective-pom和help:effective-settings最 為有用,它們分別打印項目的有效 POM 和有效 settings,有效 POM 是指合並了所有父 POM(包括 Super POM)后的 XML,當你不確定 POM 的某些信息從何而來時,就可以查看有效 POM。有效 settings 同理,特別是當你發現自己配置的 settings.xml 沒有生效時,就可以用help:effective-settings來驗證。此外,maven-help-plugin 的 describe 目標可以幫助你描述任何一個 Maven 插件的信息,還有 all-profiles 目標和 active-profiles 目標幫助查看項目的 Profile。
#maven-release-plugin(opens new window)
maven-release-plugin 的用途是幫助自動化項目版本發布,它依賴於 POM 中的 SCM 信息。release:prepare用來准備版本發布,具體的工作包括檢查是否有未提交代碼、檢查是否有 SNAPSHOT 依賴、升級項目的 SNAPSHOT 版本至 RELEASE 版本、為項目打標簽等等。release:perform則 是簽出標簽中的 RELEASE 源碼,構建並發布。版本發布是非常瑣碎的工作,它涉及了各種檢查,而且由於該工作僅僅是偶爾需要,因此手動操作很容易遺漏一 些細節,maven-release-plugin 讓該工作變得非常快速簡便,不易出錯。maven-release-plugin 的各種目標通常直接在 命令行調用,因為版本發布顯然不是日常構建生命周期的一部分。
#maven-resources-plugin(opens new window)
為了使項目結構更為清晰,Maven 區別對待 Java 代碼文件和資源文件,maven-compiler-plugin 用來編譯 Java 代碼,maven-resources-plugin 則用來處理資源文件。默認的主資源文件目錄是src/main/resources
,很多用戶會需要添加額外的資源文件目錄,這個時候就可以通過配置 maven-resources-plugin 來實現。此外,資源文件過濾也是 Maven 的一大特性,你可以在資源文件中使用${propertyName}形式的 Maven 屬性,然后配置 maven-resources-plugin 開啟對資源文件的過濾,之后就可以針對不同環境通過命令行或者 Profile 傳入屬性的值,以實現更為靈活的構建。
#maven-surefire-plugin(opens new window)
可能是由於歷史的原因,Maven 2.3 中用於執行測試的插件不是 maven-test-plugin,而是 maven-surefire-plugin。其實大部分時間內,只要你的測試 類遵循通用的命令約定(以 Test 結尾、以 TestCase 結尾、或者以 Test 開頭),就幾乎不用知曉該插件的存在。然而在當你想要跳過測試、排除某些 測試類、或者使用一些 TestNG 特性的時候,了解 maven-surefire-plugin 的一些配置選項就很有用了。例如 mvn test -Dtest=FooTest 這樣一條命令的效果是僅運行 FooTest 測試類,這是通過控制 maven-surefire-plugin 的 test 參數實現的。
#build-helper-maven-plugin(opens new window)
Maven 默認只允許指定一個主 Java 代碼目錄和一個測試 Java 代碼目錄,雖然這其實是個應當盡量遵守的約定,但偶爾你還是會希望能夠指定多個 源碼目錄(例如為了應對遺留項目),build-helper-maven-plugin 的 add-source 目標就是服務於這個目的,通常它被綁定到 默認生命周期的 generate-sources 階段以添加額外的源碼目錄。需要強調的是,這種做法還是不推薦的,因為它破壞了 Maven 的約定,而且可能會遇到其他嚴格遵守約定的插件工具無法正確識別額外的源碼目錄。
build-helper-maven-plugin 的另一個非常有用的目標是 attach-artifact,使用該目標你可以以 classifier 的形式選取部分項目文件生成附屬構件,並同時 install 到本地倉庫,也可以 deploy 到遠程倉庫。
#exec-maven-plugin(opens new window)
exec-maven-plugin 很好理解,顧名思義,它能讓你運行任何本地的系統程序,在某些特定情況下,運行一個 Maven 外部的程序可能就是最簡單的問題解決方案,這就是exec:exec的 用途,當然,該插件還允許你配置相關的程序運行參數。除了 exec 目標之外,exec-maven-plugin 還提供了一個 java 目標,該目標要求你 提供一個 mainClass 參數,然后它能夠利用當前項目的依賴作為 classpath,在同一個 JVM 中運行該 mainClass。有時候,為了簡單的 演示一個命令行 Java 程序,你可以在 POM 中配置好 exec-maven-plugin 的相關運行參數,然后直接在命令運行mvn exec:java 以查看運行效果。
#jetty-maven-plugin(opens new window)
在進行 Web 開發的時候,打開瀏覽器對應用進行手動的測試幾乎是無法避免的,這種測試方法通常就是將項目打包成 war 文件,然后部署到 Web 容器 中,再啟動容器進行驗證,這顯然十分耗時。為了幫助開發者節省時間,jetty-maven-plugin 應運而生,它完全兼容 Maven 項目的目錄結構,能夠周期性地檢查源文件,一旦發現變更后自動更新到內置的 Jetty Web 容器中。做一些基本配置后(例如 Web 應用的 contextPath 和自動掃描變更的時間間隔),你只要執行 mvn jetty:run ,然后在 IDE 中修改代碼,代碼經 IDE 自動編譯后產生變更,再由 jetty-maven-plugin 偵測到后更新至 Jetty 容器,這時你就可以直接 測試 Web 頁面了。需要注意的是,jetty-maven-plugin 並不是宿主於 Apache 或 Codehaus 的官方插件,因此使用的時候需要額外 的配置settings.xml
的 pluginGroups 元素,將 org.mortbay.jetty 這個 pluginGroup 加入。
#versions-maven-plugin(opens new window)
很多 Maven 用戶遇到過這樣一個問題,當項目包含大量模塊的時候,為他們集體更新版本就變成一件煩人的事情,到底有沒有自動化工具能幫助完成這件 事情呢?(當然你可以使用 sed 之類的文本操作工具,不過不在本文討論范圍)答案是肯定的,versions-maven- plugin 提供了很多目標幫助你管理 Maven 項目的各種版本信息。例如最常用的,命令 mvn versions:set -DnewVersion=1.1-SNAPSHOT 就能幫助你把所有模塊的版本更新到 1.1-SNAPSHOT。該插件還提供了其他一些很有用的目標,display-dependency- updates 能告訴你項目依賴有哪些可用的更新;類似的 display-plugin-updates 能告訴你可用的插件更新;然后 use- latest-versions 能自動幫你將所有依賴升級到最新版本。最后,如果你對所做的更改滿意,則可以使用 mvn versions:commit 提交,不滿意的話也可以使用 mvn versions:revert 進行撤銷。
Maven 命令
常用 maven 命令清單:
生命周期 | 階段描述 |
---|---|
mvn validate | 驗證項目是否正確,以及所有為了完整構建必要的信息是否可用 |
mvn generate-sources | 生成所有需要包含在編譯過程中的源代碼 |
mvn process-sources | 處理源代碼,比如過濾一些值 |
mvn generate-resources | 生成所有需要包含在打包過程中的資源文件 |
mvn process-resources | 復制並處理資源文件至目標目錄,准備打包 |
mvn compile | 編譯項目的源代碼 |
mvn process-classes | 后處理編譯生成的文件,例如對 Java 類進行字節碼增強(bytecode enhancement) |
mvn generate-test-sources | 生成所有包含在測試編譯過程中的測試源碼 |
mvn process-test-sources | 處理測試源碼,比如過濾一些值 |
mvn generate-test-resources | 生成測試需要的資源文件 |
mvn process-test-resources | 復制並處理測試資源文件至測試目標目錄 |
mvn test-compile | 編譯測試源碼至測試目標目錄 |
mvn test | 使用合適的單元測試框架運行測試。這些測試應該不需要代碼被打包或發布 |
mvn prepare-package | 在真正的打包之前,執行一些准備打包必要的操作。這通常會產生一個包的展開的處理過的版本(將會在 Maven 2.1+中實現) |
mvn package | 將編譯好的代碼打包成可分發的格式,如 JAR,WAR,或者 EAR |
mvn pre-integration-test | 執行一些在集成測試運行之前需要的動作。如建立集成測試需要的環境 |
mvn integration-test | 如果有必要的話,處理包並發布至集成測試可以運行的環境 |
mvn post-integration-test | 執行一些在集成測試運行之后需要的動作。如清理集成測試環境。 |
mvn verify | 執行所有檢查,驗證包是有效的,符合質量規范 |
mvn install | 安裝包至本地倉庫,以備本地的其它項目作為依賴使用 |
mvn deploy | 復制最終的包至遠程倉庫,共享給其它開發人員和項目(通常和一次正式的發布相關) |
示例:最常用的 maven 構建命令
mvn clean install -Dmaven.test.skip=true -B -U