首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用依赖的Jars使用Gradle创建Osgi束

用依赖的Jars使用Gradle创建Osgi束
EN

Stack Overflow用户
提问于 2012-10-28 16:29:57
回答 1查看 4K关注 0票数 5

我想创建一些依赖于其他(第三方) jars的包(这是否是一个好的实践是另一个主题)

我能够使用gradle生成一个胖jar (它有所有依赖的jar)和osgi清单。

我的项目布局在创建jar后的lib/文件夹中存储jar,第三方jar(例如ibm.jar)位于jar的根部。

我的分级任务是使用osgi插件和一些基本的osgi指令,我只手动指定导出包作为我的程序的包,而不是其他3个jars

但是,当我试图安装该包时,它会显示错误。

代码语言:javascript
运行
复制
Error starting file:****.jar (org.osgi.framework.BundleException: Unresol
ved constraint in bundle ***** [24]: Unable to resolve 24.0: missi
ng requirement [24.0] osgi.wiring.package; (osgi.wiring.package=com.ibm.mq))
org.osgi.framework.BundleException: Unresolved constraint in bundle **** [24]: Unable to resolve 24.0: missing requirement [24.0] osgi.wiring.package; (osgi.wiring.package=com.ibm.mq)
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:382
6)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)

        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStart
LevelImpl.java:295)
        at java.lang.Thread.run(Unknown Source)

Gradle

代码语言:javascript
运行
复制
task makeJar(type: Jar) {

from { 'libs/'}
manifest = osgiManifest {
        classesDir = sourceSets.main.output.classesDir
        classpath = sourceSets.main.runtimeClasspath
        instruction 'Export-Package','abc.def'  
        instruction 'Bundle-Vendor', 'ABC'
        instruction 'Bundle-Activator', 'abc.def.Activator'
        instruction 'Bundle-ClassPath', '.,*.jar'
        instruction 'Include-Resource', '@**/*.jar'
    }
}

我尝试了下面的方法,但是它行不通,似乎是gradle http://issues.gradle.org/browse/GRADLE-1107的一个问题。

代码语言:javascript
运行
复制
'Include-Resource', 'libs/'

我试着解释,把它们放在类路径中,但问题依然存在。

代码语言:javascript
运行
复制
Bundle-ClassPath: '.,*.jar' 

我可以看到我需要的包(com.ibm.mq)在Import中:对吗?

我的问题是:正确的清单应该是什么?gradle (基于BND)能够理解依赖关系并自动创建清单吗?如果是,那么所需的设置是什么?

编辑:使用像这样的gradle函数,我得到了相同的错误(我也检查了清单中出现的包类路径)

代码语言:javascript
运行
复制
instruction 'Bundle-ClassPath', """.,felix.jar,org.springframework.aop-3.0.5.RELEASE.jar,org.springframework.asm-3.0.5.RELEASE.jar,c3p0-0.9.1.2.jar,com.springsource.net.sf.cglib-2.2.0.jar,org.springframework.context-3.0.5.RELEASE.jar,org.springframework.transaction-3.0.5.RELEASE.jar,com.ibm.mqjms.jar,org.springframework.beans-3.0.5.RELEASE.jar,org.springframework.core-3.0.5.RELEASE.jar,commons-io-1.4.jar,org.springframework.expression-3.0.5.RELEASE.jar,ojdbc14.jar,org.springframework.jdbc-3.0.5.RELEASE.jar,connector.jar,commons-lang-2.4.jar,commons-logging.jar,com.ibm.mq.jar,log4j-1.2.15.jar,org.springframework.web-3.0.5.RELEASE.jar"""
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 08:11:42

Bnd不对目录或文件使用通配卡(理由充分)。如果需要对文件进行通配符展开,请使用${lsa;(dir);(match)}宏。详情见www.aqute.biz/Bnd。

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

https://stackoverflow.com/questions/13110696

复制
相关文章

相似问题

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