hyperledger fabric 中java chaincode 支持离线打包
联盟链由于其本身的特性,目前应用在一些大型国有企业银行比较多。出于安全考虑,这些企业一般会隔离外网环境。所以在实际生产需求中可能存在需要在一个离线的环境中打包安装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 支持离线打包的更多相关文章
- Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(一)
前言 本文主要目的是用于整理Hyperledger Fabric中关于chaincode 管理和操作的内容,作者以release-1.2为范本进行讲解. 主要参考链接: https://hyperl ...
- Hyperledger Fabric中的Identity
Hyperledger Fabric中的Identity 什么是Identity 区块链网络中存在如下的角色:peers, orderers, client application, administ ...
- 在HyperLedger Fabric中启用CouchDB作为State Database
回顾一下我之前的一篇博客,在Fabric 1.0中,我们存在3种类型的数据存储,一种是基于文件系统的区块链数据,这个跟比特币很像,比特币也是文件形式存储的.Fabric1.0中的区块链存储了Trans ...
- Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(二)
本文接上一节是测试部分 搭建一个模拟测试环境 作者将fabric release1.2工程中的 example-e2e进行了改造来进行本次实验: (1)首先我们将examples/e2e_cli/sc ...
- 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)
fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...
- Hyperledger Fabric 中channel配置相关数据结构
channel Configuration Transaction Hyperledger Fabric区块链网络中的配置存储在一个configuration-transaction的集合中,每个ch ...
- Hyperledger Fabric(5)ChainCode的编写步骤
链码(chaincode) 会对 Fabric应用程序 发送的交易做出响应,执行代码逻辑,与 账本 进行交互. 再复习下他们之间的逻辑关系: Hyperledger Fabric 中,Chainco ...
- fabric java chaincode 开发
链码的开发不部分参考官网demo即可. 本文不会详细介绍开发过程 笔者启动的是一个gradle工程,也就是jar包管理使用的是gradle. chaincode 源码: /* Copyright IB ...
- Hyperledger Fabric Chaincode for Operators——实操智能合约
什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安 ...
随机推荐
- (转)更改Web.config中对上传文件大小限制
.net上传超过200K的图片的时候,会跳转到404,但是url没有错误,真J8的坑啊. 本文转载自:http://www.cnblogs.com/zwffff/archive/2009/04/29/ ...
- 四川第七届 C Censor (字符串哈希)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- python第十一天-----补:缓存操作
memcached,首先下载python-memcached模块,在cmd中执行pip install python-memcached即可 memcached比较简单,默认情况仅支持简单的kv存储, ...
- AngularJS核心特性(四大点)
本人刚刚接触AngularJS,还不太熟悉,就说说我目前遇到的一些注意点吧. 1.调用外来文件script文件 AngularJS核心特性一 MVC MVC设计模式 html文件 <!DOCT ...
- C字符串翻转
实现字符串翻转,思路很简单,就是首尾字符对调. void reverse(char* str){ char* p = str + strlen(str) - 1;//最后一个字符地址 char tem ...
- js生成邀请码(2)
//生成邀请码方法一 /*function createInviteCode() { var s = [],a=6,b=10; var chars = "123456789QWERTYUIP ...
- 关于python+django操作数据库中的表
数据库中的表示这样设计的 class C(models.Model): name = models.CharField(max_length=32) class B(models.Model): na ...
- web基础 (二) html标签
一.html是什么? 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器按顺序渲染网页文件,然 ...
- ansible for devops 读书笔记第二章Ad-Hoc Commands
参数 参数 说明 -a ‘Arguments’, —args=’Arguments’ 命令行参数 -m NAME, —module-name=NAME 执行模块的名字,默认使用 command 模块, ...
- Android中Activity之间的数据传递
在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...