【问题标题】:How to use directory containing third party bundles in a Tycho build如何在 Tycho 构建中使用包含第三方包的目录
【发布时间】:2015-04-08 19:44:38
【问题描述】:

过去,我们在文件系统上拥有我们的包和功能,并通过具有“目录”位置的目标定义文件使它们在 Eclipse 中可用。通过这种方式,可以轻松地将它们与 Eclipse 中的导出向导一起使用。

现在我正在尝试使用具有第三方依赖项的 Tycho 构建 eclipse-plugin,例如javax.vecmath 和 org.apache.commons.math。

据我所知,在 Tycho 构建中获取依赖项的最佳方式是通过 p2 存储库。所以我将一个用于 Eclipse 捆绑包。但是对于我的第三方捆绑包,似乎没有可用的 p2 存储库。

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

我以为我可以使用 Tycho 构建一个 p2 存储库,但是当我无法访问 Tycho 中的第三方捆绑包时,我该怎么做呢?我尝试使用目标定义,但 Tycho 仅支持指向 p2 存储库的链接,而不支持目录或安装。那么还有其他方法可以在 Maven/Tycho 构建中使用我的第三方依赖项吗?

【问题讨论】:

    标签: maven eclipse-rcp dependency-management tycho


    【解决方案1】:

    几个不同的选项...

    P2 插件

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

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

    捆绑插件

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

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

    捆绑插件和 Tycho

    如果您使用 Bundle 插件 方法将依赖项包装到 OSGi 包中,无论如何为这些依赖项设置 p2 存储库可能仍然有用,因为这简化了在Eclipse PDE。

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

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

    eclipse-feature 似乎是第谷 0.13.0 中最好的封装类型。在较新的版本中可能会有更合适的包装类型。

    【讨论】:

    【解决方案2】:

    在 p2 存储库中寻找 3rd 方捆绑 jar 的好地方是 eclipse orbit

    http://download.eclipse.org/tools/orbit/downloads/

    commons.math 在那里。

    如果您的第 3 方 OSGi 包在 p2 存储库中不可用,但在 maven 存储库中,例如

    http://search.maven.org/

    您可以使用 tycho 的 pomDependency=consider 开关:

    http://wiki.eclipse.org/Tycho/How_Tos/Dependency_on_pom-first_artifacts

    【讨论】:

    • 我在几分钟前就找到了orbit,真的很方便。另一个建议看起来很有趣,谢谢。
    【解决方案3】:

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

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

    【讨论】:

    • 这是创建 p2 存储库的最简单、最快的方法。谢谢大家。
    • 我不同意。您必须手动生成站点,如果 jar 不是捆绑包,您必须自己“捆绑”它们。所有这些都是平凡而繁琐的,并且可以使用 p2-maven-plugin 轻松自动化(如下所述)。我是 p2-maven-plugin 的作者,我编写它只是因为我发现使用“Features and Bundles Publisher Application”真的很麻烦。试试 p2-maven-plugin,你会发现它比其他任何东西都简单:github.com/reficio/p2-maven-plugin
    • 是的,我同意 p2-maven-plugin 看起来是最好的解决方案。在 Eclipse/RCP 项目中处理第三方依赖确实是一件很痛苦的事情。看起来 p2-maven-plugin 可以显着减少这种痛苦,只需在某处维护一个列表并从 CI 构建发布一个 p2 更新站点,以便我们可以在所有 tycho 构建中使用它。
    • 如果 jar 不是捆绑包 ... - 在问题中描述的场景中,第三方 JAR 是通过目标定义目录使用的,因此它们已经捆绑。如果问题与您的情况不符,请不要怪我。
    【解决方案4】:
    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2018-01-21
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2021-04-03
    相关资源
    最近更新 更多