问题描述
依赖gradle加载依赖的Java项目,在可以连接网络条件下,可以加载中央仓库或自定义仓库完成依赖加载,具体可参考
Intellij IDEA 利用gradle从maven仓库中加载第三方包
在无网络的情况下, 如何利用已下载的gradle缓存完成依赖加载?做法是将gradle缓存转为m2形式解 决依赖问题。
Java依赖
gradle
依赖gradle加载依赖的Java项目, jar包缓存存储位置为用户目录下的.gradle文件夹, eg. ($USER_DIR/.gradle/caches/modules-2/files-2.1)
m2
利用maven加载依赖, jar位置为用户目录下的.m2文件夹, eg. ($USER_DIR/.m2/repository/)
依赖转换
添加本地依赖
修改依赖配置为mavenLocal(), 依赖加载用户目录下.m2文件夹
repositories {
//其他依赖
...
//本地依赖
mavenLocal()
}
gradle缓存转m2依赖
发现gradle的缓存与m2的依赖关系为
gradle: org.apache.commons -> m2: repository/org/apache/commons/
shell转换代码如下:
#!/bin/bash
# Description: 将gradle中的依赖转换为m2
#
# Author: Yang Meng ([email protected])
# 创建.m2格式依赖
base_dir=`pwd`
dir_name=${base_dir}/"repository"
rm ${dir_name} -rf
mkdir -p ${dir_name}
# 遍历.gradle中依赖
cd ./files-2.1
# 第一层
for level_1 in `ls`
do
# 第二层
cd ${level_1}
for level_2 in `ls`
do
# 第三层
cd ${level_2}
for level_3 in `ls`
do
# 第四层
cd ${level_3}
for item in `ls`
do
des_dir=${dir_name}/${level_1//\./\/}/${level_2}/${level_3}
mkdir -p ${des_dir}
cp ${item}/* ${des_dir}
done
cd -
done
cd ../
done
cd ../
done
依赖拷贝
将代码生成的repository文件夹拷贝到用户目录的.m2文件夹下, 即可解决在无网络条件下的Jar依赖问题。
总结
无网络条件下利用gradle的缓存解决jar包加载问题。