Maven學習筆跡

孔德昌發表於2020-12-21

Maven需要了解的

Maven是什麼?

Maven是一個專案管理工具,它包含了一個項 目物件模型 (Project Object
Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency
Management System),和用來執行定義在 生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。
當你使用Maven的時候,你 用一個明確定義的專案物件模型來描述你的專案,然後 Maven 可以應用橫切的邏輯,
這些邏輯來自一組共享的(或者自定義的)外掛。

約定優於配置

約定優於配置是一個簡單的概念。 系統,類庫,框架應該假定合理的預設值,而非要 求提供不必要的配置。 

一個“專案”的概念模型

Maven 維護了一個專案的模型,你不僅僅需要把原始碼編譯成位元組碼,你還需要開發軟 件專案的描述資訊,為專案指定一組唯一的座標。你要描述專案的的屬性。專案的許可 證是什麼?誰開發這個專案,為這個專案做貢獻?這個專案依賴於其它什麼專案沒有? Maven不僅僅是一個“構建工具”,它不僅僅是在類似於 make 和 Ant 的工具的基礎上 的改進,它是包含了一組關於軟體專案和軟體開發的語義規則的平臺。這個基於每一個 專案定義的模型實現瞭如下特徵:
依賴管理 由於專案是根據一個包含組識別符號,構件識別符號和版本的唯一的座標定義的。項 目間可以使用這些座標來宣告依賴。
遠端倉庫 和專案依賴相關的,我們可以使用定義在專案物件模型(POM)中的座標來建立 Maven 構件的倉庫。
全域性性構建邏輯重用 外掛被編寫成和專案模型物件(POM)一起工作,它們沒有被設計成操作某一個 已知位置的特定檔案。一切都被抽象到模型中,外掛配置和自定義行為都在模型 中進行。
工具可移植性/整合 像 Eclipse,NetBeans,和 InteliJ 這樣的工具現在有共同的地方來找到專案 的資訊。在 Maven 出現之前,每個 IDE 都有不同的方法來儲存實際上是自定義 專案物件模型(POM)的資訊。Maven 標準化了這種描述,而雖然每個 IDE 仍然 繼續維護它的自定義專案檔案,但這些檔案現在可以很容易的由模型生成。
便於搜尋和過濾構件 像 Nexus 這樣的工具允許你使用儲存在 POM 中的資訊對倉庫中的內容進行索引 和搜尋。
一個簡單的 Maven pom.xml
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0</version>
</project>

• Maven 擁有約定,因為你遵循了約定,它已經知道你的原始碼在哪裡。它把字 節碼放到 target/classes ,然後在
target 生成一個 JAR 檔案。 • Maven 是宣告式的。你需要做的只是建立一個 pom.xml 檔案然後將原始碼放
到預設的目錄。Maven 會幫你處理其它的事情。 • Maven 有一個生命週期,當你執行 mvn install
的時候被呼叫。這條命令告 訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命 週期旅途中的一個影響就是,Maven
執行了許多預設的外掛目標,這些目標完 成了像編譯和建立一個 JAR 檔案這樣的工作。

安裝和執行Maven

maven是一堆jar包,其中包含了可執行jar,需要java環境(jdk)

C:\Users\$>java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

Maven下載地址
Maven:http://maven.apache.org/ download.html.

安裝maven ,配置一下環境變數就好了

windows

MAVEN_HOME
D:\SoftwareDevelopmentEnvironment\JavaSoftwareEnvironment\maven\MavenHomeDirectory\apache-maven-3.3.9
PATH
%MAVEN_HOME%\bin

unix OSX

$ vim profile
 export MAVEN_HOME=/usr/local/maven
 export PATH=${MAVEN_HOME}/bin:PATH
/usr/local % ln -s maven-3.3.9 maven

驗證Maven安裝

$ mvn -v
Maven 3.3.9

 D:\SoftwareDevelopmentEnvironment\JavaSoftwareEnvironment\maven\MavenHomeDirectory\apache-maven-3.3.9 的目錄

2020/12/20  17:36    <DIR>          .
2020/12/20  17:36    <DIR>          ..
2020/12/20  17:36    <DIR>          bin Maven核心的JAR檔案(maven-2.0.9-uber.jar)
2020/12/20  17:36    <DIR>          boot 包含了一個負責建立Maven執行所需要的類裝載器的JAR檔案
安裝和執行Maven(classwords-1.1.jar
2020/12/20  17:36    <DIR>          conf 全域性配置
2020/12/20  17:36    <DIR>          lib    jar庫
2015/11/10  11:44            19,335 LICENSE Apache Maven的軟體許可證
2015/11/10  11:44               182 NOTICE
2015/11/10  11:38             2,541 README.txt
               3 個檔案         22,058 位元組
               6 個目錄 321,002,819,584 可用位元組
D:\SoftwareDevelopmentEnvironment\JavaSoftwareEnvironment\maven\MavenHomeDirectory\apache-maven-3.3.9\bin>mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\SoftwareDevelopmentEnvironment\JavaSoftwareEnvironment\maven\MavenHomeDirectory\apache-maven-3.3.9\bin\..
Java version: 1.8.0_201, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_201\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

使用者相關配置和倉庫

使用IDEA時候使用者目錄
在~/.m2目錄下有:
~/.m2/settings.xml 該檔案包含了使用者相關的認證,倉庫和其它資訊的配置,用來自定義Maven的行 為。
~/.m2/repository/ 該目錄是你本地的倉庫。當你從遠端Maven倉庫下載依賴的時候,Maven在你本地 倉庫儲存了這個依賴的一個副本。

Maven Help外掛

help:active-profiles 列出當前構建中活動的Profile(專案的,使用者的,全域性的)。
help:effective-pom 顯示當前構建的實際POM,包含活動的Profile。
help:effective-settings 列印出專案的實際settings, 包括從全域性的settings和使用者級別settings繼承的 配置。

相關文章