参考:mosmith的osgi笔记博客,网址:http://www.cnblogs.com/mosmith/p/5465489.html
bnd.bnd文件值如下:
Bundle-Name: tagTest
Bundle-SymbolicName: com.liferay.map.taglib
Bundle-Version: 1.1.3
Export-Package: com.liferay.map.taglib.servlet.taglib
Provide-Capability:\
osgi.extender;\
osgi.extender="jsp.taglib";\
uri="http://liferay.com/tld/map";\
version:Version="${Bundle-Version}"
Web-ContextPath: /map-taglib
1 Bundle-SymbolicName和Bundle-Version
Bundle-SymbolicName和Bundle-Version用于唯一标识一个Bundle,在Require-Bundle中被使用,大多数情况下,osgi还是在使用package作为import的标识的。
如:
Bundle-SymbolicName: com.liferay.map.taglib
Bundle-Version: 1.1.3
会产生:com.liferay.map.taglib-1.1.3.jar的jar包
2 Export-Package用于暴露bundle内部的类,多个包名之间用逗号隔开","同时,包名可以用";"隔开并加上限定的Attribute,
Export-Package: org.foo.shape; vendor="Manning", org.foo.other;
是内部向外部暴露的内部类
3 Import-Package用于导入在运行时bundle所依赖的类。但java.*开头的类比较特殊,它自动地对所有的bundle都是可见的,因此我们不需要也无法插手这一点。
Import-Package: org.osgi.framework; version="[1.3.0,2.0.0)"
4 Mandatory directive用于指定Export-Package中,Import-Package在进行bundle 匹配的时候必须进行匹配的属性,如果属性不存在或者匹配不上,那么将不会import 这个package。比如下面的例子:
Export-Package: javax.servlet; version="2.4.1"; private="true"; mandatory:="private"
那么在Import-Package的时候必须指定这个private属性才能import成功:
Import-Package: javax.servlet; version="[2.4.0,2.5.0)"; private=true
Exclude Directive用于从Export-Package中过滤掉(屏蔽)一些类,如下,org.foo.service.Util将不会被导出,Exclude Directive支持通配符*:
Export-Package: org.foo.service; version="1.0.0"; exclude:="Util"
同样Include Directive用于指定Export-Package中进行导出的类:
Export-Package: org.foo.service; version="1.0.0"; include:="Service*"
5 gradle下cmd运行
eclipse新建项目后,可以在cmd下运行,打开cmd,cd到目录,之后输入gradle clean或者gradle deploy即可。
6 模块项目部署
liferay7下liferay module project,的部署,如果是gradle项目,直接eclipse 下项目右面build-deploy即可。如果是maven项目,直接项目右键,maven install即可,之后把项目生成的jar包放到服务器的deploy下面即可。