我的Eclipse RCP应用程序是使用Tycho构建的。它由多个组件组成(以OSGi包/ Eclipse插件的形式)。其中一个组件包含产品文件并实现产品。
应用程序根目录下有一个reactor POM,它按顺序构建所有组件,但我也想独立构建其他组件(使用mvn deploy
)。
构建这样的单个组件的工作方式如下:
注意:我们的存储库是托管在Nexus上的普通 maven2 存储库,其RCP工件也会自动映射到p2存储库格式。这样,Tycho可以使用p2存储库格式来查找依赖项,而可以使用标准的Maven部署。这很好。
注意:我的父POM确保我们在p2存储库URL中查找依赖项。部署URL是存储库的默认maven2格式位置。这很好。
当通过命令行(mvn deploy
)构建这样的单个组件时,Maven在p2存储库中查找项目内依赖项并正确解析它们(即最新版本是自动下载并在构建中使用。)
但是,在Eclipse中进行开发时,IDE无法解析它们。清单文件在我的每个项目内依赖项中都会出现错误,无法解析它们。
我的问题是:如何让Eclipse IDE在以下任何一个中查找依赖项(以及新版本的依赖项):
~/.m2/repository/p2/osgi/bundles
)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格式提供此部署的插件。
当我通过命令行构建fancy
组件(使用mvn install
)时,会自动找到并下载(早期部署的)核心组件。
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编译步骤实际上是由Eclipse JDT编译器执行的。
我也知道,当在Eclipse中启动完整的Tycho产品时,它将在Eclipse PDE环境中运行。例如,我需要在运行配置中指定目标平台。
我知道我可以打开Eclipse工作区中的所有组件。这样可以解决问题,但是因为我有很多组件而不可行,这会破坏独立的组件开发。
我假设Eclipse m2e映射和/或PDE构建环境不够智能,无法在构建时自动获取(最新)依赖项。如果我错了,请纠正我。 :)
因此,我假设我还需要在构建时指定目标平台。我看了一下 Window&gt;偏好&gt;插件开发&gt;目标平台。我可以将我们的p2存储库添加到目标平台,从而解决了这个问题。然而,这会带来许多问题:
如果以上都是正确的,我推测我需要一个m2e连接器(或者与当前的连接器不同),在解析OSGi依赖关系时实际检查POM中指定的p2存储库并自动将它们添加到目标平台。
答案 0 :(得分:6)
如Nick Wilson所示,您需要安装 m2e Tycho配置器,它基本上“连接”Eclipse和Tycho(即,在Eclipse中提供Tycho)。
安装m2e后你应该指出它,但你也可以手动安装它:
转到窗口&gt;偏好&gt; Maven&gt;发现。
单击“打开目录”按钮。这将打开“m2e Marketplace”窗口。
搜索“tycho”,这应该会为您提供“Tycho配置器”作为唯一的搜索结果。
点击“完成”,你就完成了。
我也有这个问题,找到解决方案并不简单,所以我希望这有帮助!
答案 1 :(得分:5)
&#34;最自动化&#34;在Eclipse中配置目标平台的方法是使用目标文件。该文件可以使用您的来源签入,因此每个开发人员只需打开该文件并单击&#34;设置为目标平台&#34;激活它。 AFAIK没有m2e连接器或Eclipse插件可以自动完成。
鉴于您的开发过程,设置此目标文件有点棘手。由于您没有包含所有捆绑包的最新版本的功能,因此您需要将捆绑包直接包含在目标文件中。这不是通过丰富的编辑器实现的,但可以使用文本编辑器完成:
<unit>
条目。相反,请为每个捆绑包添加一个条目:
<unit id="a.bundle.symbolic.name" version="0.0.0"/>
然后,此目标文件包含每个列出的捆绑包的最新版本。要查看内容,请使用&#34;目标编辑器&#34;打开文件。再次切换到&#34;内容&#34;标签。现在,所有开发人员都可以使用此文件。
注意:当其中一个软件包的新版本部署到Nexus时,开发人员只有在打开目标文件并选择&#34;设置为目标平台&#34;试。