2012-09-25

Maven Super POM

Maven 比 Ant 強在 Lifecycle 與 Convention over Configuration,CoC 說穿了就是「預設值」,只要符合 Maven 規定的預設值,幾乎不用額外的設定,就可以立即使用 Maven 來 compile 或 package,不用像 Ant 那樣,先花個一小時寫 build.xml 才能 compile。

而這個預設值寫在哪呢?就是 Super POM。

所有的 Maven 專案的 pom.xml 都是擴充自 Super POM,也就是說,pom.xml 裡沒說的事就是看 Super POM 裡的設定。

上一段話有點不太算例外的例外,就是有宣告 parent 的專案(要說是子專案,或是 SubModule)並不會直接繼承 Super POM,而是繼承 Parent Project 的 pom.xml,但是 Parent Project 還是繼承 Super POM。

Maven 2 的 Super POM。
apache-maven-2.1.0\lib\maven-2.1.0-uber.jar\org\apache\maven\project\pom-4.0.0.xml
Maven 3 的 Super POM。
apache-maven-3.0.4\lib\maven-model-builder-3.0.4.jar\org\apache\maven\model\pom-4.0.0.xml
Maven 3 的 Super POM 除了一些預告未來會移除的設定外,只剩兩組設定:
  • Repository 位置,包括 Dependency 與 Plugin。
  • 專案的目錄預設位置,像是 sourceDirectory 之類的。

當然不建議更改 Super POM 的設定,主要是不想因為升級 Maven 而遺失這些設定,可以自訂 Maven 的地方有:
  • Maven 安裝目錄 / conf / settings.xml - 這裡也會因為升級而遺失。
  • ~ / .m2 / settings.xml
  • 專案裡的 pom.xml

那能不能知道我的 pom.xml 加上 Super POM 的結果。
mvn help:effective-pom
疑問,Maven 3 的 Super POM 幾乎沒有 plugin 的設定,但是產出的 effective pom 卻有一堆 plugin,怎麼來的?
---
---
---

沒有留言:

張貼留言