Maven快速上手使用指南的筆記

jackieathome發表於2024-09-07
  • Maven Mini Guides

  • Configuring for Reproducible Builds
    使用Maven實現重複構建。
    檢查當前使用的外掛的版本。

    mvn artifact:check-buildplan
    

    修改pom.xml,增加如下配置,顯式指定project.build.outputTimestamp的取值:

      <properties>
        <project.build.outputTimestamp>2023-01-01T00:00:00Z</project.build.outputTimestamp>
      </properties>
    

    執行完整構建,執行如下命令:

    mvn clean install
    

    再次執行構建,同時比較二進位制是否一致,執行如下命令:

    mvn clean verify artifact:compare
    
  • Guide to creating assemblies
    使用maven-assembly-plugin,可以指定構建目標檔案的檔案佈局和格式。
    修改專案的pom.xml,增加外掛的配置,內容樣例如下:

      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
              <descriptors>
                <descriptor>src/assembly/dep.xml</descriptor>
              </descriptors>
            </configuration>
            <executions>
              <execution>
                <id>create-archive</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    

    在專案路徑${project.basedir}/src/assembly下放置佈局檔案,以上述配置為例,佈局檔案為dep.xml,內容樣例,如下:

    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
      <id>bin</id>
      <formats>
        <format>tar.gz</format>
        <format>tar.bz2</format>
        <format>zip</format>
      </formats>
      <fileSets>
        <fileSet>
          <directory>${project.basedir}</directory>
          <outputDirectory>/</outputDirectory>
          <includes>
            <include>README*</include>
            <include>LICENSE*</include>
            <include>NOTICE*</include>
          </includes>
        </fileSet>
        <fileSet>
          <directory>${project.build.directory}</directory>
          <outputDirectory>/</outputDirectory>
          <includes>
            <include>*.jar</include>
          </includes>
        </fileSet>
        <fileSet>
          <directory>${project.build.directory}/site</directory>
          <outputDirectory>docs</outputDirectory>
        </fileSet>
      </fileSets>
    </assembly>
    

    執行構建,命令如下,即可觀察效果。

    mvn package
    
  • Guide to Configuring Archive Plugins
    對於常規的jar/war/ejb/ear/assembly外掛,預設情況下,在構建結果檔案中增加目錄META-INF/maven,包含檔案pom.xmlpom.properties
    透過修改archive的配置,可以關閉前述預設行為,樣例如下:

    <project>
      ...
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
              <archive>
                <addMavenDescriptor>false</addMavenDescriptor>
              </archive>
            </configuration>
          </plugin>
        </plugins>
      </build>
      ...
    </project>
    
  • Configuring Maven
    常見的配置,比如:

    • 本地倉庫的路徑。
    • 透過代理,下載依賴軟體。
    • 下載依賴軟體時的並行度。
    • 上傳構建目標檔案時,增加安全性。
    • 遠端倉庫的配置,比如映象。
    • 構建場景的配置。
    • 構建工具鏈的配置。
  • Guide to generating sources
    對於參與generate-sources階段的外掛,構建時會自動生成程式碼,如下是外掛antlr4-maven-plugin的樣例配置:

    <project>
      ...
      <build>
        <plugins>
          <plugin>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-maven-plugin</artifactId>
            <version>4.5.3</version>
            <executions>
              <execution>
                <id>antlr</id>
                <goals>
                  <goal>antlr4</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      ...
    </project>
    

    外掛生成的程式碼,可參與後續的compile階段。

  • Guide to Working with Manifests
    可參考Apache Maven Archiver

  • Guide to Maven Classloading
    Maven工具在執行過程中涉及到的類載入器,以及各自的用途。

  • Guide to Working with Multiple Modules
    對於多個模組組成的專案,Maven 3.X版本的工作流程。

  • Guide to Working with Multiple Modules in Maven 4
    對於多個模組組成的專案,Maven 4.X版本的工作流程。

  • Releasing
    目前在專案中沒有使用過。

  • Guide to using Ant with Maven
    藉助於外掛maven-antrun-plugin,在構建過程中,可以定製shell指令碼,定製構建行為。
    如下是樣例,在generate-sources階段呼叫指令碼${project.basedir}/src/main/sh/do-something.sh

    <project>
      <modelVersion>4.0.0</modelVersion>
      <artifactId>my-test-app</artifactId>
      <groupId>my-test-group</groupId>
      <version>1.0-SNAPSHOT</version>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
              <execution>
                <phase>generate-sources</phase>
                <configuration>
                  <tasks>
                    <exec
                      dir="${project.basedir}"
                      executable="${project.basedir}/src/main/sh/do-something.sh"
                      failonerror="true">
                      <arg line="arg1 arg2 arg3 arg4" />
                    </exec>
                  </tasks>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    
  • Guide to using Modello
    Modello的介紹,如下:

    • 文件
    • 樣例

    在專案中沒有使用過。

  • Using Extensions
    自定義擴充套件,修改Maven的行為。

  • Building For Different Environments
    利用profile,針對不同的構建場景,比如可定義不同的外掛和引數。

  • Guide to Using Toolchains
    構建專案時,透過使用Toolchains,構建專案時使用不同於執行Maven的JDK等。

相關文章