Apache Maven是一套軟體專案管理及自動構建工具,由Apache軟體基金會所提供,解決了軟體構建的兩方面的問題:一是軟體是如何構建的,二是軟體的依賴關係,基於專案模型(Project Object Model, POM)的抽象概念管理專案的構建、報告和文件。官方網站: https://maven.apache.org/
Maven Project下會存有pom.xml這個檔案,由XML格式撰寫,pom為Project Object Model的縮寫,其內容包含專案的描述、依賴、使用的plugin及Maven該如何建置專案的等配置說明,以便開發人員可以更好「理解」專案。
物件指的是軟體運行時,真正在運作的"東西",它是"活的"、會"和其他物件交互"的、依"某個目的進行運作的"。所以 pom.xml 基本上可以看成是一個「劇本」,它描述了 Maven project 這齣劇的演員有哪些?出場順序是什麼?
存放Artifact(構建)的地方,以Java軟體來說,就是存放jar檔的地方。
Maven Central Repository: https://mvnrepository.com/
也是Remote Repostory,但為組織自行建立的私有倉庫。
本機存放構建的資料夾
預設位置: 在Windows使用者資料夾底下,且為隱藏的資料夾,資料夾名稱為.m2/repository`
archetype (原型):用以說明目前的 project ,其初始目的及具備的元素。
groupId:用以表示 project 被什麼組織所建立、擁有。
archetypeId:用以表示 project 的名稱。
artifact:用以表示這個 project 的 archetype 是某個他人所預先建構好的。
archetypeArtifaceId:用以表示目前的 project 是參考某個他人預先建構好的 archetype 以重製建構出來的。
dependencies:聲明專案所需依賴,建置時自動下載相應的jar檔
Plugins:TODO
<主版本>.<次版本>.<增量版本>-<里程碑版本>
當Maven開始建立一個項目,它通過定義序列的階段步驟和執行注冊的每個階段的目標。 Maven的有以下三種標準的生命周期:
路線(一)
Clean Lifecycle(清理生命週期)
只有 clean 指令將上一次建構好的文件與資料夾移除,確保後續動作完全從零執行
路線(二): 一定會先執行前面才會執行後面
validate:這是生命週期的第一個階段。在這個階段,Maven將驗證項目的結構是否正確,以及所有必需的信息是否可用。如果項目的POM文件或配置有誤,Maven會在這個階段報錯並中止構建。
initialize:這是生命週期的一個空階段,通常不會做任何實際的操作。它存在只是為了保持向後兼容性。
generate-sources:在這個階段,Maven會生成任何需要的源代碼,通常是根據特定的插件配置生成。
process-sources:這個階段用於處理和修改源代碼,通常由一些特定的插件執行額外的操作。
generate-resources:在這個階段,Maven會生成任何需要的資源文件,例如配置文件或屬性文件。
process-resources:這個階段用於處理和修改資源文件,通常也是由一些特定的插件執行額外的操作。
compile:在這個階段,Maven會將項目的Java源代碼編譯成字節碼文件(.class文件)。
process-classes:在這個階段,Maven可以再次處理編譯後的類文件,通常由一些特定的插件執行額外的操作。
generate-test-sources:在這個階段,Maven會生成測試時所需要的源代碼,通常是根據特定的插件配置生成。
process-test-sources:這個階段用於處理和修改測試時所需的源代碼,通常由一些特定的插件執行額外的操作。
generate-test-resources:在這個階段,Maven會生成測試時所需要的資源文件,例如測試配置文件或屬性文件。
process-test-resources:這個階段用於處理和修改測試時所需的資源文件,通常由一些特定的插件執行額外的操作。
test-compile:在這個階段,Maven會將測試時的Java源代碼編譯成字節碼文件。
process-test-classes:在這個階段,Maven可以再次處理編譯後的測試類文件,通常由一些特定的插件執行額外的操作。
test:這是生命週期中的一個重要階段,用於運行單元測試。Maven會執行測試,並且如果測試失敗,Maven會在這個階段報錯並中止構建。
prepare-package:這個階段用於準備項目的打包,通常由一些特定的插件執行額外的操作。
package:在這個階段,Maven會將編譯後的代碼打包成特定的可執行文件,如JAR、WAR等。
pre-integration-test:這個階段用於在集成測試之前執行必要的準備工作,通常由一些特定的插件執行額外的操作。
integration-test:這個階段用於運行集成測試。Maven會將應用程序部署到測試環境並運行測試。
post-integration-test:這個階段用於在集成測試之後執行清理和其他必要的工作,通常由一些特定的插件執行額外的操作。
verify:這個階段用於驗證構建的結果。Maven會檢查項目是否通過所有測試,並且是否符合構建要求。
install:在這個階段,Maven會將打包的項目安裝到本地的Maven存儲庫,以供其他項目引用。
deploy:這是生命週期的最後一個階段。在這個階段,Maven會將打包的項目安裝到遠程的Maven存儲庫,以供其他團隊成員或項目引用。
Site Lifecycle(站點生命週期)
這個階段主要是生成網站相關文件,並在生成文件前後運行相關任務
路線(三)
可以分為執行任務依序為這四個階段
除了這三個標準生命週期之外,Maven 還允許開發者自定義生命週期,以滿足特定專案的需求。自定義生命週期可以使用插件來定義新的階段和執行順序。
https://maven.apache.org/ref/3.6.3/maven-embedder/cli.html
執行package、compile進行build,過程中會產生檔案輸出的預設資料夾(target),進去資料夾會看到打包出的jar
執行clean會移除target,在每次重新建置前要先執行此指令保證專案的乾淨,需注意的是該指令同時也會將編譯過的class及暫存資料清除,所以需要重新執行compile,否則執行時會出錯
執行install會根據pom安裝對應jar到local,在pom新增依賴時需要先執行install,否則compile會產生錯誤
執行site會生成相關報告,格式通常為HTML,可以在target/site資料夾找到
-Dmaven、-DskipTests同樣是跳過測試,不同地方是後者仍會根據test產生對應class檔案
–help:system 顯示諸如環境變數等
mvn
指令操作~/.m2/repository
下載後需要設定path的環境變數
設定成功後應可查到版本
<dependencies>
可以設定在外層,也可以在<dependencyManagement>
<plugin>