【问题标题】:Tycho and Eclipse: How to resolve OSGI dependencies to my own bundles at development time within Eclipse, without opening all of them in the IDETycho 和 Eclipse:如何在 Eclipse 中的开发时解决 OSGI 对我自己的包的依赖,而无需在 IDE 中打开所有包
【发布时间】:2013-09-16 12:50:08
【问题描述】:

背景

我的 Eclipse RCP 应用程序是使用 Tycho 构建的。它由多个组件组成(以 OSGi 包/Eclipse 插件的形式)。其中一个组件包含产品文件并实现产品。

应用根目录下有一个reactor POM,它按顺序构建所有组件,但我也想独立构建其他组件(使用mvn deploy)。

构建这样一个单一组件的工作原理如下:

  1. 从我们公司 (p2) 存储库中检索所有组件依赖项的最新版本。
  2. 构建组件。
  3. 将该组件部署到我们公司的存储库,以用作其他组件本身的依赖项。

注意:我们的存储库是托管在 Nexus 上的普通 maven2 存储库,其 RCP 工件也会自动映射到 p2 存储库格式。这样,Tycho 可以使用 p2 存储库格式来查找依赖项,同时可以使用标准的 Maven 部署。这很好用。

注意:我的父 POM 确保我们在 p2 存储库 URL 中查找依赖项。部署 URL 是存储库的默认 maven2 格式位置。这很好用。

问题

当通过命令行 (mvn deploy) 构建这样的单个组件时,Maven 会在 p2 存储库中查找 intra-project 依赖项并正确解析(即自动下载最新版本并用于构建)。

但是,在 Eclipse 中开发时,IDE 无法解决它们。清单文件在我的每个项目内依赖项中都给出了一个错误,它们无法解决。

问题

我的问题是:如何让 Eclipse IDE 查找依赖项(以及新版本的依赖项):

  • 我的本地 p2 存储库 (~/.m2/repository/p2/osgi/bundles)
  • 我的公司 p2 存储库 (nexus.mycompany.com/myproduct-snapshots/.meta/p2)

理想情况下,如果有更新的版本可用,它会每次都查找它们并获取最新版本。

如果它不使用 POM 中的 p2 存储库 URL,我应该如何配置 Eclipse?

示例

考虑一个eclipse插件com.mycompany.myproduct.fancy,它依赖于另一个eclipse插件com.mycompany.myproduct.core

两者都有一个 POM(配置为 Tycho 使用),它(通过它们的父 POM)正确配置了我的 Nexus 存储库:用于部署的 maven2 存储库 URL 和用于查找依赖项的 p2 存储库 URL。

首先我将core 插件部署到我的maven 存储库(使用默认的mvn deploy)。 Nexus 存储库将以 maven 和 p2 格式提供这个部署的插件。

当我通过命令行(使用mvn install)构建fancy 组件时,会自动找到并下载(之前部署的)核心组件。

project/com.mycompany.myproduct.fancy$ mvn clean install
<searches in p2 repository, download core>
<builds fancy>
<SUCCESS>

当我打开一个新的 Eclipse 工作区并打开 fancy 组件时,它的 Manifest(包含它的依赖项)会给出以下错误:

Bundle 'com.mycompany.myproduct.core' cannot be resolved.

我的问题是:如何在 Eclipse IDE 中开发 fancy 组件,而无需在 Eclipse 中打开 core 作为项目。

推测

这是我的一些猜测。如果我错了,请纠正我,也欢迎任何其他解决实际问题的方法!

  • 我知道 Eclipse IDE 的 m2e 插件目前将 Maven POM 映射到 Eclipse 概念(使用 m2e 连接器)。我已经安装了专用的 Tycho 连接器。例如,mvn compile这一步实际上是由Eclipse JDT编译器执行的。

  • 我还知道,当一个完整的 Tycho 产品在 Eclipse 中启动时,它是在 Eclipse PDE 环境中运行的。例如,我需要在我的运行配置中指定一个目标平台。

  • 我知道我可以打开我的 Eclipse 工作区中的所有组件。这可以解决问题,但不可行,因为我有很多组件,这会破坏独立组件的开发。

  • 我假设 Eclipse m2e 映射和/或 PDE 构建环境不够智能,无法在构建时自动获取(最新)依赖项。如果我错了,请纠正我。 :)

  • 因此,我假设我也需要在构建时指定目标平台。我查看了 Window > Preferences > Plug-in Development > Target Platform。我可以将我们的 p2 存储库添加到目标平台,从而解决问题。然而这会带来很多问题:

    • 我需要一个包含所有组件的功能才能工作。只能添加功能。
    • 每次部署单个组件的新版本时,我都必须重新构建完整的功能(以在我们的 p2 存储库上创建新的功能版本)。
    • 每次更新组件并构建功能时,我都必须手动更改目标平台。
  • 1234563目标平台。

