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

如何为运行时依赖项添加导入包说明?

冯风史
2023-03-14

我正在用Gradle构建一个OSGi jar,但清单有点问题。以下是我的构建脚本的摘录:

apply plugin: 'java'
apply plugin: 'osgi'

jar {
    baseName = 'awesome'
    manifest {
        name = 'An Awesome Application'
        symbolicName = 'com.example.awesome'
//        instruction 'Import-Package', 'org.springframework.orm'
    }
}

使用上述方法,Gradle会检测我的依赖项,并添加一个包含所有编译时依赖项的导入包。但是假设我的应用程序在运行时依赖于org。springframework。orm同样,我如何告诉Gradle将其作为参数包含在导入包中?

在上述注释行未注释的情况下,生成的Import Package指令仅指定org。springframework。orm。这让我很困惑,因为OsgiManifest的Gradle文档说明

OsgiManifest指令(字符串名称、字符串…值)

指令中添加参数。如果指令不存在,则创建该指令。如果它确实存在,参数将附加到现有参数。

然而,这似乎不适用于自动检测到的导入包参数。如果我指定指令'导入包','my.dependency.1'等等,并在两者之间打印jar.manifest.instructions,我可以看到它们是如何按顺序添加的,并且它们都出现在生成的清单中,但是如果手动指定导入包,Gradle的OSGi插件似乎不会添加自动检测到的参数。

  • 如果我没有手动指定Import Package指令,它会自动生成,并带有我所有的编译时依赖项,但不是运行时依赖项
  • 如果我执行清单{instruction'Import Package',org.springframework.orm'},则编译时依赖项不会自动包含在内

如何告诉Gradle我的运行时依赖项,以便将它们添加到导入包?

共有1个答案

司马晋
2023-03-14

我不熟悉Gradle bnd插件,但我熟悉bnd。

bnd指令中导入包的默认值为*。方法:匹配所有生成的导入。如果为导入包指定一个值,则它将覆盖*,并成为唯一的导入。因此,您的导入包指令几乎总是以最后一个位置的catch all*结束。

猜测一下这将如何转化为Groovy/Gradle,我建议如下:

说明“导入包”、“组织”。springframework。orm','*'

 类似资料:
  • 我使用的是Android studio版本 在项目级分级中: 模块级别等级: 当我导入它时,它发生错误 导入此时 xml错误 错误图片 在xml中添加此标记时发生错误 为此给出解决方案!!!

  • npm是否有安装依赖作为对等依赖的选项,如yarn选项,而不是手动添加它例如: 感谢@Broncha,更新问题的更多说明 问题是如何向项目添加对等依赖。那就是 将依赖项添加到package.json中的“dependencies”中, 如何安装将其添加到package.json?中的“对等依赖”的依赖项

  • 所以,我有一个配置了包注册表的GitHub项目。它有两个包: 包页面只有Maven的说明,除此之外,说明被破坏了(不是在Maven中添加依赖项的有效方法): 问题是:如何在Gradle构建中添加该包?

  • 我尝试使用MaxMind的GeoIP2数据库,我已经将jar添加到我的Java构建路径中,并用Javadoc和源代码配置了它,但是当我运行这个程序时,我得到了一个NoClassDefFound错误,根据这个堆栈溢出的答案,这是因为我需要添加依赖项,但我不知道如何在eclipse中添加它们,我试图提取jar文件并将它们添加到构建路径中,但这不起作用,我在eclipse中如何做到这一点? 谢谢你的帮助

  • 本文向大家介绍android-gradle 如何添加依赖项,包括了android-gradle 如何添加依赖项的使用技巧和注意事项,需要的朋友参考一下 示例 下面的示例描述了如何在app /模块的build.gradle文件中声明三种不同类型的直接依赖关系: