6

我尝试在我的 Ecipe-RCP 应用程序中使用我的遗留代码。我使用了所有带有依赖项的旧 maven 项目,并使用 maven-bundle-plugin 创建了一个 osgi 包。

现在我把所有东西都包在一个新的 osgi jar 中。

如何从此 OSGi jar 创建 p2 更新站点以与 Tycho 和 Eclipse 目标平台一起使用?

我试过:https ://docs.sonatype.org/display/TYCHO/How+to+make+existing+OSGi+bundles+consumable+by+Tycho ://docs.sonatype.org/display/TYCHO/How+to+make+existing+OSGi+bundles+consumable+by+Tycho (见网络档案

发布 P2 存储库

先决条件:

  1. 首先,我们将所有 bundle jar 复制到 <BUNDLE_ROOT>/plugins 目录中
  2. 然后我们执行
  %ECLIPSE_HOME%\eclipsec.exe -debug -consolelog -nosplash -verbose -application
        org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher
        -metadataRepository file:/<BUNDLE_ROOT>/repo
        -artifactRepository file:<BUNDLE_ROOT>/repo
        -source <BUNDLE_ROOT> -compress -publishArtifacts
  1. 结果是一个 P2 存储库,其中包含 <BUNDLE_ROOT>/repo 下的所有 OSGi 包。注意 repo 目录中生成的 P2 元数据文件 artifacts.jar 和 content.jar。

通过 HTTP 使新的 P2 存储库可用

<BUNDLE_ROOT>/repo 中的 P2 存储库是完整的,我们只需要通过 HTTP 使其可用,以便可以全局引用。

这可以使用任何 HTTP 服务器(例如 Apache)来完成。在我们的例子中,我们选择将它部署在 Tomcat 上,因为我们已经有一个 tomcat 用于其他目的,例如 Hudson 等。

在运行tomcat的主机上,将<BUNDLE_ROOT>/repo的内容复制到<TOMCAT_HOME>/webapps/<YOUR_REPO_DIR>

从现在开始,您可以在 pom.xml 中将这个 P2 存储库引用为

<repository>
  <id>tomcat-p2</id>
  <layout>p2</layout>
  <url>http://<TOMCAT_HOST>:<TOMCAT_PORT>/<YOUR_REPO_DIR></url>
</repository>

如果我将生成的文件放在 Web 服务器上,则 Eclipse 不会将其识别为“软件站点”。

如何在不使用 Eclipse UI 的情况下从现有的 osgi 包创建 p2 软件站点,该过程必须在我的构建服务器的后台运行。

有没有办法使用 Maven (Tycho)/Gradle 从现有的 osgi 包中自动创建 p2 更新站点?

4

3 回答 3

5

我总是使用这两个命令来生成 p2 存储库:

java -jar %ECLIPSE_HOME%\plugins\org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher -metadataRepository file:/C:/repository -artifactRepository file:/C:/destination -source /C:/source -configs gtk.linux.x86 -compress -publishArtifacts

我的包裹存放在哪里c:/source,然后

%ECLIPSE_HOME%/eclipse -debug -consolelog -nosplash -verbose -application org.eclipse.equinox.p2.publisher.CategoryPublisher -metadataRepository file:C:/destination -categoryDefinition file:C:/source/category.xml

C:/source树是这样的

source
 -- feaures
 -- plugins
 -- category.xml

你需要这个category.xml文件来将你的包分组到类别中。这是分类的内容

<?xml version="1.0" encoding="UTF-8"?>
<site>
   <category-def name="all" label="P2 Repo"/>
   <iu>
      <category name="all"/>
      <query><expression type="match">providedCapabilities.exists(p | p.namespace == 'osgi.bundle')</expression></query>
   </iu>
</site>

根据您的 Eclipse 版本,您可能需要更改此文件的版本org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

于 2013-08-16T13:59:27.173 回答
2

您还可以将这些 OSGi 包(和 maven 源附件)放到Package Drone中,这是我目前正在开发的一个开源 OSGi 存储库。

它允许您从 Maven Tycho、普通 Maven 或手动部署或手动上传 OSGi 工件,并让它从中创建 OSGi 元数据。它还允许使用 P2 访问此存储库,因此可以从 Eclipse PDE 或再次从 Maven Tycho 使用它。

于 2015-01-06T11:43:01.860 回答
0

使用这种方法,由于缺少属性,p2-repository 的内容不会变得可见。将 p2.inf 添加到 META-INF 包含:properties.0.name = org.eclipse.equinox.p2.type.group properties.0.value = true

然后生成的 content.xml 包含这个属性,IUGroupQuery 返回这个单元。

于 2017-03-11T14:01:34.687 回答