Maven 5的兩個重要變化

banq發表於2022-02-06

一位 Apache Maven 提交者最近寫了一篇關於他們的 Maven 5 計劃的文章。最重要的變化:

需要區分兩種 POM 型別:

  • 構建 POM ,儲存在專案原始碼控制中,在構建時使用 v5 模式,需要能夠使用與新模式關聯的新功能的新 Maven 版本,
  • 消費者 POM ,它以良好的舊 v4 模式釋出到 Maven Central,因此每個過去或未來的構建工具都可以像往常一樣繼續使用預構建的工件來獲取它們的依賴項。

這是一個重要的二分法,讓我很長時間都沒有意識到:

  • POM 的使用者需要一些資料,例如,在其依賴項列表中擁有專案的使用者
  • 二進位制構建器需要其他資料

在 Reddit 上,使用者 pmarschall 提到他們已經在Maven Flatten 外掛的幫助下分離了 Maven 當前版本中的關注點。

用法非常簡單。只需在該部分中新增以下程式碼plugins段:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.2.5</version>
    <configuration>
    </configuration>
    <executions>
        <execution>
            <id>flatten</id>
            <phase>process-resources</phase>
            <goals>
                <goal>flatten</goal>
            </goals>
        </execution>
        <execution>
            <id>flatten.clean</id>
            <phase>clean</phase>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>

現在,如果你執行Maven process-resources階段,該外掛會建立一個縮短版的POM,名為.flattened-pom.xml。與初始POM相比,扁平化的POM除了座標外,只有三個部分:許可、依賴和資源。此外,Maven還解決了所有變數。如果你執行安裝階段,然後檢查本地Maven倉庫,你會發現POM與扁平化的POM相匹配,而不是主POM。如果你想生成扁平化的POM但不替換主POM,請使用-DupdatePomFile=false。

預設情況下,該外掛只保留許可證、依賴關係和儲存庫部分。你可以通過POM配置哪些部分需要保留,哪些不需要。例如,該外掛會刪除名字,但如果需要,你可以很容易地保留它。只需新增相關的配置。

<configuration>
    <pomElements>
        <name>keep</name>
    </pomElements>
</configuration>

上述方法給了你最大的靈活性。然而,外掛的開發者已經考慮到哪些配置捆綁是有意義的,並提供了開箱即用的配置。

 

總結

Maven Flatten外掛將構建和消費者POM分開。你不需要等到Maven 5的釋出。這是一個免費的東西,所以如果你是一個庫的提供者,你也許應該考慮使用它。

相關文章