2012-05-16 45 views
1

背景什么是用于多SVN分支多模块Maven项目的最佳实践

  1. 一个行李箱和一个标准的svn布局一个分支,/trunk/branches/prod
  2. 约20在Maven项目模块
  3. 当我想编译树干时,只需键入cd trunk; mvn clean package。但它会编译每个模块。生产需要构建时,类似的东西。
  4. 中心行家回购

问题

  1. ,如果有可能只编译更新模块?实际上,我只想在可能的情况下编译修改后的源文件。我知道这是一件简单的事情,由antmake。然而,maven compile总是从头开始。
  2. trunk和prod中的pom.xml应该保持相同的artifactId和版本吗?相同的artifactId和版本无法使用maven:deploy,因为trunk和prod会覆盖其他已部署的包。
+0

查看maven编译器插件的2.4版本,它对多模块项目有一些巨大的性能提升。 –

回答

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模块和核心模块将在给定的生命周期中运行。

+0

** - am -pl **参数正是我想要的。谢谢。 – yegong

1

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

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

编辑 Maven的确实始终运行所有的阶段到编译阶段,如果你调用编译MVN有可能是插件的执行有那些费时。但是,实际编译java文件的做法并不多于需要。运行mvn编译两次,你会看到消息“nothing to compile all classes are up to date”

或者是“全部文件是最新的”..?

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

+0

我明白了。谢谢你,路德维希。 – yegong