5

我想创建一些依赖于其他(第 3 方)jar 的包(这是否是一个好习惯是另一个话题)

我可以使用 gradle 生成一个胖 jar(它具有所有依赖的 jar)和 osgi 清单

我的项目布局在 libs/ 文件夹中存储 jar 制作 jar 后,第 3 方 jar(例如 ibm.jar)位于 jar 的根目录中。

我将我的 gradle 任务是使用带有一些基本 osgi 指令的 osgi 插件,我仅手动将导出包指定为我的程序包,而不是其他 3 个 jar

但是,当我尝试安装该捆绑包时,它显示错误

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)

摇篮

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的问题

'Include-Resource', 'libs/'

我试图在类路径中明确设置它们,但问题仍然存在

Bundle-ClassPath: '.,*.jar' 

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

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

编辑:有了这样的 gradle 指令,我得到了同样的错误(我检查了清单中出现的捆绑类路径)

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"""
4

1 回答 1

3

Bnd 不对目录或文件使用通配符(有充分的理由)。如果您需要对文件进行通配符扩展,请使用 ${lsa;(dir);(match)} 宏。有关详细信息,请参见 www.aqute.biz/Bnd。

于 2012-10-29T08:11:42.903 回答