我们有几个产品有很多共享代码并且必须维护几个版本。
为了解决这个问题,我们使用了很多 Eclipse 项目,有些包含库 jar,有些包含共享源代码(在几个项目中,以避免获得具有大量依赖项的巨大堆,同时能够从头开始编译所有内容以确保源代码和二进制文件是持续的)。我们使用 projectSet.psf 管理这些项目,因为它们可以直接从 CVS 中拉出所有项目并留下一个准备充分的工作区。我们不直接进行 ant 构建或使用 maven。
我们现在希望能够将所有这些项目及其各种版本放入一个持续集成工具中——我喜欢 Hudson,但这只是个人喜好问题——这本质上意味着我们需要一种自动的方式来检查项目以一个新的工作区,并按照每个项目的项目文件中的描述编译源文件夹。Hudson 没有提供这样的方法来构建项目,所以我一直在考虑最好的方法是什么。
想法已经
- 查找或编写一个能理解 projectSet.psf 并映射到 cvs-checkout 和编译标签的 ant 插件/转换器。
- 从 Eclipse 中创建 build.xml 文件并使用它们。我试过这个,发现结果很冗长,而且绝对位置不适合自动工具将文件放在他们想要的位置。
- 编写一个理解 projectSet.psf 的 Hudson 插件以派生配置并构建它。
- 只要硬着头皮手动创建和更新 CI 配置就可以了——我不喜欢这样 :)
我真的很想听听其他人的经历,所以我可以决定如何处理这个问题。
编辑:另一种选择可能是使用更了解 Eclipse 项目和/或项目集的 CI。我们不信教——这只是让东西运行起来而不必自己做所有事情的问题。巡航控制可能是一个更好的选择吗?其他的?
编辑:发现 ant4eclipse 有一个“团队项目集”设施。 http://ant4eclipse.sourceforge.net/
编辑:使用 ant4eclipse 和 ant-contrib ant 扩展来构建一个完整的工作区作为 sjgned 可运行 jar 文件,类似于 Eclipse 3.5M6 中的可运行 Jar 工具。我仍然依赖 Eclipse 来创建初始的空工作区,并提取 ProjectSet,所以这是下一个障碍。
编辑:以双重配置结束,即 Hudson 从 CVS 中提取与 ProjectSet.pdf 文件中列出的相同的模块集(需要具有相同的标签),从而使它们彼此相邻。然后 ant4eclipse 可以很好地与嵌入在主模块中的 projectSet.psf 文件配合使用。警告:必须手动更新 Hudson 中的模块列表,并且之后似乎需要手动清理工作空间,以便让 Hudson “发现”现在比以前有更多的项目。几个月来,这对我们来说效果很好,但是让所有的东西都在 ant 文件中工作是相当乏味的。
编辑:在哈德逊的 CVS 项目中,使用 ant4eclipse 和 Ctrl-A、Ctrl-C 在项目面板中使用 Ctrl-V 的“使用团队项目”已经证明工作得很好,我们可以忍受(对于成熟的项目,这个很少改变)。我正在等待 ant4eclipse 1.0 的发布——http://www.ant4eclipse.org/ ,目前处于里程碑 2——看看有多少本土功能可以被 ant4eclipse 东西取代。
编辑:ant4eclipse 在 M4 中是截至 20100609 的,所以http://www.ant4eclipse.org/node?page=1上的时间表有所下滑。
编辑:在长时间使用我们的 ant4eclipse 方法后,我的结论是构建脚本变得非常粗糙并且难以维护。Team ProjectSet 工具(ant4eclipse 用来定位项目)也适用于基于 CVS 的存储库,但在我们迁移到 git 之后就不行了(这本身就是一件大事)。新项目很可能基于 maven,因为这在 Jenkins 中得到了很好的支持。