12

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

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

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

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

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

4

4 回答 4

12

几个不同的选择...

P2 插件

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

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

捆绑插件

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

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

捆绑插件和 Tycho

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

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

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

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

于 2012-11-07T11:17:34.580 回答
2

在 p2 repos 中寻找 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

于 2012-11-07T15:17:20.473 回答
0

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

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

于 2012-11-07T12:05:10.890 回答
0

这是一个实际示例:https ://github.com/skosmalla/generate-p2-repository-from-maven-artifacts

于 2014-03-25T06:29:04.767 回答