为何Gradle拉取插件时会尝试获取不存在的.gradle.plugin后缀jar包
Gradle插件拉取逻辑疑问解答
为什么Gradle会尝试拉取带.gradle.plugin后缀的jar包
- 这是Gradle插件标记构件的标准解析逻辑导致的:当你在
plugins {}块中通过插件ID声明依赖时,Gradle会先构造一个插件标记构件,坐标规则为[插件ID]:[插件ID].gradle.plugin:[版本号],这个构件的作用是通过pom文件的依赖声明,指向真实的插件代码jar包坐标。 - 你出现对应日志的核心原因是使用了私有Artifactory作为插件仓库,而非默认的Gradle插件Portal:默认插件Portal针对这类标记构件做了特殊适配,会直接返回pom文件且不会触发jar包查询;但多数私有Maven仓库(Artifactory、Nexus等)的默认配置会尝试查询该构件的jar包,找不到就输出INFO级别的缺失日志,这个日志本身不影响插件的正常加载使用。
是否存在带.gradle.plugin后缀的jar包
绝大多数场景下不存在。符合Gradle官方发布规范的插件,该类标记构件仅包含pom文件,没有实际代码jar包。只有极个别不符合规范的自定义插件,才会将代码直接打入该构件生成jar包,这类做法不被官方推荐。
这类jar包的作用(如果存在)
如果有人自定义生成了这类jar包,一般是为了跳过依赖传递逻辑,直接将插件所有类打包在该构件中,无需再拉取真实的插件jar包。但该做法会导致依赖管理混乱,还可能出现类冲突问题,不建议使用。
可选优化方案
如果不想看到这类缺失日志,可以选择两种处理方式:
- 调整私有仓库的配置,添加对pom-only类型标记构件的适配规则,跳过jar包查询逻辑
- 改用legacy的
buildscript {}块声明插件依赖,直接指定真实的插件jar包坐标,绕开插件标记构件的查询流程
内容的提问来源于stack exchange,提问作者Rico
相关产品推荐
相关产品推荐

