簡體   English   中英

未指定 Maven 插件版本

[英]Maven plugin version not specified

我剛剛注意到插件的版本在 maven 中是可選的。 我仍然可以在不指定的情況下構建我的模塊。 讓我們以 maven-bundle-plugin 為例。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    ....
</plugin>

我寫了一個沒有父級的簡單 pom.xml 來嘗試這個,所以不涉及 pluginManagement。 我還檢查了 maven-model-builder 中的 super super pom-4.0.0.xml 以確認 maven-bundle-plugin 不存在。 此插件版本未在任何地方指定。

maven 如何確定采用哪個版本?

來自Maven 3.x 兼容性說明

自動插件版本解析

當在 POM 或命令行中沒有給出顯式版本的情況下調用插件時,Maven 2.x 過去常常選擇可用的最新版本,其中最新版本可以是發行版或快照。 出於穩定性的考慮,Maven 3.x 更喜歡最新的發布版本而不是最新的快照版本。

考慮到自動插件版本解析帶來的不可重現構建的威脅,就 POM 中的插件聲明而言,此功能計划被刪除。 Maven 3.x 的用戶會發現它在檢測到缺少插件版本時會輸出警告,以鼓勵將插件版本添加到 POM 或其父 POM 之一。 Enforcer 規則 requirePluginVersions 可用於額外檢查 POM 中缺少的插件版本。

如果您檢查遠程存儲庫(例如 Nexus)中的maven-metadata.xml文件以及插件工件,您將看到如下內容:

<metadata>
    <groupId>com.company.maven.plugins</groupId>
    <artifactId>some-maven-plugin</artifactId>
    <versioning>
      <latest>0.3.6</latest>
      <release>0.3.6</release>
      <versions>
        <version>0.1</version>
        <version>0.2</version>
        <version>0.3.0</version>
        <version>0.3.1</version>
        <version>0.3.2</version>
        <version>0.3.4</version>
        <version>0.3.5</version>
        <version>0.3.6</version>
      </versions>
      <lastUpdated>20140414212942</lastUpdated>
    </versioning>
  </metadata>

我認為如果未指定版本,Maven 可能會使用<latest>值來決定下載哪個插件。

Maven 3.0.x 對缺少插件版本給出警告,並說“Maven 的未來版本可能會拒絕構建像這樣格式錯誤的 POM”或類似的東西。 您應該始終指定插件版本,以便您的構建可重現。 否則,您最終可能會遇到一些很難找到的錯誤。

Maven 遵循幾​​個步驟來解析插件版本。 它記錄在 http://maven.apache.org/guides/introduction/introduction-to-plugin-registry.html 的 Resolving Plugin Versions部分

自這篇文章發布 7 年以來,文檔似乎已被移動。 它可以在Maven 3.x Compatibility Notes 中獲得,正如@ceilfors 在他的回答中提到的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM