讀古今文學網 > Maven實戰 > 8.3.4 插件管理 >

8.3.4 插件管理

Maven提供了dependencyManagement元素幫助管理依賴,類似地,Maven也提供了pluginManagement元素幫助管理插件。在該元素中配置的依賴不會造成實際的插件調用行為,當POM中配置了真正的plugin元素,並且其groupId和artifactId與pluginManagement中配置的插件匹配時,pluginManagement的配置才會影響實際的插件行為。

7.4.2節中配置了maven-source-plugin,將其jar-no-fork目標綁定到了verity生命週期階段,以生成項目源碼包。如果一個項目中有很多子模塊,並且需要得到所有這些模塊的源碼包,那麼很顯然,為所有模塊重複類似的插件配置不是最好的辦法。這時更好的方法是在父POM中使用pluginManagement配置插件,見代碼清單8-18。

代碼清單8-18 在父POM中配置pluginManagement

當子模塊需要生成源碼包的時候,只需要如下簡單的配置,見代碼清單8-19。

代碼清單8-19 繼承了pluginManagement後的插件配置

子模塊聲明使用了maven-source-plugin插件,同時又繼承了父模塊的pluginManagement配置,兩者基於groupId和artifactId匹配合並之後就相當於7.4.2節中的插件配置。

如果子模塊不需要使用父模塊中pluginManagement配置的插件,可以儘管將其忽略。如果子模塊需要不同的插件配置,則可以自行配置以覆蓋父模塊的pluginManagement配置。

有了pluginManagement元素,account-email和account-persist的POM也能得以簡化了,它們都配置了maven-compiler-plugin和maven-resources-plugin。可以將這兩個插件的配置移到account-parent的pluginManagement元素中,見代碼清單8-20。

代碼清單8-20 account-parent的pluginManagement配置

account-email和account-persist可以完全地移除關於maven-compiler-plugin和maven-resources-plugin的配置,但它們仍能享受這兩個插件的服務,前一插件開啟了Java 5編譯的支持,後一插件也會使用UTF-8編碼處理資源文件。這背後涉及了很多Maven機制,首先,內置的插件綁定關係將兩個插件綁定到了account-email和account-persist的生命週期上;其次,超級POM為這兩個插件聲明了版本;最後,account-parent中的pluginManagement對這兩個插件的行為進行了配置。

當項目中的多個模塊有同樣的插件配置時,應當將配置移到父POM的pluginManagement元素中。即使各個模塊對於同一插件的具體配置不盡相同,也應當使用父POM的pluginManagement元素統一聲明插件的版本。甚至可以要求將所有用到的插件的版本在父POM的pluginManagement元素中聲明,子模塊使用插件時不配置版本信息,這麼做可以統一項目的插件版本,避免潛在的插件不一致或者不穩定問題,也更易於維護。