如何在Tycho构建中使用包含第三方包的目录

xon*_*ned 12 eclipse-rcp dependency-management tycho maven

在过去,我们在文件系统上有我们的捆绑和功能,并通过具有"目录"位置的目标定义文件在Eclipse中提供它们.通过这种方式,可以很容易地将它们与Eclipse中的Export向导一起使用.

现在我正在尝试构建一个eclipse-plugin具有第三方依赖关系的Tycho,例如javax.vecmathorg.apache.commons.math.

据我所知,在Tycho构建中获取依赖关系的最佳方法是通过p2存储库.所以我正在使用Eclipse捆绑包.但对于我的第三方软件包,似乎没有可用的p2存储库.

所以我的问题是:如何轻松地将JAR(vecmath,commons-math)放入p2存储库?

我以为我可以用Tycho构建一个p2存储库,但是当我无法访问第谷的第三方软件包时如何做到这一点?我尝试使用目标定义,但Tycho仅支持到p2存储库的链接,而不支持目录或安装.那么有没有其他方法可以在Maven/Tycho构建中使用我的第三方依赖项?

Mar*_*lis 11

一些不同的选择......

P2插件

使用p2-maven-plugin将所有非OSGi依赖项包装到bundle中,并创建一个p2存储库.

我没有尝试过p2-maven-plugin(当我设置当前项目时它不存在).它的实现基于tycho,但你可能会发现它提供了一种更方便的方法来解决你的问题,而不仅仅是tycho插件.

捆绑插件

使用Maven的捆绑,插件包装你的非OSGi的依赖关系(每个依赖一个包装POM),并将其安装到您的存储库.我认为commons-math已经是一个依赖,所以你可能只需要包装vecmath.然后,您可以在<dependencies>基于tycho的pom文件中列出这些依赖项.

这种方法的优点是您不需要仅为构建项目而设置p2存储库.缺点是在捆绑项目中管理依赖项不再仅仅是修改MANIFEST.MF文件:您可能还需要更新pom.

Bundle插件和Tycho

如果您使用Bundle插件方法将依赖项包装到OSGi包中,那么为这些依赖项设置p2存储库仍然很有用,因为这简化了在Eclipse PDE中设置目标平台的过程.

为此,您可以创建一个新的基于tycho的项目来将依赖项收集到p2存储库中:即已经捆绑的依赖项,以及非OSGi依赖项的包装版本.这样,创建p2存储库的项目会在其pom中列出包装的依赖项,并且bundle项目可以使用p2存储库而不在其poms中列出任何依赖项.

这是我正在使用的方法.具体来说,我正在使用一个eclipse-feature项目来定义一个包含所有第三方依赖项的基本功能.我还在<deployableFeature>包装插件上设置了配置选项true,这将在目标目录中创建一个p2存储库.此功能可以安装到我常用的Eclipse实例中,这使得使用当前Eclipse平台作为目标平台变得容易.它也可以用作p2存储库,可以在tycho构建中的其他地方使用(即通过我的代码),或者作为Ec​​lipse .target文件中的存储库使用.

eclipse-feature似乎是Tycho 0.13.0中最好的包装类型.在最近的版本中可能有更合适的包装类型.


obe*_*ies 0

根据您的问题,第三方依赖项已经是捆绑包。这很好——剩下要做的就是为包生成 p2 元数据。

这可以通过Features and Bundles Publisher 应用程序轻松完成。结果是一个 p2 存储库。显然,您不希望所有开发人员都必须在本地执行此操作才能运行第谷构建,因此您应该将发布者应用程序的结果放到 Web 服务器上。然后,通过项目目标文件中的 http URL 引用包。

  • 我不同意。您必须手动生成站点,如果 jar 不是捆绑包,您必须自己“捆绑”它们。所有这些都是平凡、麻烦的,并且可以使用 p2-maven-plugin(下面提到)轻松实现自动化。我是 p2-maven-plugin 的作者,我编写它只是因为我发现使用“功能和捆绑发布器应用程序”确实很麻烦。尝试 p2-maven-plugin,你会发现它比其他任何东西都容易得多:https://github.com/reficio/p2-maven-plugin (4认同)