如何下载指定Gradle插件并从本地加载实现离线构建?
Gradle无网络环境下本地加载插件解决方案
问题背景
当前使用Gradle 5.5,项目的build.gradle.kts配置如下:
plugins { id("java-library") id("org.xbib.gradle.plugin.jflex") version "1.2.0" id("cup.gradle.cup-gradle-plugin") version "1.2" jacoco } jacoco { toolVersion = "0.8.8" } repositories { maven { url = uri("https://repo1.maven.org/maven2/") } jcenter() maven { url = uri("https://plugins.gradle.org/m2/") } }
联网状态下构建正常,但需要在无网络、无法复用.gradle缓存的多台电脑上构建。目前已通过files()方式成功加载本地依赖jar,但断网后构建失败,报错如下:
* What went wrong: Plugin [id: 'com.gradle.build-scan', version: '2.3', artifact: 'com.gradle:build-scan-plugin:2.3'] was not found in any of the following sources: - Gradle Core Plugins (plugin is not in 'org.gradle' namespace) - Plugin Repositories (could not resolve plugin artifact 'com.gradle:build-scan-plugin:2.3') Searched in the following repositories: Gradle Central Plugin Repository
现需解决两个问题:org.xbib.gradle.plugin.jflex和cup.gradle.cup-gradle-plugin的下载来源,以及如何从本地文件系统加载它们。
一、两个插件的下载来源
- org.xbib.gradle.plugin.jflex:1.2.0:发布在Gradle官方插件仓库,对应的构件坐标为
org.xbib.gradle.plugin:jflex-plugin:1.2.0 - cup.gradle.cup-gradle-plugin:1.2:同样发布在Gradle官方插件仓库,对应的构件坐标为
com.github.johnrengelman:cup-gradle-plugin:1.2(插件ID与构件坐标存在映射关系,需注意对应)
二、本地加载插件的实现步骤
1. 提前下载插件jar包
联网环境下,通过以下方式获取插件jar:
- 直接从Gradle插件仓库搜索对应坐标下载jar文件
- 或在联网项目中执行
gradle dependencies,从本地.gradle/caches目录中找到对应jar并复制
将下载好的jar包放到项目内的本地目录(比如./gradle-plugins/),确保该目录随项目代码同步到其他无网络电脑。
2. 修改build.gradle.kts配置
放弃plugins DSL的远程依赖方式,改用buildscript块加载本地插件:
// 配置构建脚本依赖,加载本地插件jar buildscript { dependencies { classpath(files("gradle-plugins/jflex-plugin-1.2.0.jar")) classpath(files("gradle-plugins/cup-gradle-plugin-1.2.jar")) } } // 应用本地加载的插件 apply(plugin = "org.xbib.gradle.plugin.jflex") apply(plugin = "cup.gradle.cup-gradle-plugin") // 保留原有的核心插件与配置 plugins { id("java-library") jacoco } jacoco { toolVersion = "0.8.8" } // 无网络环境下可注释所有远程仓库配置 repositories { // maven { url = uri("https://repo1.maven.org/maven2/") } // jcenter() // maven { url = uri("https://plugins.gradle.org/m2/") } }
3. 解决build-scan插件报错
报错中的com.gradle.build-scan插件通常来自Gradle全局配置文件(如~/.gradle/init.gradle或~/.gradle/init.gradle.kts),是全局启用的构建扫描插件。解决方式:
- 直接修改全局配置文件,删除或注释掉关于
build-scan插件的配置 - 若无法修改全局配置,可在项目的
settings.gradle.kts中覆盖配置,禁止自动加载:
pluginManagement { plugins { id("com.gradle.build-scan") version "2.3" apply false } }
内容的提问来源于stack exchange,提问作者D.J.
相关产品推荐
相关产品推荐

