maven打包osgi

今天想用maven想动态打osgi包,即若指定DynamicImport-Package,Export-Package或Bundle-Activator等bundle的元素,自动检测打进MANIFEST.MF

首先遇到的第一个头痛问题是,DynamicImport-Package没有指定其为空时,它会无缘无故把动态包javax.microedition.io给引进bundle,导致bundle找不到这依赖起不来,弄了好久才知道原来这包是在org.eclipse.osgi.services jar包中,并且是动态包,看maven-bundle-plugin源码,它代码中默认Import-Package为“*”,这样动态依赖的包也会引进来,再看看打包插件导入原码,分析如果给个空值它即不会再引进去,果不其然

在pom的instructions和properties节点做如下声明搞掂:

<properties>

-----------------------

${lee.osgi.dynamic}

-----------------------

</properties>


<instructions>

----------------------------

<DynamicImport-Package>${lee.osgi.dynamic}</DynamicImport-Package>

----------------------------

</instructions>

第二个问题是bundle的activator ,在父pom.xml的properties和instructions添加${lee.osgi.activator}后,如果其它maven工程的pom不指定一个activator,打包的时候就会报错。

分析原因,原来在instructions添加activator后,若其值为空串,它就引入报错,因为不可能一个activator没有类名而是一个空串。加“-X”参数打包报如下错

The default package '.' is not permitted by the Import-Package syntax.  This can be caused by compile errors in Eclipse because Eclipse creates 

思考解决方案:可否如果activator为空串时MANIFEST.MF不构建Bundle-Activator,修改maven-bundle-plugin打包原码的BundlePlugin类,打包成功

   if ( null == value )
            {
            if (Constants.BUNDLE_ACTIVATOR.equals(key))
{
continue;
}

            value = "";
            }
            else
            {
                value = value.replaceAll( "\\p{Blank}*[\r\n]\\p{Blank}*", "" );
            }

第三个问题是自定义引入包时,如在instructions添加<Import-Package>${lee.osgi.import}</Import-Package>后无能再引入代码中所用到的包,分析可能是变量覆盖导致,修改maven-bundle-plugin打包插件原码BundlePlugin类如下,问题解决。

if ( null == value )
            {
            if (Constants.BUNDLE_ACTIVATOR.equals(key))
{
continue;
}
            value = "";
            }
            else
            {
            if (Analyzer.IMPORT_PACKAGE.equals(key))
{
            value = value + ",*";
}
                value = value.replaceAll( "\\p{Blank}*[\r\n]\\p{Blank}*", "" );
            }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值