无网络环境下构建Gradle项目及生成依赖清单方法咨询
无需联网生成Gradle完整依赖清单的方案
1. 基于本地Gradle缓存生成清单
如果你的环境之前成功构建过该项目(哪怕是在能联网的状态下),Gradle会把所有依赖缓存到本地目录(默认路径:~/.gradle/caches/modules-2/files-2.1)。直接用Gradle内置任务导出:
- 在项目根目录执行:
./gradlew dependencies --configuration compileClasspath(Java项目用这个,Android项目可替换为debugCompileClasspath/releaseCompileClasspath等对应配置) - 命令会输出所有直接依赖和传递依赖的完整信息,包括组ID、Artifact ID和版本号。
- 要导出到文件的话,追加重定向:
./gradlew dependencies --configuration compileClasspath > dependencies.txt
2. 解析构建脚本+依赖锁定文件
如果本地没有缓存,直接分析项目的构建文件:
- 先提取直接依赖:在
build.gradle(或build.gradle.kts)的dependencies块里,把implementation、api等声明的依赖全部记录,比如implementation 'com.google.guava:guava:31.1-jre'。 - 处理传递依赖:如果项目启用过依赖锁定(
dependencyLocking配置),会生成gradle.lockfile,文件里包含所有依赖(包括传递依赖)的精确版本,直接读取即可。 - 要是没有锁定文件,先在临时联网环境(比如个人电脑)构建一次项目,生成锁定文件后拷贝到离线环境,再基于它整理清单。
3. 用Gradle项目报告插件生成结构化报告
在项目的build.gradle里添加插件配置:
plugins { id 'project-report' }
执行./gradlew htmlDependencyReport,会在build/reports/project/dependencies目录生成HTML格式的依赖报告,清晰展示所有依赖的层级、版本和来源。前提是本地已有缓存,或者先在联网环境生成报告再拷贝到离线环境。
关键注意点
- 要覆盖项目所有构建配置的依赖,比如Java项目的
testCompileClasspath、Android项目的不同构建变体,避免遗漏测试或特定环境的依赖。 - 把项目用到的仓库地址也同步给安全部门,确保代理例外规则覆盖这些仓库域名,不然即使放行依赖,也无法从仓库拉取。
内容的提问来源于stack exchange,提问作者SteliosT
相关产品推荐
相关产品推荐

