---
# System prepended metadata

title: Maven
tags: [Maven]

---

# Maven
###### tags: `Maven`
**預設配置**
${basedir} 代表專案根目錄
${basedir}/target => 打包後的路徑

**Snapshot 版本与 Release 版本**
Snapshot：版號後面帶Snapshot代表該版本還是在開發中，隨時可能會有更新的版本
Release：版號後面帶Release代表該版本為穩定完整的版本


**Maven Repository**
Maven Repository(倉庫)可分為**本地倉庫**、**中央倉庫**、**第三方倉庫**

 1. 本地倉庫
從中央或第三方倉庫下載下來放到本機的倉庫，預設路徑為

		  $user.home/.m2/repository
	可透過修改Maven setting 來調整存放位置
		
		<localRepository>D:/tools/Repository/DIGITAL_REPO/repository</localRepository>

2. 中央倉庫
Maven官方提供、維護的倉庫

		https://mvnrepository.com/

	可透過此網址查找需要的套件

3. 第三方倉庫
	個人或公司建立的倉庫通常只提供給公司內部使用

pom.xml找jar的路徑
1. 本地找到直接用
2. 本地找不到找第三方，找到就下載到本地 
3. 第三方找不到找中央，找到後下載到本地、第三方  	


ps 沒有第三方則跳過

**生命週期**
clean lifecycle
1. pre-clean
2. clean
3. post-clean

default lifecycle
1. clean : 清除過去編譯的資料
2. compile : 將java檔編譯成class檔
3. test : 執行測試程式(JUnit)
4. package : 將project打包成war / jar
5. integration-test
6. verify
7. install : 將打包後的檔案複製到setting.xml指定的localRepository位置
8. deploy : 將最後的結果上傳到遠端倉庫

site lifecycle
1. pre-site 
2. site
3. post-site
4. site-deploy
 
 這三個相互獨立的生命週期互不影響，定義了建構過程的執行順序
maven執行任一階段時前面所有階段皆會執行
例如執行 mvn install時 install前面的都會執行 但不會執行clean、site因為他們是在不同的生命週期

**Maven command**
mvn clean 、 mvn package、mvn install ... 
參數
-u : 檢查所有snapshot是否為最新
-Dmaven.test.skip=true : 不執行、不編譯測試類
-DskipTests  : 不執行測試類但編譯
-P : 多環境打包