2012-11-01 84 views
2

在網上的各種地方,我已經看到它討論過,爲了使Maven構建可重現,明確指定所有使用的插件的版本號非常重要,以便更新的插件不會破壞構建。推薦的方法似乎是使用執行插件。以下是我在網上找到的複製和粘貼設置。核心maven插件是否與maven本身在同一發佈週期?

<execution> 
    <id>enforce-plugin-versions</id> 
    <goals> 
     <goal>enforce</goal> 
    </goals> 
    <configuration> 
     <rules> 
      <requirePluginVersions> 
       <message>Best Practice is to always define plugin versions!</message> 
       <banLatest>true</banLatest> 
       <banRelease>true</banRelease> 
       <banSnapshots>true</banSnapshots> 
       <phases>clean,deploy,site</phases> 
       <additionalPlugins> 
        <additionalPlugin>org.apache.maven.plugins:maven-eclipse-plugin</additionalPlugin> 
        <additionalPlugin>org.apache.maven.plugins:maven-reactor-plugin</additionalPlugin> 
       </additionalPlugins> 
       <unCheckedPluginList>org.apache.maven.plugins:maven-enforcer-plugin,org.apache.maven.plugins:maven-idea-plugin</unCheckedPluginList> 
      </requirePluginVersions> 
     </rules> 
    </configuration> 
</execution> 

當我運行pom時,從執行插件中得到以下錯誤。

[INFO] --- maven-enforcer-plugin:1.1.1:enforce (enforce-plugin-versions) @ seedling --- 
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequirePluginVersions failed with message: 
Some plugins are missing valid versions:(LATEST RELEASE SNAPSHOT are not allowed) 
org.apache.maven.plugins:maven-clean-plugin. The version currently in use is 2.4.1 
org.apache.maven.plugins:maven-deploy-plugin. The version currently in use is 2.7 
org.apache.maven.plugins:maven-install-plugin. The version currently in use is 2.3.1 
org.apache.maven.plugins:maven-site-plugin.  The version currently in use is 3.0 
org.apache.maven.plugins:maven-reactor-plugin. The version currently in use is 1.0 
org.apache.maven.plugins:maven-eclipse-plugin. The version currently in use is 2.9 
Best Practice is to always define plugin versions! 

在我看來,一些插件是如Maven的清理插件,Maven的安裝,插件,Maven的反應器插件被行家的核心中央部分,我應該有這些版本「核心」插件綁定到我正在使用的maven版本。

我的問題:

  1. 在同一個發行週期的行家本身插件的版本?
  2. 是否有一組核心maven插件組成maven版本?如果是的話,如何獲得Maven版本的插件列表?
  3. 當我看到像3.0.4這樣的maven版本是包含一些核心插件的版本,還是會一直獲得maven 3.0.4發佈後發佈的最新插件,比如reactor?
  4. 有沒有一種方法可以對在3.0.4發佈時發佈的Maven使用插件進行說明?
  5. 不同的插件版本之間的兼容性是如何表示的,是否有一些通用的插件,比如所有小型的2.x都相互兼容,但3.x與2.x不兼容?
  6. 指定插件版本號是否真的是最好的有害生物實踐或只是矯枉過正?

回答

2

Maven將某個插件綁定到其生命週期階段,例如,到compile階段的maven-compiler-plugin,到install階段的maven-install-plugin等等。這些是你所說的「maven核心核心部分」的插件。但是,這些插件有一個單獨的發佈週期。例如,查看maven的deploy生命週期階段的maven-deploy-plugin。最新版本(2.7)是在2011年10月,而最新的Maven版本(3.0.4)是在2012年1月。另一個例子是maven-compiler-plugin,它的最新版本是2012年6月,Maven發佈半年後3.0.4。

回答您的問題,特別是:

  1. 不,他們不是。每個插件都有自己的發佈週期。看到上面的例子。
  2. 有各種插件綁定到Maven的特定包生命週期階段。你可以把它們當作「核心Maven插件」。看看maven book以獲得完整列表。
  3. 如果您未在POM文件中指定插件版本,maven將使用每個使用插件的最新版本。
  4. 不需要。如果這是您的需求,您可以在http://search.maven.org上找到插件的發佈日期,並將它們與最新版本的Maven進行比較。但是,如果您在POM文件中指定每個使用的插件的版本並且maven爲您生成更正的工件,則這不是必需的。
  5. 在不同的Maven插件之間沒有兼容性問題(至少我沒有問題)。對於同一插件的不同版本,您必須嘗試一下,看看您的特定項目是否適用於新版插件。
  6. 如果你想要可重複的構建,這是必須的。
2

這裏回答的問題清單:

  1. 沒有
  2. 號的Maven本身具有內核小,但也有在內核中沒有插件。如果需要的話,所有插件將在運行期間下載。在Maven 2中,有一些與Maven本身(部分網站代)一起發佈的maven部分已被Maven 3更改。
  3. 否Maven發行版包含一個超級pom,其中包含一些插件版本的定義等等,但只能通過超級POM。
  4. 不,您不能僅通過版本定義發佈的時間。
  5. 不同的插件由不同的社區/人員維護,他們對版本及其與Maven版本的關係有不同的意見。通常,相應插件的網站會記錄下來(如maven-site-plugin)。
  6. 是的,它適用於不同的Maven版本,沒有任何問題。