传统 Eclipse 插件项目手动转换 JAR 为 OSGi Bundle :No available bundle exports package ‘javax.websocket‘

在Eclipse插件开发中,直接引入普通JAR会导致依赖解析失败(如No available bundle exports package ‘javax.websocket’)。核心原因是OSGi容器需要特殊的Bundle元数据。以下是经过实战验证的完整解决方案:

步骤 1:创建 Eclipse 插件项目

创建插件项目

​- 操作路径: File → New → Plug-in Project
​- 命名规范: 使用反向域名(如 org.apache.commons.io)
​- 取消激活器: 勾选 Generate an activator 的 ​取消

导入原始 JAR
  • 在项目中创建 /lib 目录
  • 拖放待转换的 JAR 文件(如 commons-io-2.14.0.jar)至 /lib
  • 右键 JAR → Build Path → Add to Build Path

步骤 2:配置 MANIFEST.MF

Bundle-ManifestVersion: 2
Bundle-SymbolicName: {Bundle唯一标识,如 org.apache.commons.io}  
Bundle-Version: x.y.z.qualifier  # 四段式版本(例:2.14.0.20230701)
Bundle-ClassPath: lib/{原始JAR文件名}  # 例:lib/commons-io-2.14.0.jar
Export-Package: 
  {需暴露的包};version="{版本号}",  # 例:org.apache.commons.io;version="2.14.0"
Import-Package: 
  *;resolution:=optional  # 声明可选依赖(如非必要包)
Bundle-RequiredExecutionEnvironment: JavaSE-17  # 指定最低JDK版本
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Apache Commons IO
Bundle-SymbolicName: org.apache.commons.io
Bundle-Version: 2.14.0.20230701
Bundle-ClassPath: lib/commons-io-2.14.0.jar
Export-Package: 
  org.apache.commons.io;version="2.14.0",
  org.apache.commons.io.file;version="2.14.0",
  org.apache.commons.io.input;version="2.14.0"
Import-Package: 
  org.osgi.framework;version="[1.8,2)",
  javax.servlet;resolution:=optional
Bundle-RequiredExecutionEnvironment: JavaSE-17

步骤 3:配置构建属性(build.properties)​

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               lib/commons-io-2.14.0.jar

步骤 4:导出 OSGi Bundle

生成插件
  • 右键项目 → Export → Plug-in Development → Deployable plug-ins
  • 输出目录:/target/plugins
  • 生成文件:org.apache.commons.io_2.14.0.20230701.jar
​验证 Bundle 结构
unzip -l org.apache.commons.io_2.14.0.20230701.jar
# 确认包含:
# META-INF/MANIFEST.MF
# lib/commons-io-2.14.0.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值