公司項目區使用maven,用maven的module劃分了項目中各層的代碼,維護其中的依賴關係,其中junit測試層依賴了web層(war類型module),所以沒法直接經過maven命令打包,由於war包沒法打到jar裏。react
示例pom:git
<modules> <module>common/dal</module> <module>common/util</module> <module>core/model</module> <module>core/service</module> <module>biz/shared</module> <module>biz/task</module> <module>biz/service-impl</module> <module>common/service/facade</module> <module>common/service/integration</module> <module>web/home</module> <module>deploy</module> <module>test</module> </modules>
此問題由來已久,但一直未真正解決,期間使用git切分支,在release分支上刪除test模塊的方式解決打包問題,但公司內部還有人在使用svn,git的分支特性並不能很好地被應用,也不適合爲了這麼一點事推翻公司固有的傳統。web
解決這個問題最好的辦法就是經過命令,選擇性地編譯和打包,而此前半年多,我居然始終沒有google,baidu到合適的方法。蒼天,原來解決的方法就在 help 裏:bash
usage: mvn [options] [<goal(s)>] [<phase(s)>] Options: -am,--also-make If project list is specified, also build projects required by the list -amd,--also-make-dependents If project list is specified, also build projects that depend on projects on the list ... -pl,--projects <arg> Build specified reactor projects instead of all projects ...
-am:若是 pl 參數存在,就同時構建 pl 參數所列模塊依賴的其餘模塊
-amd:若是 pl 參數存在,就同時構建依賴於 pl 參數所列模塊的其餘模塊
-pl,--projects <arg>:構建指定模塊,多個模塊用逗號(,)分隔maven
最終POM文件不用作任何變動,只要在打包腳本中使用如下命令便可實現排除test模塊構建:svn
mvn clean package -pl deploy -am -Dmaven.test.skip
模塊名若是包含/也是能夠的測試
mvn clean package -pl common/service/facade,common/util -am -Dmaven.test.skip
感嘆下,學會 --help 是多麼重要ui