Hyperledger Fabric Java语言Gradle 工程 链码离线安装

Danica ·
更新时间:2024-09-20
· 909 次阅读

需求


hyperledger fabric(分布式账本)由于其本身的特性,目前主要应用于大型国企和银行,其环境的部署一般是与外部网络隔离的。如果采用docker的部署方式,docker镜像可以通过导入即可,但是在安装和实例化的时候需要下载相应的依赖,而且在1.4的环境中,fabric实例化链码需要使用到shadowJar插件。

问题

如何将 Java链码工程所需要的依赖引入工程指定路径下

解决方案


目前网上能找到的解决方案是修改javaenv镜像的dockerfile,将shadowJar插件的依赖直接在生成javaenv镜像文件的时候加载(这就需要改镜像了,看起来就很复杂,我很赖,所以你懂得)。测试这种方法的时候发现在重新生成javaenv镜像文件的时候会缺少一些文件,导致生成的镜像不可用。
参考文章地址:http://www.bubuko.com/infodetail-3024199.html
 

于是较为简单的方法是将所有依赖下载到指定目录下:

build.gradle文件内容:

/* * Copyright IBM Corp. 2018 All Rights Reserved. * 解决Fabric 链码 离线安装问题:将所依赖JAR包统一放入libs下 * Author: cuixiangyang * Date: 2020-02-13 * SPDX-License-Identifier: Apache-2.0 */ plugins { id 'com.github.johnrengelman.shadow' version '2.0.3' id 'java' } /*buildscript { repositories { jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.3' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' */ group 'org.hyperledger.fabric-chaincode-java' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenLocal() /*flatDir{ dirs 'libs' }*/ mavenCentral() maven { url "https://repository.mulesoft.org/nexus/content/repositories/public/" } } dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.+' testCompile group: 'junit', name: 'junit', version: '4.12' compile fileTree(dir:'libs',include:['*.jar']) } shadowJar { baseName = 'chaincode' version = null classifier = null manifest { attributes 'Main-Class': 'org.hyperledger.fabric.example.SimpleChaincode' } } //将依赖的jar包导入到项目的libs目录下 task copyJars(type: Copy) { from configurations.runtime into 'libs' // 目标位置 } build.dependsOn(copyJars)

然后Eclipse控制台(我是在Eclipse安装了Gradle插件和Maven插件)先后执行clean和build

在Console控制台,出现如下日志输出(只提出了执行clean的日志输出,build的和他一样,输出SUCCESSFUL即成功)

然后在工程libs目录下,可以看到Gradle Java链码工程依赖的JAR包

然后将工程上传Linux  Fabric环境,由于环境是内网环境,无法联网,所以需要修改build.gradle文件,将请求网络获取依赖Jar包的配置注释,然后放开优先从本地指定目录获取依赖的配置

/* * Copyright IBM Corp. 2018 All Rights Reserved. * 解决Fabric 链码 离线安装问题:将所依赖JAR包统一放入libs下 * Author: cuixiangyang * Date: 2020-02-13 * SPDX-License-Identifier: Apache-2.0 */ plugins { id 'com.github.johnrengelman.shadow' version '2.0.3' id 'java' } /*buildscript { repositories { jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.3' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' */ group 'org.hyperledger.fabric-chaincode-java' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenLocal() flatDir{ dirs 'libs' } /* mavenCentral() maven { url "https://repository.mulesoft.org/nexus/content/repositories/public/" }*/ } dependencies { /* compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.+' testCompile group: 'junit', name: 'junit', version: '4.12'*/ compile fileTree(dir:'libs',include:['*.jar']) } shadowJar { baseName = 'chaincode' version = null classifier = null manifest { attributes 'Main-Class': 'org.hyperledger.fabric.example.SimpleChaincode' } } //将依赖的jar包导入到项目的libs目录下 task copyJars(type: Copy) { from configurations.runtime into 'libs' // 目标位置 } build.dependsOn(copyJars)

然后上传至Fabric网络环境,进行离线安装。

参考博客:

gradle在build的时候找不到某个jar包的解决办法

离线安装和实例化fabric java chaincode

离线安装和实例化fabric java chaincode


作者:李晓LOVE向阳



hyperledger JAVA 工程 安装 gradle fabric

需要 登录 后方可回复, 如果你还没有账号请 注册新账号