联盟链由于其本身的特性,目前应用在一些大型国有企业银行比较多。出于安全考虑,这些企业一般会隔离外网环境。所以在实际生产需求中可能存在需要在一个离线的环境中打包安装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. Spring线程池由浅入深的3个示例

    作者博客主页:http://blog.csdn.net/chszs 本文提供了三个Spring多线程开发的例子,由浅入深,由于例子一目了然,所以并未做过多的解释.诸位一看便知. 前提条件: 1)在Ec ...

  2. [译] SystemTap

    SystemTap 什么是system Tap ? SystemTap 提供环境用来获得更多关于内核几乎所有组件的信息,用以被进一步分析.SystemTap也可以被当作一种工具,为用户研究和监控内核详 ...

  3. 某个应用使cpu使用率100%

    --CPU使用率 Linux是一个多任务的操作系统,将每个cpu的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉 为了维护cpu时间,linux通过事先定义的 ...

  4. spring学习六

    1: @Valid 注解    @NotNull(message="名字不能为空") private String userName; @Max(value=120,message ...

  5. 球的移动(move)

    有n个盒子(1<=N<=1000)围成一个圈,每个盒子有ai个球,所有盒子的球的总数小于等于n.每一次移动,可以把一个球移动到它的一个相邻的盒子内.现在要使得每个盒子的球数<=1,求 ...

  6. IEEE 2012 PHM数据挑战赛

    Sutrisno E, Oh H, Vasan A S S, et al. Estimation of remaining useful life of ball bearings using dat ...

  7. 使用setTimeout 来实现setInterval的效果

    直接上代码,实现的核心就是在延时的情况下递归的调用自己, x=0 y=-1 function countMin( ) { y=y+1 document.displayMin.displayBox.va ...

  8. Linux 对mysql远程授权连接操作 和 查看mysql数据库和表 基本命令

    Linux 对mysql远程连接的授权操作 首先linux连接mysql数据库 授权: grant all on *.* to ' with grant option; //允许账户root从任何主机 ...

  9. 问题:iis配置json;结果:如何配置iis支持.json格式的文件

    如何配置iis支持.json格式的文件 | 浏览:1357 | 更新:2015-04-05 11:00 | 标签:软件 1 2 3 4 5 6 7 分步阅读 现在大家在制作HTM5的一些小场景,小游戏 ...

  10. 触摸事件MultiTouch Events

    备注: userInteractionEnabled = NO hidden = YES alpha = 0.0~0.01    //如果上面三个属性被设置了则无法接收触摸事件 1.- (void)t ...