java - 如何将 OSGI 包添加到 Eclipse RCP 项目

标签 java eclipse osgi eclipse-rcp osgi-bundle

在 Eclipse 中使用“现有 JAR 文件中的插件”向导是将 OSGi 包添加到 Eclipse RCP 项目的正确方法吗?我了解 Eclipse RCP 使用 OSGi bundle ,并且该向导有效地重新打包 JAR 以使它们成为 OSGi bundle ,但是如果 MANIFEST.MF 文件已包含 OSGi 打包信息怎么办?

作为示例,我想将 Jersey REST 客户端添加到 RCP 项目,并且 jersey-client.jar 的 MANIFEST.MF 包含以下内容

Manifest-Version: 1.0
Bnd-LastModified: 1504605074705
Build-Jdk: 1.8.0_144
Built-By: pavel
Bundle-Description: Jersey core client implementation
Bundle-DocURL: http://www.oracle.com/
Bundle-License: https://oss.oracle.com/licenses/CDDL+GPL-1.1, https://
 oss.oracle.com/licenses/CDDL+GPL-1.1
Bundle-ManifestVersion: 2
Bundle-Name: jersey-core-client
Bundle-SymbolicName: org.glassfish.jersey.core.jersey-client
Bundle-Vendor: Oracle Corporation
Bundle-Version: 2.26.0
Created-By: Apache Maven Bundle Plugin
Export-Package: org.glassfish.jersey.client;uses:="javax.inject,javax.
 net.ssl,javax.ws.rs,javax.ws.rs.client,javax.ws.rs.core,javax.ws.rs.e
 xt,org.glassfish.jersey,org.glassfish.jersey.client.spi,org.glassfish
 .jersey.internal,org.glassfish.jersey.internal.inject,org.glassfish.j
 ersey.internal.util,org.glassfish.jersey.internal.util.collection,org
 .glassfish.jersey.message,org.glassfish.jersey.message.internal,org.g
 lassfish.jersey.spi";version="2.26.0",org.glassfish.jersey.client.aut
 hentication;uses:="javax.ws.rs,javax.ws.rs.client,javax.ws.rs.core";v
 ersion="2.26.0",org.glassfish.jersey.client.filter;uses:="javax.ws.rs
 .client,javax.ws.rs.core";version="2.26.0",org.glassfish.jersey.clien
 t.spi;uses:="javax.net.ssl,javax.ws.rs.client,javax.ws.rs.core,org.gl
 assfish.jersey.client,org.glassfish.jersey.process";version="2.26.0"
Import-Package: javax.annotation;version="[1.2,2)",javax.inject;versio
 n="[1.0,2)",javax.net.ssl,javax.ws.rs;version="[2.1,3)",javax.ws.rs.c
 lient;version="[2.1,3)",javax.ws.rs.core;version="[2.1,3)",javax.ws.r
 s.ext;version="[2.1,3)",org.glassfish.jersey;version="[2.26,3)",org.g
 lassfish.jersey.client.spi,org.glassfish.jersey.internal;version="[2.
 26,3)",org.glassfish.jersey.internal.guava;version="[2.26,3)",org.gla
 ssfish.jersey.internal.inject;version="[2.26,3)",org.glassfish.jersey
 .internal.l10n;version="[2.26,3)",org.glassfish.jersey.internal.spi;v
 ersion="[2.26,3)",org.glassfish.jersey.internal.util;version="[2.26,3
 )",org.glassfish.jersey.internal.util.collection;version="[2.26,3)",o
 rg.glassfish.jersey.message;version="[2.26,3)",org.glassfish.jersey.m
 essage.internal;version="[2.26,3)",org.glassfish.jersey.model.interna
 l;version="[2.26,3)",org.glassfish.jersey.process;version="[2.26,3)",
 org.glassfish.jersey.process.internal;version="[2.26,3)",org.glassfis
 h.jersey.spi;version="[2.26,3)",org.glassfish.jersey.uri;version="[2.
 26,3)"
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-3.2.0.201605172007

使用“现有 JAR 文件中的插件”向导是否是将此依赖项添加到 RCP 项目的正确方法,或者如果它已经是 OSGi bundle ,是否应该使用不同的方法?

最佳答案

来自现有 JAR 文件的插件向导旨在从未打包为 OSGi bundle 的普通 JAR 创建 bundle ,包括 OSGi 元数据。

因此,就您的情况而言,您可以按原样使用jersey-client.jar

通常,更有趣的问题是在哪里配置 bundle ,以便可以从 RCP 应用程序轻松使用它。如果您使用目标平台定义和/或 Tycho 进行 CI 构建,您可能希望能够从 p2 存储库获取 bundle 。

p2-maven-plugin可能有助于为 Jersey bundle 和可能的其他依赖项创建 p2 存储库。

Eclipse Orbit项目提供了一个 p2 存储库,其中包含其他 Eclipse 项目常用的 bundle 。目录中还列出了 Jersey 客户端。也许这个已经适合您的需求。

关于java - 如何将 OSGI 包添加到 Eclipse RCP 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49574208/

相关文章:

java - 使用 Visual Studio Code 远程扩展运行 JavaFX

java - 通知不会打开 Activity

java - Google App Engine 实体集合属性的限制

java - 如何在组合框中添加删除按钮

OSGI Felix 不导出 src/main/resource 文件

java - 使用 maven tycho 构建 list 条目 Bundle-ClassPath,该 list 条目由 maven-dependency-plugin 下载

eclipse - Eclipse 中带有 JavaDoc 的 Java 反编译器插件

eclipse - Apache Derby Eclipse 插件去了哪里?

android - 屏幕截图错误 (Android)

osgi - 如何在 AEM 中跨多个 OSGI 服务共享配置