联盟链由于其本身的特性,目前应用在一些大型国有企业银行比较多。出于安全考虑,这些企业一般会隔离外网环境。所以在实际生产需求中可能存在需要在一个离线的环境中打包安装chaincode的情况。

本文基于这个需求而编写。

java env 镜像源码:https://github.com/hyperledger/fabric-chaincode-java/tree/release-1.4/fabric-chaincode-docker

我使用的是java chaincode。目前fabric中的java chaincode  支持 gradle 工程和maven 工程。以gradle工程为例;

打包chaincode的过程中,会需要去网络中下载 build.gradle 或者 pom.xml 文件中的jar包。在最初的1.1版本中,这个问题很好解决,只需要修改gradle的配置,使其定位项目相对路径,定义一个文件夹,手动把需要的jar包放进去即可。在 build.gradle 中做如下配置,注释掉的是之前通过网络引用的。

然后在工程中和src平级新建一个libs文件夹,把需要的jar包手动放进去即可。

然而在1.4环境中,fabric对java chaincode的gradle工程打包都需要用到一个 shadow的打包插件。如果查看javaenv的源码会发现在build.sh中有:

buildGradle() {
cd "$1" > /dev/null
echo "Gradle build"
gradle build shadowJar
retval=$?
if [ $retval -ne ]; then
exit $retval
fi
cp build/libs/chaincode.jar $
retval=$?
if [ $retval -ne ]; then
exit $retval
fi
cd "$SAVED" >/dev/null
}

这里指定了shadowJar的插件。然而目前我还没发现可以在项目组通过配置文件引用本地shadow.jar。笔者最初考虑是下载shadow的插件源码作为工程的一部分,类似自定义插件的形式。然而发现插件中还有依赖的其他的jar,一环扣一环。所以转换了思路,修改了官方提供的javaenv 镜像的源码,重新通过docker编译。

关于1.4的javaenv的源码:https://github.com/hyperledger/fabric-chaincode-java/tree/release-1.4/fabric-chaincode-docker

修改了两个地方:

Dockerfile文件中,在  #Making scripts runnable

COPY start /root/chaincode-java

COPY build.sh /root/chaincode-java

不然会报错找不到这两个文件。然后在#Removing non-needed sources前面添加:
RUN wget http://repo.spring.io/plugins-release/com/github/jengelman/gradle/plugins/shadow/2.0.3/shadow-2.0.3.pom
RUN wget http://repo.spring.io/plugins-release/com/github/jengelman/gradle/plugins/shadow/2.0.3/shadow-2.0.3.jar
RUN source /root/.sdkman/bin/sdkman-init.sh; mvn install::install-file -Dfile=shadow-2.0.3.jar -DpomFile=shadow-2.0.3.pom

这一步的目的是在构建镜像的时候下载shadow,并且跟本地maven环境相关联。这样工程里在找shadow jar的时候就会有优先找到本地的jar而不用重新下载。满足了内网的需求。

hyperledger fabric 中java chaincode 支持离线打包的更多相关文章

  1. Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(一)

    前言 本文主要目的是用于整理Hyperledger  Fabric中关于chaincode 管理和操作的内容,作者以release-1.2为范本进行讲解. 主要参考链接: https://hyperl ...

  2. Hyperledger Fabric中的Identity

    Hyperledger Fabric中的Identity 什么是Identity 区块链网络中存在如下的角色:peers, orderers, client application, administ ...

  3. 在HyperLedger Fabric中启用CouchDB作为State Database

    回顾一下我之前的一篇博客,在Fabric 1.0中,我们存在3种类型的数据存储,一种是基于文件系统的区块链数据,这个跟比特币很像,比特币也是文件形式存储的.Fabric1.0中的区块链存储了Trans ...

  4. Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(二)

    本文接上一节是测试部分 搭建一个模拟测试环境 作者将fabric release1.2工程中的 example-e2e进行了改造来进行本次实验: (1)首先我们将examples/e2e_cli/sc ...

  5. 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)

    fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...

  6. Hyperledger Fabric 中channel配置相关数据结构

    channel Configuration Transaction Hyperledger Fabric区块链网络中的配置存储在一个configuration-transaction的集合中,每个ch ...

  7. Hyperledger Fabric(5)ChainCode的编写步骤

    链码(chaincode) 会对 Fabric应用程序  发送的交易做出响应,执行代码逻辑,与 账本 进行交互. 再复习下他们之间的逻辑关系: Hyperledger Fabric 中,Chainco ...

  8. fabric java chaincode 开发

    链码的开发不部分参考官网demo即可. 本文不会详细介绍开发过程 笔者启动的是一个gradle工程,也就是jar包管理使用的是gradle. chaincode 源码: /* Copyright IB ...

  9. Hyperledger Fabric Chaincode for Operators——实操智能合约

    什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安 ...

随机推荐

  1. $route路由

    <!DOCTYPE html><html ng-app="AngularApp"> <head> <meta charset=" ...

  2. RVO和NRVO

    返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用户返回,那么这个临时对象会消耗一个构造函数(C ...

  3. Windows Backdoor Tips

    名称:在用户登录时,运行这些程序 位置: Computer Configuration\\Policies\\Administrative Templates\\System\\Logon\\ 中 d ...

  4. Java堆初始大小的建议值

    摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...

  5. ORA-04098 trigger 'DBBJ.DB_EV_ALTER_ST_METADATA' is invalid and failed re-validation

    转自:https://blog.csdn.net/dragoo1/article/details/9411105 ORA-04098: trigger 'DBBJ.DB_EV_ALTER_ST_MET ...

  6. Access restriction required library rt.jar

    在JAVA项目开发中,使用到了BASE64Decoder,但编辑运行时却会出现以下错误:Access restriction required library rt.jar,这里就详细的说明一下如何解 ...

  7. 配置镜像yum源--解决RHN not available的问题

    由于RHN服务是收费的,在安装redhat系统时,自带的yum可能不能使用.中国有很多好用的镜像源,我们可以把yum源更改到国内镜像源上,步骤如下: 一.卸载本地yum #rpm –qa|grep y ...

  8. 每天一道算法题(24)——自定义幂函数pow

    double myPower(double base, int exponent){ if(exponent==0) return 1; if(exponent==1) return base; if ...

  9. AngularJS分层开发

    为了AngularJS的代码利于维护和复用,利用MVC的模式将代码分离,提高程序的灵活性及可维护性. 1,前端基础层 var app=angular.module('appName',['pagina ...

  10. 3-2 zk客户端连接关闭服务端,查看znode

    使用ZooKeeper官方提供的Client来连接.路径类似的结构. 连接到我们的门户HOST. quota属于zookeeper.quota是子节点,zookeeper是父节点.quota其实是一个 ...