1

背景

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

问题

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

2 回答 2

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

于 2012-05-22T12:47:24.370 回答
1

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

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

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

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

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

于 2012-05-16T07:52:24.893 回答