Maven使用指南的筆記

jackieathome發表於2024-09-06
  • 文件索引

  • Maven in 5 Minutes
    篇幅很短,快速上手,不求甚解。
    執行如下命令,建立專案的基礎配置。

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.5 -DinteractiveMode=false
    

    對上述命令做一個簡單的說明:

    • groupIdcom.mycompany.app
    • artifactIdmy-app

    上述命令執行完畢之後,在當前目錄下建立目錄my-app,執行命令tree -a my-app檢視目錄結構,如下:

    my-app/
    ├── .mvn
    │   ├── jvm.config
    │   └── maven.config
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── mycompany
        │               └── app
        │                   └── App.java
        └── test
            └── java
                └── com
                    └── mycompany
                        └── app
                            └── AppTest.java
    
    12 directories, 5 files
    
  • Maven Getting Started Guide
    完整的入門指導。
    常用的命令:

    • mvn clean,清理構建結果。
    • mvn compile,編譯程式碼。
    • mvn test-compile,編譯單元測試程式碼。
    • mvn test,編譯程式碼和測試程式碼,執行單元測試程式碼。
    • mvn package,將專案打包。
    • mvn install,將專案的構建結果,安裝到本地倉庫內。

    父專案的pom.xml,樣例如下:

    <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 https://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>
    

    專案的pom.xml,樣例如下:

    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-webapp</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    
  • Guide to naming conventions on groupId, artifactId, and version
    元件的groupIdartifactIdversion的命名規則。

  • Introduction to the Build Lifecycle

    使用Maven構建專案時,依次執行如下階段:

    • validate
    • compile
    • test
    • package
    • verify
    • install
    • deploy
  • Introduction to the POM
    介紹pom.xml的組成,以及不同專案組合的定義方法。

  • Introduction to Build Profiles
    透過在settings.xml或者pom.xml中使用profile,可以為不同的構建場景定製構建過程和引數。
    執行如下命令,可以檢視當前啟用的profile。

    mvn help:active-profiles
    
  • Introduction to the Standard Directory Layout
    使用Maven來管理專案和構建時,基於約定大於配置的理念,預先定義了專案中各類檔案的佈局和目錄命名。對於Java專案而言,預設的佈局規則如下:

    • src/main/java,儲存專案中的Java原始碼。
    • src/main/resources,儲存專案中的配置檔案。
    • src/main/filters,儲存資源過濾器的配置檔案。
    • src/main/webapp,儲存Web專案的資原始檔,比如html/css/js/圖片比如jpeg或者png等。
    • src/test/java,儲存專案中的單元測試程式碼。
    • src/test/resources,儲存專案中單元測試程式碼依賴的配置檔案。
    • src/test/filters,儲存資源過濾器的配置檔案。
    • src/assembly,儲存專案構建時佈局的配置檔案。
    • target,儲存構建的輸出結果。

    其它目錄不常用,因此此處不贅述。

  • Introduction to the Dependency Mechanism
    依賴管理中,相同軟體的版本衝突,預設的處理規則。
    座標中scope欄位的可能取值:

    • compile,編譯、執行時需要。

    • provided,編譯時需要,執行時不需要。

    • runtime,編譯時不需要,僅在執行時需要。

    • test,測試程式碼編譯、測試程式碼執行時需要。

    • system,指定依賴本地的jar。
      樣例如下:

      <dependency>
        <groupId>javax.sql</groupId>
        <artifactId>jdbc-stdext</artifactId>
        <version>2.0</version>
        <scope>system</scope>
        <systemPath>${java.home}/lib/rt.jar</systemPath>
      </dependency>
      
    • import,匯入依賴,通常在dependencyManagement中使用,比如基於SpringBoot框架開發的應用。

    排除依賴的軟體。

    <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId>
      <version>1.0</version>
      <exclusions>
        <exclusion>
          <groupId>group-c</groupId>
          <artifactId>excluded-artifact</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    
  • Optional & Exclusion
    配置依賴時,可以增加屬性optional,取值為true/false,樣例如下:

    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <optional>true</optional> <!-- value will be true or false only -->
    </dependency>
    

    在專案中沒有實際使用過。

  • Settings Reference
    settings.xml的組成,各個標籤的含義。
    樣例模板,和關鍵標籤,如下:

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
      <localRepository/>
      <interactiveMode/>
      <offline/>
      <pluginGroups/>
      <servers/>
      <mirrors/>
      <proxies/>
      <profiles/>
      <activeProfiles/>
    </settings>
    

    載入順序:

    • ${user.home}/.m2/settings.xml
      使用者目錄下的settings.xml
    • ${maven.home}/conf/settings.xml
      Maven軟體安裝目錄下的settings.xml
  • POM Reference
    pom.xml的組成,各個標籤的含義。

  • FAQ

相關文章