多模塊pom文件,僅針對部分模塊操做的maven技巧

公司項目區使用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

相關文章
相關標籤/搜索