过去,我们在文件系统上安装了我们的捆绑包和功能,并通过目标定义文件在Eclipse中提供了这些捆绑包和功能,其目录是'地点。通过这种方式,可以很容易地将它们与Eclipse中的Export向导一起使用。
现在,我正在尝试使用第三方依赖的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构建中使用我的第三方依赖项?
答案 0 :(得分:11)
一些不同的选择......
P2插件
使用p2-maven-plugin将所有非OSGi依赖项包装到bundle中,并创建一个p2存储库。
我没有尝试过p2-maven-plugin(当我设置当前项目时它不存在)。它的实现基于tycho,但您可能会发现它提供了一种更方便的方法来解决您的问题,而不仅仅是tycho插件。
捆绑插件
使用maven-bundle-plugin 包装您的非OSGi依赖项(每个依赖项包含一个包装程序),并将其安装到您的存储库中。我认为commons-math已经是一个依赖,所以你可能只需要包装vecmath。然后,您可以在基于tycho的pom文件的<dependencies>
中列出这些依赖项。
此方法的优点是,您无需仅为构建项目而设置p2存储库。缺点是在捆绑项目中管理依赖项不再是仅修改MANIFEST.MF文件的情况:您可能还需要更新pom。
Bundle插件和Tycho
如果使用 Bundle插件方法将依赖项包装到OSGi包中,那么为这些依赖项设置p2存储库仍然很有用,因为这样可以简化设置目标平台的过程。 Eclipse PDE。
为此,您可以创建一个新的基于tycho的项目,以将依赖项收集到p2存储库中:即已经捆绑的依赖项,以及非OSGi依赖项的包装版本。这样,创建p2存储库的项目在其pom中列出了包装的依赖项,并且bundle项目可以使用p2存储库而不在其poms中列出任何依赖项。
这是我正在使用的方法。具体来说,我使用eclipse-feature
项目来定义 base 功能,其中包含所有第三方依赖项。我还将包装插件上的<deployableFeature>
配置选项设置为true
,这将在目标目录中创建一个p2存储库。此功能可以安装到我常用的Eclipse实例中,这使得使用当前Eclipse平台作为目标平台变得容易。它也可以用作p2存储库,可以在tycho构建中的其他地方使用(即通过我的代码),或者作为Eclipse .target
文件中的存储库使用。
eclipse-feature
似乎是Tycho 0.13.0中最好的包装类型。在最近的版本中可能有更合适的包装类型。
答案 1 :(得分:2)
在p2回购中寻找第三方捆绑罐的好地方是日食轨道
http://download.eclipse.org/tools/orbit/downloads/
commons.math就在那里。
如果您的第三方OSGi包在p2仓库中不可用,但在maven仓库中可用,例如
你可以使用tycho的pomDependency =考虑开关:
http://wiki.eclipse.org/Tycho/How_Tos/Dependency_on_pom-first_artifacts
答案 2 :(得分:0)
根据您的问题,第三方依赖项已经是捆绑包。这很好 - 剩下要做的就是为包生成p2元数据。
这可以通过Features and Bundles Publisher application轻松完成。结果是一个p2存储库。显然,您不希望所有开发人员都必须在本地执行此操作才能运行Tycho构建,因此您应该将发布者应用程序的结果放到Web服务器上。然后,通过项目目标文件中的http URL引用包。
答案 3 :(得分:0)