OSGI开发方面国内的书籍太贫乏,据说唯一的一本中文书是《OSGI》原理与最佳实践,看了过后的印象是,篇幅只有一半是实践,且停留在比较高的层次,讲得内容很好,但方式方法不是很实用。
最近看到一本英文书ModularJava,印象极佳,读后给组内同事做了一个培训,效果也不错,在此把阅读过程中的笔记分享在这里,希望对国内开发OSGI的朋友有帮助。
转载请引用出处: http://goowie.iteye.com/blog/645569
1.创建项目
pax命令参考 P52
pax-update更新版本
pax-create-project -g com.umpay -a ice -v 1.0.0-SNAPSHOT
pax-provision进行环境准备
修改/pom.xml ch3 P56
2.ch4 p60建立domain bundle
pax-create-bundle -p com.umpay.ice.domain -n com.umpay.ice.domain -g com.umpay -v 1.0.0-SNAPSHOT
pom.xml父子关系
osgi.bnd bnd工具用于自动产生bundle manifests
http://www.aqute.biz/Code/Bnd
3.mvn install产生eclipse project文件及target目录
4.编辑jarFile源码,mvn install编译
给domain的pom增加依赖:compass
<dependency>
<groupId>org.compass-project</groupId>
<artifactId>compass</artifactId>
<version>2.1.1</version>
</dependency>
在根运行pax-add-repository -i compass -u http://repo.compass-project.org
增加仓库
或直接编辑pom
<repository>
<id>compass-project.org</id>
<name>Compass</name>
<url>http://repo.compass-project.org</url>
</repository>
编译通过
根,运行pax-provision
试图启动domain
start 1
bundle 4 无export
第三方jar包的两种使用方式
##########################ice1.rar
1)embed jar方式
domain% pax-embed-jar -g org.compass-project -a compass -v 2.1.1
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Project already has a <dependency> which matches, use -Doverwrite or -o t
o replace it
domain% pax-embed-jar -g org.compass-project -a compass -v 2.1.1 -o
embed jar实际上做了两件事:
1. Embed-Dependency entry to osgi.bnd
Embed-Dependency: compass;groupId=org.compass-project;inline=false
2. 增加<dependency>到pom(fatal error的原因)
build的时候才产生
build/provision
遇到间接依赖的问题
Pax Construct instructs BND to generate a manifest that imports every package needed by a bundle (and, in this case, by any
libraries embedded within a bundle). That’s why Equinox couldn’t start the domain bundle—the embedded Compass library was demanding
packages that aren’t being provided by other bundles.
dwmj/domain/osgi-embedded.bnd
Import-Package: *;resolution:=optional
成功
2)embed的问题:
其他bundle也要引用compass,除非domain bundle export compass的package
引起奇怪的依赖
如果更新compass的版本,就需要替换domain
结论:embed compass牺牲了模块化特性的一部分
3)另外一种方法:wrap P75
依赖--embed(compas jar被包含到domain)--再把compass做成bundle
ice% pax-wrap-jar -g org.compass-project -a compass -v 2.1.1
建立新的compass bundle
provision,再次遇到间接依赖问题
compass的osgi.bnd中增加
Import-Package: *;resolution:=optional
5.建立提供service的bundle index
pax-create-bundle -n com.umpay.ice.index -p com.umpay.ice.index -g com.umpay -v 1.0.0-SNAPSHOT
在index bundle项目复制修改代码
增加依赖
index% pax-import-bundle -g com.umpay.ice -a org.compass-project.compass -v 2.1.1-001-SNAPSHOT
index% pax-import-bundle -g com.umpay -a domain -v 1.0.0-SNAPSHOT
domain,index的groupid最好也用com.umpay.ice
增加activator类,然后
修改index/osgi.bnd
Bundle-Activator: dwmj.index.internal.IndexServiceActivator
增加pax logging支持
ice% pax-import-bundle -g org.ops4j.pax.logging -a pax-logging-api -v 1.3.0
ice% pax-import-bundle -g org.ops4j.pax.logging -a pax-logging-service -v 1.3.0
compass% pax-embed-jar -g org.apache.lucene -a lucene-core -v 2.4.0
pax-logging-service一直是install状态,待查
测试osgibundle
pax-exam
mkdir -p bundle-tests/src/test/java
pom里面的groupID和artifactID必须和项目pom声明的一致
测试用例源码里面配置的部分也必须和项目pom声明保持一致
测试用例源码里面查找和添加的部分也必须互相保持一致
p100
3-1 结束
分享到:
相关推荐
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
spring-osgi-1.2.0-rc1-with-dependencies.zip
spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip
基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip 基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip 基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip 基于java的开发源码-OSGi 分布式通讯组件 R-OSGi.zip ...
spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip
OSGi开发文档和实践指南,描述了OSGI的开发流程
osgi最新jar包org.osgi.core-4.2.0
spring-osgi-1.2.1-with-dependencies完整包
OSGi and Equinox:Creating Highly Modular Java Systems
maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar
Felix_OSGi实作,介绍最流行的OSGI framwork-Felix的好文档
jar包,亲测可用
When the OSGi Alliance started in 1998, the focus was in residential gateways the organization's name contained the word gateway before it was changed to the OSGi Alliance. Since that time, OSGi ...
maven-easybeans-osgi-2.0.0-rc1-sources.jar
maven-osgi-plugin-launcher-core-1.0.12.jar
maven-osgi-plugin-launcher-api-1.0.31.jar