Groovy项目升级Gradle6.8时jarjar任务osgiManifest空指针报错求助
jarjar任务功能说明
jarjar任务基于Jar Jar Links工具实现,核心作用是对Jar包进行重打包,具体用途包括:
- 将项目依赖的第三方类库内嵌到自身产出的Jar包中,避免运行时依赖冲突
- 按需修改内嵌依赖的包名路径,和其他组件的同依赖版本做隔离
- 结合OSGi规范生成合规的Manifest元数据,让产出的Jar包可直接作为OSGi组件部署
你当前项目中的jarjar任务还额外承担了打包完成后生成OSGi清单的职责。
Gradle 6.8适配方案
报错的根本原因是Gradle 4.x到6.x版本对归档文件相关API做了不兼容变更:Gradle 5.1之后Jar任务的archivePath属性被正式废弃,默认返回null,你配置中基于archivePath获取原始Jar文件再调用osgiManifest()的逻辑就会触发空指针异常。
按以下步骤修改即可解决:
- 打开jarjar任务对应的Gradle配置脚本,定位所有调用
jar.archivePath的代码行 - 将所有
jar.archivePath替换为jar.archiveFile.get().asFile,这是Gradle 5+版本官方推荐的获取归档文件路径的标准API - 如果配置中存在使用
archiveName的代码,同步替换为archiveFileName.get() - 检查
osgiManifest配置块,确保所有读取原有Jar属性的逻辑都适配了Gradle新的Provider API规范
修改前后代码示例:
// 修改前 def originalJar = jar.archivePath osgiManifest { // 原有配置保持不变 }
// 修改后 def originalJar = jar.archiveFile.get().asFile osgiManifest { // 原有配置保持不变 }
内容的提问来源于stack exchange,提问作者Ekaterina Ivanova iceja.net
相关产品推荐
相关产品推荐

