- 浏览: 1169482 次
- 性别:
- 来自: 火星郊区
-
博客专栏
-
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
为什么我们需要Bnd?
刚收到一个Google提醒,是关于一篇谈论OSGi的博客文章。文章作者Jilles van Gurp开篇便称赞OSGi,但随之抨击OSGi的一些工具。他不能忍受的关键,在于需要把包的导入一行一行的加到manifest,他还认为manifest的格式很糟糕。
我不同意他的看法,因为Bnd完全可以满足他提到的需求。
“管理bundle之间的依赖比简单的import要难得多。以前我想要用某个库,
我就下载下来放在classpath里,在代码里敲一些首字母,用ctrl+space就可以知道他里面的API。但在OSGi里就比较麻烦了,你把
bundle下载下来(假如网上有的话),还要判断它里面暴露了哪些包,然后才能决定究竟使用哪些包。
”
我赞同Eclipse
JDT是比PDE功能更加强大,更加好用。但如果用bnd工具,你就可以像你刚才描述的那样工作。你可以像以前一样使用库,你甚至不需要使用PDE,比如
我就只用Eclipse
JDT来完成工作。Bnd会读取配置文件里的描述来决定classpath的哪些内容会被打到bundle里。通配符和默认值使得这个描述尽可能的短。然
后Bnd会计算需要导入的包和其它一些相关信息。
“大部分库不是以bundle的形式发布的。bundle是一个新的概念,他不能向
后兼容以前的jar包(而这是很多第三方提供库的主要形式)。我认为这是一个没必要的限制,他们更应该默认的把jar看成导出所有包而且引用所有依赖包的
bundle。从jar里取到这些信息应该是不难的,至少应该提供一个工具给我们做转换之用吧
”
跟上面说的一样,通过使用Bnd,你的这些要求也可以得到满足。Bnd有一个封装功能就是做这个转换。但实际上很多jar文件的依赖关系都很糟糕,所以这
个转换也不是那么轻松。我们经常需要加入可选的导入或者忽略导入来使得bundle能够被安装到系统中。当你分析一个JAR文件时(Bnd就可以完成这个
功能),你经常会发现里面有大量没用到(或很少用到)的依赖。
“最后,我很讨厌要写这样一个格式糟糕的属性文件(manifest),我发现需要在manifest后加上一个空行的bug仍然存在(如果少了这个会出莫名其妙的错误)。这个就像makefile里必须用tab而不能用空格一样令人烦恼
”
嗯,这个确实有点烦,但是通过使用Bnd,你也不用再担心这些小事。一个bnd文件就是一个属性文件,而且不管你文件中的一行需要多长,它都能够处 理。行可以通过“”来延续到下一行,谁会在乎多出的最后一个空行呢?你还可以在文件中添加注释。Bnd读取这些属性,通过Java内嵌的 Manifest类生成一个规范的manifest。在读取过程中Bnd会检查属性头是否正确。我们随便看一个Bnd的例子,它可能像这样:
Export-Package: aQute.service.*
Import-Package: javax.servlet.http;version="[2,3)", *
然而,Jilles的抱怨还没结束,他又对OSGi有意见了:
“当然我们有一个更好的方式来做这个,就是使用Java5.0里刚引入的
annotations。可以理解OSGi需要兼容老的版本(使得拙劣的设计也有台阶下),但很明显我们应该更注重对新版本的应用,抛弃陈旧的方式。实际
上,对于导入和导出包来说,我更希望能把粒度细化到类和方法的层面上
”
Annotations现在比较流行了,他们在自己的领域发挥的很好。但这应该是一个分离关注点的问题。我想我们都知道要分离业务逻辑和底层架构。在类或
方法里加入annotations来定义约束显然会搞乱你的代码。我也认为让用户自己管理依赖挺复杂。我们需要更好的工具支持,让用户手动管理代码里的依
赖很容易错误百出。所以我不确定annotations能解决问题。通过在代码里定义版本号(编辑manifest或包目录下的
packageinfo文件),Bnd可以找出引用的包版本。这种方式简单一致,尽管它不能处理版本范围。我大概知道要怎么做可以处理版本范围(在
classpath里允许同一个包有多个版本,然后比较版本之间的差异),但是,这需要时间。。。
“还有一个问题,在java中包没有它们自己单独的表达方式。它们只是在类的包声明里被提到,但没有自己的独立表述。这意味着很难针对包添加annotation(不过你可以通过package-info.java来达到这个效果)。
”
仍旧像刚才说的那样,我不确定annotations是不是最佳方案,因为它会把业务逻辑的代码搞得很乱。在OSGi中,你可以通过manifest(或者Bnd)来定义包的属性。
此外,Bnd还有很多其它特点,比如说下面这些:
* Bnd还被用在Maven构建工具的Felix Maven-bundle插件中。
* Bnd还是一个Eclipse插件,它在.bnd和.jar文件的右键菜单中添加了执行项。
* 可以集成来自任何地方的资源,无论是通过文件系统还是URL。不需要首先为这些资源找一个文件夹来放置,因为JAR文件的构建是实时进行的。
* 资源名称中可以包含变量,这些变量在构建时会被自动替换成实际值。
* 通过在classpath中定义包引用,可以很容易地把这些包集成到jar中。如果你只是想依赖另一个bundle的某一部分,而不想产生额外的依赖,这样做是很方便的。
* Bnd也可以在导出时生成uses语句。uses语句用来表述当前包要用到的所有包。框架将会用这些信息来创建一致的类空间。
* 可以内联其他Jar文件或目录。
* 还有很多很多。。。
我不是说Bnd已经完美了。我希望能多花点时间来扩展它,让它看着就像这样:一个管理依赖的图形编辑器,有着更好的语法支持,与Eclipse构建器集成得更好,等等。
Peter Kriens
(译完)
发表评论
-
关于Felix Log Service
2012-12-07 16:44 1610OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 20754.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2546摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1443随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGi技术在Java Web开发中的应用
2012-09-20 11:26 1438随着 Java SE 对模块化功能原生支持的一再推迟(据最 ... -
OSGI典型的应用案例
2012-09-20 11:26 1658OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12701、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1088不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1260registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1389在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1329osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1203软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3575将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1358Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11751、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1451Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 13541、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1230一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1190当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1607OSGi Core定义了一个服务层,提供了一个Bundl ...
相关推荐
功能码的查看和修改通常需要遵循特定的操作步骤。 4.3 上电初始化 首次接通电源时,变频器将进行自我检测和初始化,确保所有内部参数设置正确。在此过程中,观察显示屏上的指示,确认无异常。 4.4 故障保护 当变频...
这款名为"BND2"的软件,以其独特的功能——“不限速下载”,为Mac用户带来了全新的下载体验。 首先,我们需要理解“不限速下载”这一概念。通常,当我们通过浏览器或普通下载工具下载文件时,下载速度会受到网络...
用户获取到这个名为“bnd1”的文件后,通常需要解压缩并执行安装或运行程序来启动软件。虽然具体操作细节未详细说明,但一般这类工具的安装使用过程都是相对简单的,适合大多数电脑用户。 使用该下载神器时,其操作...
结合以上信息,我们可以推测BND1是一个专门针对百度网盘设计的第三方下载管理器,其主要目标是提高从该平台下载文件的效率。 在压缩包内只有一个文件名"bnd1",这很可能是BND1软件的主程序或安装程序。用户解压后,...
标题"BND2-v2.0.0.zip"指的是一个名为"BND2"的软件的版本2.0.0的压缩包文件,后缀为".zip",表明这是一款使用ZIP格式压缩的文件集合。这种类型的文件通常包含了多个相关联的文件或程序,便于用户一次性下载并解压...
MIYANO BND-51YS2支持G代码编程,用户需要掌握基本的编程语句,如直线插补、圆弧插补、螺纹切削等,以及如何使用宏程序进行复杂形状的加工。同时,设备还可能配备有自动换刀系统,需要了解其工作原理和换刀指令。 ...
BND2 是一款图形界面的百度不限速下载器,支持 64 位 Windows 和 Mac
Jar转换为Bundle工具
"BND2-v2.0.zip" 是一个压缩文件,其中包含了"BND2"软件的第二个主要版本,版本号为2.0。这个名称表明这是一款经过升级和改进的产品,可能修复了旧版本的问题,并添加了新的功能。 **描述分析:** 该描述指出,...
在提供的压缩包子文件“BND2-v2.0.0-windows.exe”中,我们可以看出这是BND2的Windows平台安装程序。这意味着该工具支持在Windows操作系统上运行,用户只需执行这个.exe文件,按照安装向导的指示,即可完成BND2的...
传统的打包方式是先复制需要打包的文件到一个目录中,然后再进行打包,而Bnd则是直接根据classpath来组装需要打包的javaclasses和packages,从而避免了不必要的文件复制操作。 3. 主要参数: Bnd工具在生成jar时,...
为了解决这一问题,出现了名为BND的第三方下载工具,它支持Mac、Windows和Linux三大操作系统,旨在提供不受限的下载速度,极大地提高了用户在使用百度网盘时的效率。 BND,全称为“Baidu NetDisk Download”,是一...
加快下载速度呢能够有限提高百度云下载速度,同时含有下载方法
Bnd_SD.shx
离线安装包,亲测可用
bnd, bnd,用于OSGi的瑞士军刀 构建OSGi包的工具 自述文件bnd是针对OSGi的军刀,它基于分析类代码,验证设置,验证你的设置,并对项目的依赖关系进行验证,并提供了相应的日期和时间。关于bnd的信息可以在 ...
百度云下载工具,百度云速度破解工具
为了解决这一问题,出现了各种第三方下载工具,其中之一便是我们今天要探讨的"BND2-v2.0.0-windows"。这个压缩包文件包含了专为Windows系统设计的百度网盘不限速下载器,旨在提供更加流畅的下载体验。 首先,我们...
【标题】"Go-BND:基于Golang的百度网盘高速下载工具" 【知识点详解】 在互联网上,百度网盘因其大容量存储和分享功能而广受欢迎。...同时,通过开源社区的合作与迭代,Go-BND持续优化,为用户提供更好的服务。
这个工具可能是bnd工具的一部分,因为压缩包中包含了名为“bnd-2.1.0.jar”的文件。 bnd是OSGI开发的一个强大工具,它提供了一整套用于构建、管理和打包OSGI应用的解决方案。bnd不仅可以帮助开发者创建和管理bundle...