環境:
jdk 1.6
maven 3.0.3
背景:
項目在一個super pom下,有多個平行module,在各級依賴中,有一個module 在 pom 中定義 package war,但是開發階段,只需要其中的jar包來使用。如果一直使用其 war 包來開發調試,maven overlay 會佔用較多時間。
於是新的需求就是:將這個module 同時打包 jar 和 war 並 intall 到本地 repository 中。開發階段就用jar,部署用war。
解決思路 :
使用 maven-jar-plugin ,定義在 phase package 階段同步打 jar 包;
然後在 maven install 時,maven 會將這個 module 的 jar、war、ear、pom 等install到本地repository (此動作是自動完成,有幾個就install 幾個,無需配置)
具體操作:
在pom中加入 maven-jar-plugin 2.3.1
其中要注意的是,聲明 classifier 爲任何你需要的字符。
因爲這樣可以避免一個問題:
如果在 pom 中定義 package 爲 war,
運行 maven package 後,在項目 target 目錄下成功產生 XX.jar 和 XX.war ,
但運行 maven install,卻只把 XX.jar 安裝到 repositoy 中的 XX.war,其中內容僅是 jar 包內容。
而XX.war 就不install 到 repositoy 了。
加入 classifier 後產生: XX-api.jar 和 XX.war,
那麼maven install 會將這兩個文件同時安裝到本地 repository 中,不會產生上述問題。
後記:
同樣的道理,如果項目定義 package jar,同時需要打包 jar 和 war,應該也可以搭配使用 maven-war-plugin 來達成。