多模块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

相关文章
相关标签/搜索