【问题标题】:Use Maven only in the build-server, not at the developer仅在构建服务器中使用 Maven,而不是在开发人员中
【发布时间】:2016-07-28 11:07:09
【问题描述】:

目前,开发人员处理多个 OSGi Bundle,它们也通过 OSGI 导入/导出相互使用。 Eclipse 用于开发和测试。

现在,我们将设置一个 CI 服务器 (Jenkins),它应该使用 Maven 构建所有 osgi 包(来自 repo)。因此,只有在 CI-server 中才需要 maven。这也意味着,开发人员在他们的工作站上开发时既不会看到也不关心 pom.xml,因为他们没有接触 maven。

我的第一个问题是,如果可能的话。当开发人员更改 Manifest 上的导入和导出时,maven 必须知道这一点才能使这些依赖项可用于编译器。例如,maven 想要构建 BundleB,它从 BundleA 导入包 a。通常,pom.xml 将包含对 Bundle A 的 maven 依赖项(之前必须部署到本地 maven 存储库)。但是,当开发人员仅更改其捆绑包中的 MANIFEST.MF 时,pom.xml 中没有条目。 maven 是否有可能通过解析 MANIFESTs 确定正确的 maven 依赖项?或者另一种解决方案:告诉 maven 一个包含所有预构建 jar 的类路径?

我的第二个问题是是否建议仅在 ci-server 而不是在开发人员中使用 maven。

问候

【问题讨论】:

标签: maven jenkins continuous-integration osgi


【解决方案1】:

如果开发人员不使用 maven,那么他们使用什么来构建。我认为拥有一个自动构建系统是有意义的。因此,您应该在开发者系统上使用 maven 或类似 gradle 之类的东西。

另一个问题是手动维护清单文件是否有意义。这是 PDE 在 Eclipse 中的工作方式,但我认为在构建期间创建清单更有效。这可以通过使用 felix 的 maven-bundle-plugin 来完成。这样工作要容易得多。

有关一些示例,请参阅karaf tutorials

您可以寻求的另一个选择是查看 bndtools 及其 gradle 构建。有点特别,但是很方便。

【讨论】:

  • 实际上,我们的开发人员并没有真正构建。他们在 Eclipse(基本上是一个 osgi 容器)中编译并运行他们的 osgi 包。
  • 嗯...我知道十年前的那种工作风格... :-) 笑话不谈.. 问题是:如果开发人员无法构建应用程序,他如何确保在 CI 服务器上构建可以工作吗?
  • 直到现在,开发人员总是需要检查完整的产品(多个 osgi 包/项目)并使用 eclipse 的导出功能创建最终的 osgi-bundle-jars。现在,开发人员仍应检查完整的产品并在其本地 Eclipse 环境中对其进行测试。但是新的东西应该是 CI 服务器构建 osgi 包,下一步应该在 osgi 容器中进行自动化集成测试,该容器只运行应用程序,而不是开发人员使用的 eclipse-equinox 组合。跨度>
  • 有道理,但我会为开发人员和 CI 机器使用相同的构建。因此,开发人员可以进行构建,并且只有在所有工作都在他们的机器上运行时才签入。这可以减少失败的构建并保持代码库的高质量。
  • CI 提供了一个不受开发者影响的“中立”环境。我经常遇到构建对我有用但在 CI 系统上不起作用的情况。通常,我要么有一些特殊设置,要么例如在我的本地 maven 存储库中有一个在其他地方不可用的快照。因此,尽管开发人员构建是一件好事,但您始终还需要在中立实例上进行构建,以确保构建不仅可以在单个开发人员机器上运行。
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多