如何从maven版本中排除未修改的(scm)模块

时间:2010-12-29 13:53:16

标签: maven-2 maven-release-plugin multi-module

我有一个包含大约200个罐子的巨大项目,当我准备释放maven准备所有罐子但是肯定有自上次构建以来没有被修改过的罐子所以有没有办法检查罐子是否自上次修改以来从scm构建?并排除他们?

我不想单独调查罐子(超过200个)。

例如:我想让父母重新开始,但我不想重新调查尚未修改的jar4

-Parent

---------Module1

----------------jar1*

----------------jar2*

---------Module2

----------------jar3*

----------------jar4   

1 个答案:

答案 0 :(得分:0)

  

例如:我想让父母重新开始,但我不想重新调查尚未修改的jar4

这个的语法是

mvn -pl Module1,Module2/jar3 <your maven goals here>

(在这种情况下,你想构建Module1的所有模块,而只是模块2的jar3)

现在棘手的部分是如何将参数组装到-pl。我很确定没有maven方法可以做到这一点,所以你可能需要编写一个shell脚本(或Ruby,Groovy,PERL python等脚本)来为你做这些。

基本上,你的脚本必须做什么:

  • 查找给定目录中的所有maven项目目录(包含pom.xml的目录),反向排序(最深的路径)
  • 查找整个层次结构中的所有已更改文件(使用svn,cvs或任何调用)
  • 将每个更改的文件映射到其中一个项目(通过比较路径),收集列表中所有匹配的项目
  • 现在通过进行一些父/子优化来优化列表(如果给定父项的所有子项都存在,则删除子项并添加父项)。重复执行此操作,直到到达根层次结构。
  • 从剩余列表中,提取相对路径,使用逗号连接它们,然后使用-pl参数的值启动maven流程。