公司项目区使用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