本地构建正常但CI环境下Gradle无法找到自定义插件
从报错信息来看,核心问题是CI环境中Gradle找不到插件对应的Plugin Marker Artifact(即com.example.plugins.Testing:com.example.plugins.Testing.gradle.plugin:0.1.4)。本地能正常构建大概率是因为缓存了插件的直接依赖,或是本地环境通过其他方式获取到了ID与插件包的映射关系;结合你提到CI使用自定义Maven仓库构建正常,说明认证和仓库配置本身没问题,问题出在插件的发布环节。
可能的原因及解决方法
插件发布时未生成并上传Plugin Marker Artifact
Gradle通过插件ID引用插件时,需要一个专门的marker artifact来关联插件ID和实际的插件JAR包。如果插件项目未正确配置发布流程,就不会生成这个marker包,导致无本地缓存的CI环境无法解析插件ID。
解决:在插件项目的build.gradle.kts中确保正确配置gradlePlugin块,maven-publish插件会自动生成并发布marker artifact:plugins { `java-gradle-plugin` `maven-publish` } gradlePlugin { plugins { create("testingPlugin") { id = "com.example.plugins.Testing" // 与你引用的插件ID完全一致 implementationClass = "com.example.plugins.TestingPlugin" // 插件主类的完整路径 } } } // 配置Github Packages发布仓库示例 publishing { repositories { maven { name = "GitHubPackages" url = uri("https://maven.pkg.github.com/my_org/infra") credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } } }重新发布插件后,登录Github Packages检查
my_org/infra仓库下是否存在com.example.plugins.Testing.gradle.plugin包,且版本为0.1.4。手动发布插件时未手动创建Marker Artifact
若你是手动上传插件JAR到Github Packages,而非通过Gradle的maven-publish插件发布,需要手动创建并上传marker artifact:- 创建空Maven项目,坐标设为
com.example.plugins.Testing:com.example.plugins.Testing.gradle.plugin:0.1.4 - 在项目的
pom.xml中添加对实际插件JAR的依赖:<dependencies> <dependency> <groupId>com.example.plugins</groupId> <!-- 实际插件的GroupId --> <artifactId>testing-plugin</artifactId> <!-- 实际插件的ArtifactId --> <version>0.1.4</version> <type>gradle-plugin</type> </dependency> </dependencies> - 将这个marker包上传到Github Packages的
my_org/infra仓库。
- 创建空Maven项目,坐标设为
Gradle版本差异(可能性较低)
检查CI环境使用的Gradle版本是否与本地一致。部分旧版Gradle对Plugin Marker Artifact的解析逻辑存在差异,将CI的Gradle版本升级到与本地一致后再尝试构建。
内容的提问来源于stack exchange,提问作者RoiA

