在Docker内使用Gradle构建Fabric链码时如何访问本地Maven仓库
问题解决方法
核心原因是Fabric部署Java链码时会启动独立的隔离Gradle构建容器,默认无法读取宿主机本地Maven仓库中的私有jar包,可通过以下两种方案解决:
方案1:依赖内置到链码包(测试场景优先推荐,无需修改网络配置)
该方案无需调整Fabric网络配置,操作成本最低:
- 在链码项目根目录新建
lib文件夹,将本地的common.jar复制到该目录 - 修改链码的
build.gradle依赖配置,替换原有从Maven拉取common.jar的配置:
dependencies { // 保留原有其他依赖,新增本地jar包引用 implementation fileTree(dir: 'lib', include: ['*.jar']) // 注释掉原有的common.jar的Maven依赖配置 // implementation 'com.yourgroup:common:1.0.0' }
- 重新打包链码为
chaincode.tar.gz后再次执行安装命令即可,构建时会直接读取链码包内的jar包,不需要访问外部仓库。
方案2:挂载本地Maven仓库到构建容器(适合common.jar频繁迭代的开发场景)
如果需要频繁更新common.jar版本,不想每次复制到链码目录,可以通过挂载本地仓库实现:
- 先获取本地Maven仓库的绝对路径,默认路径为
~/.m2/repository(macOS/Linux)或C:\Users\<用户名>\.m2\repository(Windows) - 进入test-network目录,打开
compose/docker/docker-compose-test-net.yaml文件,在所有peer节点的environment配置段下新增参数:
CORE_VM_DOCKER_HOSTCONFIG_BINDS: "<本地Maven仓库绝对路径>:/root/.m2/repository"
以Linux默认路径为例,配置为:
CORE_VM_DOCKER_HOSTCONFIG_BINDS: "~/.m2/repository:/root/.m2/repository"
- 重启test-network使配置生效:
./network.sh down ./network.sh up createChannel -c mychannel -ca
- 后续安装链码时,构建容器会自动挂载宿主机的Maven仓库,直接读取其中的common.jar依赖。如果出现权限读取报错,可给本地Maven目录加全局可读权限:
chmod -R 755 ~/.m2。
内容的提问来源于stack exchange,提问作者Jonas Kreusch
相关产品推荐
相关产品推荐

