多svn分支中多模块maven项目的最佳实践是什么?

时间:2012-05-16 07:50:01

标签: java svn maven-2 branch

背景

  1. 标准svn布局中的一个主干和一个分支,/trunk/branches/prod
  2. maven项目中约有20个模块
  3. 当我想编译trunk时,只需输入cd trunk; mvn clean package。但它会编译每个模块。在需要建立生产时类似的东西。
  4. 中心maven repo
  5. 问题

    1. 是否可以仅编译更新的模块?实际上我只想在可能的情况下编译修改后的源文件。我知道antmake这是一件简单的事情。但是,maven compile总是从头开始。
    2. 应该在trunk和prod中的pom.xml保持相同的artifactId和版本?相同的artifactId和版本无法与maven:deploy一起使用,因为trunk和prod会覆盖彼此部署的软件包。

2 个答案:

答案 0 :(得分:1)

mvn编译并不总是从头开始构建。它只编译已更改的java文件。除非你运行mvn clean编译。当然,所有项目都将被清理,然后从头开始编译。

您可以随时cd进入您想要的项目并自行编译。

编辑如果您调用mvn编译,Maven 总是运行所有阶段直到编译阶段,并且那里可能存在耗时的插件执行。但是java文件的实际编译并没有超出需要。运行mvn编译两次,你会看到消息“没有什么可以编译所有类是最新的”

或者“所有文件是最新的”..?

编辑 - 问题nbr 2 如果两者产生的工件不是不同版本,为什么要从trunk和prod中释放? 他们应该有不同的版本。除非你创建一个实验分支,你可能会合并回主干,你永远不打算自己发布它。在这种情况下,实验分支不需要自己的版本号。

答案 1 :(得分:1)

您可以尝试使用mvn -am -pl选项,该选项将限制对给定模块的操作。

+-- root (pom.xml)
     +-- client (pom.xml) dep: core
     +-- server (pom.xml) dep: client
     +-- core (pom.xml) 
     +-- cli (pom.xml) dep:core

如果你做了

mvn -am -pl server LifeCycle

只有服务器模块和服务器使用的模块才会运行相应的生命周期。

mvn -am -pl cli LifeCycle

在这种情况下,只有cli模块和核心模块将在给定的生命周期内运行。