写点什么

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

2011 年 12 月 02 日

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

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

关注

评论

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

ARTS打卡-01

Geek_yansheng25

ARTS 打卡计划

10分钟白嫖我的常用的在线工具网站清单

Guide哥

设计 在线工具 工具类网站 PDF

Java 底层基础笔记(一)硬件

奈何花开

Java Linux 计算机基础

恭喜你,赢得了爱情长跑的胜利

小天同学

爱情 兄弟 祝福

如何优雅地实现泛型类的类型参数化

KAMI

Java 编程 反射 泛型

Wireshark的使用与数据分析(一)

姬翔

ARTS-week-1

youngitachi

ARTS 打卡计划 arts

python实现·十大排序算法之桶排序(Bucket Sort)

南风以南

Python 排序算法 桶排序

k6新崛起的性能测试工具

IT民工仁兄

DevOps 性能 性能测试

2020南京第十三届智慧工地装备展览会

南京专业智博会

展览会 论坛会 博览会 智博会

SpringBoot之多模块开发

北漂码农有话说

设计模式:建造者设计模式

毛佳伟🐳

2020年5月30日 泛型程序设计

瑞克与莫迪

你真的清楚 Nginx 指令的规则吗?

子杨

nginx 运维

原创 面试官:你说对MySQL事务很熟?那我问你10个问题

柠檬橙

MySQL 数据库

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试

编程道与术

Java 编程 TDD 单元测试 JUnit

【CSS】为什么a标签的伪类选择器要注意书写顺序?

学习委员

CSS html css3 前端 Web

不忘初心,继续努力

一周思进

ARTS 打卡计划

2020年亚洲南京大数据产业展览会

南京专业智博会

展览会 论坛会 博览会 智博会

2020亚洲智能家居全屋智能展会-南京站

南京专业智博会

展览会 论坛会 博览会 智博会

这可能是 Markdown 写微信公众号的一款神器了!

JackTian

效率工具 markdown markdown编辑器 markdownnice 神器

使用 PCA 进行降维可视化,了解特征分布

黄大路

数据挖掘 数据分析 可视化

面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!

柠檬橙

微服务 后台开发 架构设计

2020年南京第十三届物联网应用展览会

南京专业智博会

展览会 论坛会 博览会 智博会

Jupyter最佳实践

pydata

分布式锁🔒是个啥❓ 其实就这么点事

山中兰花草

Java redis 后端 分布式锁 开发

如何衡量产品需求效果

黄大路

产品经理 产品设计 运营

Markdown 几行字符就可以生成思维导图了!

JackTian

markdown 思维导图 markdown语法 markdown编辑器 Markmap

2020亚洲南京第十三届人工智能机器人服务展览会

南京专业智博会

展览会 论坛会 博览会 智博会

2020年南京第十三届智慧停车展会

南京专业智博会

展览会 博览会 智博会 展览会论坛会

PageHelper

BitSea

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