【问题讨论】:

  • 您是否安装了 m2e 插件和 Tycho Configurator?
  • 是的,m2e 已安装。我的包被配置为 Maven 项目和插件(即项目的构建器是 Java Builder、Plug-in Manifest Builder、Extension Point Schema Builder 和 Maven Project Builder)。 Maven 生命周期映射是为 Tycho 自动配置的。我不知道你所说的“Tycho Configurator”是什么意思?
  • 听起来与我正在尝试做的事情非常相似,但我遇到了各种各样的麻烦。你能分享你的poms吗?您是否在 Nexus OSS 上完成了这项工作?
  • tbacker,你想清楚了吗。我现在和你在同一条船上,有一个公司 p2 设置并开发使用它的组件。命令行上的 Maven 运行良好,但安装的 m2e + tycho 配置器无法解决我的依赖关系。我注意到的一件事是,如果我右键单击一个插件并选择“属性...”并转到 Maven/生命周期映射,唯一的执行是“资源:资源”然后是“资源:测试资源”,所有第 cho 的都设置为“忽略”

标签: eclipse maven osgi eclipse-rcp tycho


【解决方案1】:

在 Eclipse 中配置目标平台的“最自动化”方式是使用目标文件。该文件可以与您的资源一起签入,因此每个开发人员只需打开该文件并单击“设置为目标平台”即可激活它。 AFAIK 没有自动执行此操作的 m2e 连接器或 Eclipse 插件。

鉴于您的开发过程,设置此目标文件有点棘手。由于您没有包含所有捆绑包的最新版本的功能,因此您需要将捆绑包直接包含在目标文件中。这无法通过富编辑器实现,但可以使用文本编辑器完成:

  1. 创建一个目标定义文件,添加您的 p2 存储库,然后从该 p2 存储库中选择任何功能。保存文件。
  2. 在文本编辑器中打开目标文件,删除您添加的功能的 &lt;unit&gt; 条目。
  3. 相反,为您的每个捆绑包添加一个条目:

    <unit id="a.bundle.symbolic.name" version="0.0.0"/>
    

然后,此目标文件包含每个列出的捆绑包的最新版本。要查看内容,请再次使用“目标编辑器”打开文件并切换到“内容”选项卡。该文件现在可供所有开发人员使用。

注意:当其中一个捆绑包的新版本部署到 Nexus 时,开发人员只有在打开目标文件并再次选择“设置为目标平台”时才能看到该新版本。

【讨论】:

    【解决方案2】:

    正如 Nick Wilson 所说,您需要安装 m2e Tycho Configurator,它基本上“链接”了 Eclipse 和 Tycho(即,使 Tycho 在 Eclipse 中可用)。

    你应该在安装 m2e 后被指向它,但你也可以手动安装它:

    1. 转到窗口 > 首选项 > Maven > 发现。

    2. 单击“打开目录”按钮。这将打开“m2e Marketplace”窗口。

    3. 搜索“tycho”,这应该会给您“Tycho Configurator”作为唯一的搜索结果。

    4. 点击“完成”,大功告成。

    我也遇到过这个问题,找到解决办法并不简单,希望对你有帮助!

    【讨论】:

    • 我已经安装了 Tycho 项目配置器...我从 http://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-tycho/0.6.0/N/0.6.0.201207302152/ 检索到它们(如“安装新软件”屏幕所示)。按照您的步骤操作时,Tycho 配置器不会(不再?)出现在列表中。
    • 是的,我认为该列表不会显示已安装的软件。我会看看我有一些不同的设置,看看我是否发现任何有用的...
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2015-12-23
    • 2020-01-27
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多