首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将jar包含到OSGi包中的问题

将jar包含到OSGi包中的问题
EN

Stack Overflow用户
提问于 2016-04-26 09:40:47
回答 1查看 2.1K关注 0票数 3

我有一个gradle脚本(编辑的剪切):

代码语言:javascript
复制
apply plugin:'osgi'
apply plugin:'eclipse'
apply plugin:'groovy'

....

dependencies {
  ....
  compile 'org.codehaus.groovy:groovy-all:2.4.4'
  compile 'com.gmongo:gmongo:1.5'
}

jar {
  manifest {
      ....
      instruction 'Embed-Dependency', '*;scope=compile|runtime'
      instruction 'Embed-Transitive', 'true'
      instruction 'Bundle-ClassPath', '.,gmongo-1.5.jar'
  }

  from {
    configurations.compile.findAll{ !it.directory && it.name.startsWith( 'gmongo' ) }
  }
}

一旦gmongo没有提供适当的包清单,我就必须将它作为依赖项来包含。

由此产生的jar结构是:

代码语言:javascript
复制
/
|..com/
|..META-INF/
|..gmongo-1.5.jar 

MANIFEST.INF:

代码语言:javascript
复制
    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bnd-LastModified: 1461227335334
    Bundle-ActivationPolicy: lazy
    Embed-Dependency: *;scope=compile|runtime
    Import-Package: com.gmongo,com.mongodb;version="[3.2,4)",groovy.lang;v
     ersion="[2.4,3)",....."
    Tool: Bnd-2.1.0.20130426-122213
    Export-Package: com.mozaiq.echo;version="1.0.0";uses:="com.gmongo,groo
     vy.lang,javax.servlet,javax.servlet.http,org.osgi.framework"
    Bundle-ClassPath: .,gmongo-1.5.jar
    Embed-Transitive: true
    Created-By: 1.8.0_72 (Oracle Corporation)

在安装的时候

当尝试解析包110910406.jar.jar.20160426-110910406.jar时,出现了0错误>错误! org.osgi.framework.BundleException:无法解决groovyecho : package com.gmongo

我做错了什么?

更新:

即使我打开了gmongo.jar的类:

代码语言:javascript
复制
jar {
  ....
  from {
    zipTree configurations.compile.find{ !it.directory && it.name.startsWith( 'gmongo' ) }
  }
}

我也会犯同样的错误。

摘要:

代码语言:javascript
复制
instruction 'Import-Package', '!com.gmongo,*'

为类文件工作得很好。

要使它在原始jar文件上工作,我还必须添加

代码语言:javascript
复制
instruction 'Bundle-ClassPath', '.,gmongo-1.5.jar'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 14:04:03

清单上说com.gmongo必须是进口的。我怀疑Bundle-Classpath中的jar没有被分析以看到它包含这个包。因此,您需要指定包不需要从嵌入的jar中导入任何所需的包。

Import-Package: !com.gmongo,*

但是,考虑到您将使用com.mozaiq.echo的签名中使用com.gmongo的导出包捆绑在一起,您可能应该导出该包,而不是停止导入。

-exportcontents: com.gmongo

顺便说一句,我不认为Embed-指令对使用bnd的Gradle OSGi插件有任何意义。您可以看到它们只是被复制到生成的清单中。它们是bundle-plugin为Maven所特有的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36861069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档