QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

BndTools 为在 Eclipse 中进行 OSGi 开发提供支持

  • 2011-12-02
  • 本文字数:2617 字

    阅读完需:约 9 分钟

Neil Bartlett 最近发布了 BndTools 1.0.0 ,它是为 Eclipse 所用的 OSGi 开发环境。这个工具通过其github 代码库提供了源代码,你也可以从 Eclipse Marketplace 直接把它安装到 Eclipse 运行时中。

BndTools 为我们提供了一种使用 Eclipse 开发 OSGi bundles 的方式。它没有通过直接编辑Manifest.MF的方式定义依赖关系,而是使用 Bnd 文件基于 Bnd 工具驱动工具链(toolchain)。它还提供了介绍性的教程。此外,BndTools 还具有自动化语义版本控制功能(automated semantic versioning),它会将已构建的组件和之前发布的组件相比较,让算法来决定是否对大、中、小三种版本号进行升级,而不是让用户人为决定。

InfoQ 抓住了和 Neil Bartlett 会面的机会,询问他为何要创建 BndTools:

Neil Bartlett:我曾经做过很多 OSGi 的培训,发现 OSGi 开发工具总是存在一个问题,那就是过于笨重,初学者很难理解和使用。由于我具备一些开发 Eclipse plug-in 的经验,所以就开始构建一些小工具,让我和学生们的工作更轻松。随着时间的推移,这些工具成为比较完整的、集成的 OSGi 开发环境。

现在我会使用 BndTools 来完成所有的 OSGi 开发,并且,由于 Eclipse plug-in 本身也基于 OSGi,所以我甚至使用 BndTools 来完成它自身的开发。

InfoQ:它与 Bnd 有什么关系呢?

Neil Bartlett:对于构建和分析 OSGi bundle 来说,Bnd 是一种极为强大的底层工具。它是由 Peter Kriens (OSGi 联盟的技术总监)开发的,OSGi 联盟使用它来构建自己的 API 套件、兼容性测试以及引用实现的 bundle。作为一种底层工具,它很容易继承,并且可以直接从命令行调用,可以被 ANT 任务所使用,也可以嵌入到 Maven 和 IDE 中。

BndTools 使用 bnd 作为它的“引擎”。所有主要功能都是 bnd 本身提供的,而 BndTools 只是描述什么时候应该调用 bnd,并以更好的形式来展现结果。由于很多其它工具也集成了 bnd,所以 bnd 所使用的描述文件几乎已经成为一种事实上的标准,这意味着 BndTools 开发者很容易与使用其它工具的开发者协作,也可以在选择其它工具的时候很容易地完成迁移。

InfoQ:BndTools 与 Eclipse 的 PDE 相比怎么样?

Neil Bartlett:Eclipse PDE 是另一种基于 Eclipse 的 OSGi 开发环境。BndTools 没有以任何方式重用 PDE,但是 BndTools 和 PDE 都是基于 Eclipse 的 Java 开发工具集(JDT)构建的。

PDE 所遵循的开发哲学和 bnd 以及 BndTools 不同,它被称之为“manifest 优先(manifest first)”。在 PDE 中, 你需要直接编辑 MANIFEST.MF 文件,它会直接集成到 bundle 中,而不需要任何后续处理。我们的开发哲学是,MANIFEST.MF 应该当作编译器输出来对待:也就是说,应该使用更简单的源代码来生成这个文件。这非常重要,因为完整的 MANIFEST.MF 文件中会包含很多重复的信息,或者应该直接从 Java 代码中继承的信息,比方说包一级的依赖关系列表。手动编辑这样的信息是个苦力活,而且容易出错。

InfoQ:在 JRebel 和基本的 Java 项目之上使用 OSGi 有何优势?

Neil Bartlett:JRebel 是一种很强大的工具,它可以让我们在开发过程中更快地重新部署代码,但是不管是在运行时还是在构建时,它都没有提供任何一种模块系统(module system)。OSGi 通过封装和受约束的、明确的依赖关系强制指定了模块边界。OSGi 的目的就是要帮你改善应用程序的架构,创建出可重用的组件,而 JRebel 是要尽可能快地把你的代码从 IDE 中提取出来,然后部署到 Java EE 应用程序服务器中。

同时,OSGi 还具有模块动态热交换(dynamic hot-swapping)的特性,该特性已经足够有效,所以我认为开发 OSGi 程序的时候 JRebel 并不是特别有用。BndTools 对此也有帮助:当你保存了 Java 源文件的时候,代码就会重新编译、打包到 bundle 中,并且推送到正在运行的应用程序中。

InfoQ:BndTools 能够与其他构建环境——像 Maven 和 Ant/Ivy——集成吗?

Neil Bartlett:BndTools 的“本地”构建系统是 bnd 本身,它支持 Apache Ant 同时构建多个项目,这也是 OSGi 联盟构建他们的 1300 多个 bundle 的方式。Bnd 拥有插件化的库系统(pluggable repository system),这让我们可以使用任何一种后端的库技术,包括 Ivy。

对于 Maven 用户来说,最流行的 OSGi 开发方式就是使用 Maven Bundle Plugin,它是另一种集成了 bnd 的工具。BndTools 通过这个插件以及 M2Eclipse 与 Maven 集成。在这种情况下,M2Eclipse 会负责管理构建依赖关系(显然是在 POM 中),并负责实际上构建 bundle 的工作,而 BndTools 会提供编辑和分析 bundle 描述符以及依赖关系的方式,还提供了设置和执行运行配置(run configurations)的方式,这就是它的价值所在。

