当前位置: 首页 > 知识库问答 >
问题:

使用Gradle创建具有依赖JAR的Osgi包

孙翰墨
2023-03-14

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

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

我的项目布局将jar存储在libs/文件夹中,第三方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'
    }
}
'Include-Resource', 'libs/'
Bundle-ClassPath: '.,*.jar' 

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

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

编辑:与我的gradle insturction类似,我得到了相同的错误(我检查了bundle类路径出现在清单中以及)

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

共有1个答案

南门鸿畴
2023-03-14

Bnd不对目录或文件使用通配符(原因很好)。如果需要对文件进行通配符扩展,请使用${LSA;(dir);(match)}宏。详情见www.aqute.biz/bnd。

 类似资料:
  • 我尝试使用gradle build的以下格式创建一个jar库,以便以后可以将其作为jar包导入该项目中的其他人。但是,生成的jar只有一个清单文件,没有java文件。 这些文件在Eclipse中的一个包中。 感恩节。

  • 在命令行中,我需要构建一个没有依赖项的可执行jar。当前的“gradle build”命令给了我一个带有依赖项的jar。 在StackOverflow上找不到这个。如果是重复的问题,指给我看。谢谢。

  • 我当前的jar在build中。gradle如下所示: 而且工作得很好。 然而,我有一个来自格雷德的消息(可能是从6号开始?) 这是实际消息: 零件<代码>配置。不推荐使用compile。 如何更新? 如果我改变了 Gradle说

  • 这个问题与这个问题有关-但是,由于弃用而支持,它不起作用。它确实拾取了用声明的依赖项。然而,由于它被弃用,使用它不是一个选项(无论如何,当它被删除时,我们会回到这里) 我有一个Gradle任务: 除了测试依赖之外,还有一个依赖项: 从IDE运行很好。然而,当我部署到Raspberry Pi(或在本地使用jar结果)时,我会遇到以下异常: 由以下行触发: 在静态编程语言方法中,返回

  • 如果我有一个OSGI Bundle jar中嵌套了依赖项jar,我是否需要在导入包清单中列出这些类以便使用它们?我不这么认为。 另外,我如何将这些依赖项jar添加到我的包中。我只是把它们放在根文件夹里吗?我是否需要向清单文件添加任何内容才能使用这些依赖关系?

  • 问题内容: 我想将我的项目打包在一个可执行的JAR中进行分发。 如何使Maven项目将所有依赖JAR打包到我的输出JAR中? 问题答案: 然后用 编译目标应在Assembly:single:single之前添加,否则不包括您自己项目中的代码。 通常,此目标与自动执行的构建阶段相关。这样可以确保在执行mvn install或执行部署/发布时构建JAR 。