Maven 2 持续集成构建-版本控制

Maven 2 持续集成构建-版本控制,maven-2,continuous-integration,maven,versioning,Maven 2,Continuous Integration,Maven,Versioning,我有一个关于版本号、发布版本和持续集成的问题 到目前为止,在我们的构建中,我们一直使用RELEASE作为每个构建中所有组件的版本 <dependency> <groupId>com.mycompany</groupId> <artifactId>mydependency</artifactId> <version>RELEASE</version> </dependency>

我有一个关于版本号、发布版本和持续集成的问题

到目前为止,在我们的构建中,我们一直使用RELEASE作为每个构建中所有组件的版本

<dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>mydependency</artifactId>
    <version>RELEASE</version>
</dependency>

com.mycompany
我的依赖
释放
这样做的好处是,我们总是使用每个依赖项的最新版本,但有一个主要缺点,即我们的构建不可复制,因为您不知道在过去某个时候应该使用哪些依赖项(例如,版本中说的不是1.3.2版)

如果我们改用固定的版本号,我们会得到可复制的构建,但是我们不会失去持续集成的优势,告诉我们现在发生了什么?这不是持续整合的要点吗

这样做的标准方式是什么

问候,, D

如果我们改用固定释放 数字,我们得到可复制的构建, 但我们不是失去了 持续集成告诉我们什么 现在坏了吗?这不是重点吗 持续集成的概念

不,我不同意。每个被引用的项目都应该有自己的CI构建,并且应该报告哪些项目被破坏了


如果您的CI项目是项目a,并且依赖于项目b,那么构建a应该测试项目a而不是项目b的有效性。因此,构建a唯一有趣的事情是项目a与项目b的指定版本一起工作。(Project b最新版本的功能与此无关)

您的问题有几种可行的解决方案,其中最常见的是:

1) 您可以将多个项目组合在一起,如果它们都必须构建并形成依赖关系树,则可以将它们组合成一个连贯的模块集。这使用了maven

<modules>
    <module>submodule-A</module>
    <module>submodule-B</module>
</modules>

子模A
子模块B
格式,这是简洁的,并且在将所有应作为一个组一起进行版本控制的项目分组时非常有用。然后,您只需要一个脚本,该脚本可以在发布时将所有子pom.xml文件的版本号更新为正确的版本号(或者,我不太喜欢使用maven发布插件)。这样,项目的每个部分作为一个整体一起移动和版本控制;然后,您可以开始添加实际修订号(即1.3.2)

2) 如果您无法将常见的子项目整理成具有模块的一致解决方案,那么下一个最佳选择就是使用快照。通过将dependency project中的版本设置为:

<project>
    ...
    <artifactId>dependency-A</artifactId>
    <groupId>com.company</groupId>
    <version>1.3.2-SNAPSHOT</version>
    ...
</project>

...
依赖性-A
com公司
1.3.2-快照
...
您可以同时在单独的代码库中移动。主项目可以通过直接依赖快照来跟踪库中的更改:

<dependencies>
    ...
    <dependency>
        <artifactId>dependency-A</artifactId>
        <groupId>com.company</groupId>
        <version>1.3.2-SNAPSHOT</version>
    </dependency>
    ...
</dependencies>

...
依赖性-A
com公司
1.3.2-快照
...
或者,您可以依赖旧版本继续当前的开发周期(即使用1.3.1),然后在1.3.2版本发布后更新依赖关系


当跟踪多个独立的项目时,这个选项稍微复杂一些,但它确实保留了清晰的内容,这取决于源代码中明确的版本。与一起对模块进行版本控制相比,这是一个缺点。另一方面,大多数CI系统(包括Hudson)在配置部分的末尾都有一个复选框,用于询问“构建相关项目”之类的作业。当检查并作为maven版本运行时,每当快照dependency-a进行重建时,Hudson可以自动启动依赖dependency-a的任何项目的版本。当您有一个常见的、不断更新的dependency-a时,这会非常方便。

首先,计划停止使用
RELEASE
。插件版本在Maven 3中;关于Maven的在线书籍中似乎已经删除了对它的引用,如果还没有,我希望它最终会被弃用到依赖版本中(我无法以这种或那种方式找到权威信息)。如果您对此不确定,请查看/询问用户邮件列表以进行确认。您已经了解了构建再现性的艰难过程

其次,我同意这样的回答,即您通常希望为项目的依赖项定义固定版本,除非您同时对多个项目进行更改,在这种情况下,您需要快照依赖项版本。但这只能在他们准备好被释放之前进行。此时,您应该发布最低级别的一个,在其他项目中将依赖项说明符切换到新的固定版本,并对每个项目重复,直到完成为止。只有当所有依赖项都是固定版本时,才应发布项目的新版本。政府可以对此有所帮助

第三,了解多个项目的当前“提示”是否能够协同工作仍然非常有用或有趣,即使它们在独立的发布时间表上!向后/向前兼容性规划,对吗?随着项目的增多,这一点变得更加重要。我认为这就是您所说的“持续集成”(尽管现在CI通常指的是持续构建和测试多个开发人员在单个分支上进行的更改)

在这种情况下,您应该创建一个顶级聚合器项目,将所有相关项目定义为模块。您可以在工作区中执行此操作,而无需将更改提交到版本控制,也可以为跟踪主线更改的每个项目创建特定于集成的分支。在任何一种情况下,您都希望使用:使用最新版本目标来自动更新POMs,或者使用让maven选择与您当前使用“发布”类似的方式(尽管我更希望版本尽可能明确)

(严格来说,您不需要顶级聚合器,但需要其他