Version control Maven 2项目版本、依赖版本和永久发布

Version control Maven 2项目版本、依赖版本和永久发布,version-control,maven-2,Version Control,Maven 2,场景:系统有许多组件,每个组件都有自己的POM。有一些长的依赖链(A依赖于B依赖于C,等等)。我希望每个“非开发人员桌面”构建都是一个潜在的发布候选版本——如果它通过了QA,我们将在不重建的情况下部署它。换句话说,我从不想在定期计划的构建中构建快照版本,只想构建1.3.0.5、1.3.0.6等版本。我还想让开发人员能够同时处理多个组件 为了避免一些预期的建议:Maven发布插件对我没有帮助。。。除非有什么神奇的方法,我可以让我的依赖版本不是POM中的快照,而是让开发人员同时处理多个组件 我们应该

场景:系统有许多组件,每个组件都有自己的POM。有一些长的依赖链(A依赖于B依赖于C,等等)。我希望每个“非开发人员桌面”构建都是一个潜在的发布候选版本——如果它通过了QA,我们将在不重建的情况下部署它。换句话说,我从不想在定期计划的构建中构建快照版本,只想构建1.3.0.5、1.3.0.6等版本。我还想让开发人员能够同时处理多个组件

为了避免一些预期的建议:Maven发布插件对我没有帮助。。。除非有什么神奇的方法,我可以让我的依赖版本不是POM中的快照,而是让开发人员同时处理多个组件

我们应该如何管理所有POM中的项目和依赖版本?现在到处都是快照,这使开发人员的工作变得简单(他们从快照开始,从不关心其他任何事情)。但这在部署时令人担忧(具有快照依赖关系的构建没有很好的定义,并且不可复制)

我希望避免在构建时进行过多的杂耍,但现在我看不到任何解决方法

假设我有组件util、libj、libk、APP和UI,依赖项如下: libj->util(libj依赖于util) libk->util 应用程序->libj UI->libj,libk 我有开发团队在处理应用程序和UI,他们有时需要对某些依赖项(甚至是util)进行更改/添加,以支持当前的工作。每个组件的签入POM和依赖项版本应该是什么样子


编辑:我更新了标题以引用Maven 2而不是2.0,因为很明显,我需要使用2.1或更高版本才能最好地解决这个问题。

这与需要分支代码的人的问题是一样的。您需要某种形式的标识符才能获得特定版本,直到您合并回该组件的主线开发

这可能是值得研究的问题。您仍然需要有能够正确识别其修改代码的开发人员。

我们使用的是“超级父级”。pom项目中,版本定义为属性,而在每个child.project中,版本设置为这些属性

此外,实际项目没有版本集,而是从其父pom项目(包括groupId等)继承它

通过这种设置,版本只在一些父pom项目中定义,因此所需的设置被最小化

e、 g.这一结构

  • 超级父级pom项目(定义为属性的所有第三方版本,例如2.5.6 spring framework) ----持久化父级pom项目,从超级父级继承所有 ------持久化foobar jar项目,从持久化父级继承所有 ----util父项
等等

您看到的唯一版本是父关系中的版本 例如:

4.0.0
福吧福
罐子
无论什么
...
org.foo.bar
持久性父项
1.0-快照
${project.groupId}
富吧
${project.version}
${project.groupId}
富吧
${project.version}
测试
org.springframework
org.springframework.jdbc
${parent.spring.version}
它是这样工作的,因为在pom中,您可以使用已经定义的值,例如version,即使版本是通过继承设置的


我们将其与父项目内的模块设置相结合,以使构建更容易

这对于maven和内部项目来说是非常困难的;您有两个版本控制系统(maven的,坦率地说,它不是很好)和源代码控制系统(假设它是CVS或更好,它支持真正的工作流)

我们是这样做的:

report --depends on--> core
web    --depends on--> core
我们使用maven释放塞:

在开发过程中,报表的pom将有一个快照版本,与core的pom中的内容相匹配。我在core中执行了
mvn干净安装
,然后我可以在本地环境的
报告中看到这些更改

当我发布报告时,我必须首先通过maven发布插件发布core。当我在core上使用它时,它要求我将core的版本设置为release(即删除-SNAPSHOT),对此我说是的,并且生成的已发布工件不依赖于快照发布。发布插件完成后,报告pom现在取决于core的下一个快照版本(尽管您可以在
mvn发布:prepare
期间覆盖此版本)


web上的开发人员随后收到一封电子邮件,告知有新版本的core可用,如果他们愿意,他们可以选择使用它。我们的政策是,它们应该在发布之前更新。

尝试布局您的构建,以便需要一起开发的模块可以一起发布。这将让maven发布插件为您完成大部分工作

对于确实应该有单独生命周期的依赖项…因为它们很少更改或由多个项目共享,所以您希望以不同的方式处理它们。我这样做的方式是将依赖项保留在上一个发布版本,直到更改实际需要升级到下一个快照。通过这种方式,当您发布产品时,您将发现所有可能也会发布的内容,只需遵循快照跟踪即可


我发现将外部依赖版本指定为项目顶部pom中的属性也很有帮助。这使得我们很容易一目了然地看到需要发布的内容。查找pom示例。

假设最新版本是report 2.0-->core 1.5。签入poms:报告2.1-SNAPSHOT-->1.5;核心1.6-快照。开发人员希望更新这两个版本,将报告更改为依赖于1.6-SN。然后,我们更新核心
report --depends on--> core
web    --depends on--> core