Java 什么';这是多svn分支中多模块maven项目的最佳实践

Java 什么';这是多svn分支中多模块maven项目的最佳实践,java,svn,maven-2,branch,Java,Svn,Maven 2,Branch,背景 标准svn布局中的一个主干和一个分支,/trunk和/branchs/prod maven项目中大约有20个模块 当我想编译trunk时,只需键入cdtrunk;mvn清洁包。但它将编译每个模块。当需要构建产品时,类似的东西 一家中行回购协议 问题 是否可以只编译更新的模块?实际上,我只想在可能的情况下编译修改过的源文件。通过ant或make我知道这是一件简单的事情。但是,maven compile总是从头开始 trunk和prod中的pom.xml是否应该保持相同的artifactId和

背景

  • 标准svn布局中的一个主干和一个分支,
    /trunk
    /branchs/prod
  • maven项目中大约有20个模块
  • 当我想编译trunk时,只需键入
    cdtrunk;mvn清洁包
    。但它将编译每个模块。当需要构建产品时,类似的东西
  • 一家中行回购协议
  • 问题

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

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

    您可以将cd刻录到您想要的项目中,并自行编译

    edit如果调用mvn compile,Maven始终会运行编译阶段之前的所有阶段,并且可能会有耗时的插件执行。但是java文件的实际编译并没有超出需要。运行mvn compile两次,您将看到消息“无需编译所有类都是最新的”

    还是“所有文件都是最新的”

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

    您可以尝试使用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模块和核心模块将在给定的生命周期中运行。

    请查看maven编译器插件的2.4版,它在多模块项目中有一些巨大的性能提升。-am-pl参数正是我想要的。非常感谢。
    mvn -am -pl cli LifeCycle