如何在Gradle 8中使用GitHub上的最新gradle-ospackage-plugin
解决Gradle 8中引入GitHub上nebula.ospackage插件的问题
nebula.ospackage 11.0.0版本尚未同步到Gradle官方插件门户,因此直接用plugins块引入会失败。以下两种方式可实现从GitHub仓库引入该插件:
方式一:使用buildscript块手动引入
在项目根目录的build.gradle中添加如下配置:
buildscript { repositories { // 配置GitHub Packages仓库 maven { url = uri("https://maven.pkg.github.com/nebula-plugins/gradle-ospackage-plugin") credentials { // 从环境变量或项目属性读取GitHub凭证 username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR") password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") } } } dependencies { // 引入插件的类路径依赖 classpath "com.netflix.nebula:gradle-ospackage-plugin:11.0.0" } } // 应用插件 apply plugin: "nebula.ospackage"
注意事项
- 需要生成GitHub个人访问令牌(PAT),并赋予
read:packages权限,用于访问GitHub Packages仓库 - 可将凭证信息通过环境变量
GITHUB_ACTOR(GitHub用户名)和GITHUB_TOKEN(生成的PAT)传入,或在gradle.properties中配置gpr.user和gpr.key
方式二:使用plugins块配合pluginManagement配置
在项目根目录的settings.gradle中添加插件仓库和解析策略:
pluginManagement { repositories { gradlePluginPortal() // 保留官方插件门户 maven { url = uri("https://maven.pkg.github.com/nebula-plugins/gradle-ospackage-plugin") credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } } resolutionStrategy { eachPlugin { // 指定nebula.ospackage插件的实际模块坐标 if (requested.id.id == "nebula.ospackage") { useModule("com.netflix.nebula:gradle-ospackage-plugin:${requested.version}") } } } }
之后在build.gradle中仍可使用原有的plugins块:
plugins { id "nebula.ospackage" version "11.0.0" }
核心原因说明
Gradle插件门户中的插件依赖于「插件标记工件(plugin marker artifact)」,而nebula.ospackage 11.0.0的标记工件尚未发布到官方门户。通过上述配置,我们直接指定插件的实际模块坐标,并从GitHub Packages仓库拉取插件内容。
内容的提问来源于stack exchange,提问作者Stefano Bossi
相关产品推荐
相关产品推荐