InfoQ:想要开始使用 BndTools,有没有教程可供使用?

Neil Bartlett:有的,你可以在 http://bndtools.org/doc/tutorials/ 找到。

InfoQ:你能使用 BndTools 编写 Java 源代码,而不需要在编码的时候依赖 OSGi 吗?

Neil Bartlett:可以,BndTools 希望你可以使用 OSGi 声明式服务以 POJO 样式编写组件,而不依赖于 OSGi。这样,这些组件就可以在 OSGi 之外进行单元测试,并在非 OSGi 的生产环境——像 Sprint 或 JavaEE——中使用。

你甚至还会发现 BndTools 具有配置模块和分析依赖关系的功能,即便你还没有做好部署到 OSGi 中的准备,它们对于提高代码的模块性很有帮助。例如,我们可以使用 PojoSR 提供类似于 OSGi 的服务注册,它会支持 OSGi 的大多数特性,只是不支持在 OSGi 中必须要使用的模块边界。这样它可以帮助你将遗留应用程序迁移到 OSGi,并且在 BndTools 中开发,这样你就能够看到应用程序还差多少才能够完全运行在完整的 OSGi 上。

InfoQ:Bnd 可能会支持其它 IDE 吗,像 IntelliJ 和 NetBeans。

Neil Bartlett:BndTools 本身与 Eclipse 联系非常紧密,不会支持其它 IDE。然而,其他 IDE 也开始整合 bnd,让它们更易于互操作。例如,IntelliJ 就有 Osmorc 项目,它会使用 bnd,并且在多种方式上与 BndTools 的开发哲学类似。我已经与 Osmorc 的首席开发者合作,让开发者能够更轻松地使用各种 IDE 来协同工作。

在我上次询问的时候,NetBeans 项目还没有计划直接支持 OSGi 的开发。但是,NetBeans 非常专注于 Maven,使用 NetBeans 的 OSGi 开发者通常会使用 Maven Bundle Plugin,之前我们也曾提到,它也是 BndTools 最初集成 Maven 的方式。

你可以使用 Eclipse Marketplace 来安装 BndTools。

查看英文原文: BndTools provides OSGi Development in Eclipse

2011-12-02 16:084437
用户头像

发布了 340 篇内容, 共 131.9 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

web技术分享| WebRTC 实现屏幕共享

anyRTC开发者

大前端 Web 音视频 WebRTC 屏幕共享

没有性能瓶颈的无限级菜单树应该这样设计

Tom弹架构

Java 架构 设计模式

数据库审计是什么意思?作用是什么?

行云管家

数据库 安全 IT运维 数据库审计

Node.js 17 新特征简介

devpoint

node.js Promise 11月日更

iOS开发-百度一面总结

iOSer

ios 面试 iOS面试 ios开发 百度面试

《个保法》施行 | App 隐私合规检测双十一尝鲜仅需99元

蚂蚁集团移动开发平台 mPaaS

隐私保护 移动开发 监管合规

时代赋机遇,双十一电商盛会神助攻——中科柏诚

联营汇聚

推荐学Java——初识数据库

逆锋起笔

Java MySQL 数据库 Java后端

华为云天筹AI求解器:智能世界是道迷人的数学题

脑极体

托管页前端异常监控与治理实战

百度Geek说

大前端

超全整理:程序员都在用什么工具?

华为云开发者联盟

程序员 技术 设计 编程语言 开发工具

论层次架构风格

lazytortoise

何时适合进行自动化测试?(下)

禅道项目管理

自动化测试

`MD`语法技巧Typora

sec01张云龙

11月日更 MD MD写法

【等保小知识】等保与分保的三大区别汇总分析

行云管家

网络安全 数据安全 等保 分保

2022第十五届北京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

快手微服务架构技术交流会

快手中学

微服务 云原生 稳定性

能让你从P6+学到P9也只有马士兵老师了,全套学习资源分享

Java架构追梦

Java 编程 架构 面试 马士兵

初入云计算行业,可以考取哪些云计算证书?

行云管家

云计算 腾讯云 阿里云 证书 IT运维

架构实战营模块七作业

Geek_d18264

架构实战营

linux 设置VPN

webrtc developer

Linux vpn

GitHub点击量破百万访问,不愧是被称阿里神作的JDK源码笔记

Sakura

Java 源码 架构 jdk 面试

学长带路学吉他,这几招足够了

懒得勤快

看企业如何玩转低代码,引发效率革命

行云创新

云原生 低代码 开发 直播 双十一

华为云·核心伙伴开发者训练营——产业云专场在东莞松山湖圆满落幕

华为云开发者联盟

华为云 鲁班会

RabbitMQ详解——服务端存储机制(二)

AiDaddy

RabbitMQ mnesia ETS

Vue进阶(幺陆肆):自定义指令之拖拽指令

No Silver Bullet

Vue 11月日更

腾讯安全姬生利:云原生环境下的“密码即服务”

腾讯安全云鼎实验室

云原生 加密

JAVA Annotation详解

平凡人生

RabbitMQ详解——RabbitMQ架构部署(四)

AiDaddy

RabbitMQ Mirror Queue Federation

《黑客之道》kali Linux之NMAP高级使用技巧和漏洞扫描发现

学神来啦

Linux 渗透 kali nmap

BndTools为在Eclipse中进行OSGi开发提供支持_Java_Alex Blewitt_InfoQ精选文章