簡體   English   中英

當你沒有指定任何插件時,Maven如何決定使用什么版本的插件?

[英]How does Maven decide what version of a plugin to use, when you don't specify any?

我認識到Maven並不總是使用最新版本的插件。

例如org.codehaus.mojo:sonar-maven-plugin版本2.7已於10月19日發布,但10月23日,Maven仍然使用2.6( mvn sonar:sonar )。

我甚至還記得一些插件,其中最新版本是Maven決定使用的版本之上的幾個小版本。

是否有任何(中央)索引/列表/數據庫,Maven查找要使用的版本? 如果是,可以手動訪問哪里?

據我所知,此鏈接將回答您的問題。

自動插件版本解析

當在沒有POM或命令行中給出的顯式版本的情況下調用插件時,Maven 2.x用於選擇最新版本可用的最新版本,其中最新版本可以是版本或快照。 為了穩定起見,Maven 3.x更喜歡最新版本的最新版本。

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

我知道這是一個古老的線程,但為了后代和准確性:所有pom.xml邏輯上都繼承自超級POM 您可以通過鍵入以下內容來始終查看“真正的” pom.xml外觀:

mvn help:effective-pom

生成的pom.xml是超級POM, pom.xml的組合,當然還有混合中的任何父POM。

超級POM由org.apache.maven.model.superpom.DefaultSuperPomProvider類提供( https://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/java/org/ apache / maven / model / superpom / DefaultSuperPomProvider.java#L56-L85 )。 它加載的資源是org/apache/maven/model/pom-4.0.0.xmlhttps://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/resources/org /apache/maven/model/pom-4.0.0.xml#L23-L149 )。

對於命令行執行,如果未指定版本,Maven將從GA(組ID /工件ID)maven-metadata.xml文件中查找最新版本。

示例: http//repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml

如果您將Maven目標的命令行執行編碼到構建中,則應為這些構建指定版本,否則您的構建可能會隨着新版本的插件的發布而更改。

暫無
暫無

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

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