写点什么

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:084744
用户头像

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

关注

评论

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

迄今为止把Mybatis讲解的最详细的PDF,图文并茂,通俗易懂

Java你猿哥

Java 面试 mybatis ssm Mybatis框架

GitHub置顶半个月!78w字百亿级并发设计(全彩PDF)

Java 架构 系统设计 高并发

“阿里爸爸”最新产出:Java面试突击核心讲(1658页),转载40W+

Java你猿哥

Java 面试 面经 八股文 Java八股文

拓展测试领域,不要不断重复相同的测试

测吧(北京)科技有限公司

测试

阿里资深架构师整理出来的一份Java核心知识点分享给大家.pdf

Java你猿哥

Java 面试 面经 八股文 java八股文呢

多层嵌套 if-else 代码优化重构的几种方案

Java你猿哥

Java ssm Java工程师 if-else

想成为 Spring 大牛?先了解这 6 种添加 Bean 的方式

Java你猿哥

spring ssm Spring Bean

和ChatGPT pair整理的测试类型清单

BY林子

软件测试 测试类型 ChatGPT

如何针对重复问题创建测试矩阵

测吧(北京)科技有限公司

测试

人工智能实践: 基于T-S 模型的模糊推理

TiAmo

模糊推理 TS模型

关于测试是否通过的基于评估的测试手段

测吧(北京)科技有限公司

测试

SpringCloud 微信小程序 获取用户信息一键登录

Java你猿哥

Java 小程序 spring ssm spring chloud

龙蜥白皮书精选:CentOS 迁移场景的平滑迁移方案

OpenAnolis小助手

Linux 开源 操作系统 CentOS迁移 龙蜥白皮书

用工新趋势:“网讯电通+无影”让客服业务打破时空限制

云布道师

无影

关于测试内容的基于覆盖率的测试手段

测吧(北京)科技有限公司

测试

软件测试报告设计错误

测吧(北京)科技有限公司

测试

大厂在混沌工程领域的实践

老张

混沌工程 稳定性保障

吃透阿里2023版Java性能优化小册后,我让公司系统性能提升了200%

三十而立

Java 程序员 IT 面试资料

浅谈 Spring Bean 的生命周期

Java spring 生命周期 bean

OPPO大数据诊断平台“罗盘”正式开源

安第斯智能云

大数据 开源

基于Label studio实现UIE信息抽取智能标注方案,提升标注效率!

汀丶人工智能

人工智能 自然语言处理 信息抽取 labelstudio 智能标注

真香!阿里最新出品Java面试核心讲(终极版),Github已星标50K

三十而立

Java IT java面试 面试资料

GitHub爆火疯传“Java面试手册2023”还原面试现场,通过率90%

三十而立

Java 程序员 IT java面试 大厂面试

面试必问:说一下 Java 虚拟机的内存布局?

Java JVM 虚拟机

KaiwuDB 亮相中国石油石化企业信息技术交流大会

KaiwuDB

数字能源 KaiwuDB 数据解决方案

浅谈 Spring Bean 的生命周期

Java你猿哥

Java spring ssm Spring Bean

关注测试原因(针对风险测试)的基于问题的测试手段

测吧(北京)科技有限公司

测试

硬核!阿里出品2023版Java架构师面试指南,涵盖Java所有核心技能

三十而立

Java IT java面试 面试资料

阿里为双十一整理的JVM性能优化文档,竟被GitHub“抢开”

Java 性能优化 JVM 性能调优

JAVA多线程并发编程-避坑指南

京东科技开发者

并发编程 线程 多线程并发 编码规范 企业号 4 月 PK 榜

架构师日记-为什么数据一致性那么难

京东科技开发者

数据库 MQ 分布式系统 数据一致性 企业号 4 月 PK 榜

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