基础网络已经进展到了一定阶段,就要进行智能合约和顶层应用的编写了,这里先说下Java SDK;官方给予了使用方式,如果按照正常的流程其实非常简单,因为走了弯路,所以来记录一下。
强烈建议使用IntelliJ IDEA官网下载然后破解!!!!!!(因为折腾使用eclipse白折腾了一天)
强烈建议多看官方的文档!!!
先睹为快:
官方地址:https://github.com/hyperledger/fabric-sdk-java
git clone https://github.com/hyperledger/fabric-sdk-java.git
拉取到本地;
一、搭建tests的基础网络
1、复制基础配置文件
基础网络配置目录:
/fabric-sdk-java/src/test/fixture/sdkintegration
将其打包放置到fabric环境中;
2、启动文件查看(一定要自己看下启动,学习很重要)
可以看到一个运行文件:fabric.sh (截取最重要部分)
function up(){
if [ "$ORG_HYPERLEDGER_FABRIC_SDKTEST_VERSION" == "1.0.0" ]; then
docker-compose up --force-recreate ca0 ca1 peer1.org1.example.com peer1.org2.example.com ccenv
else
docker-compose up --force-recreate
fi
}
3、这里建议使用fabric 1.1.0 版本,使用1.0.0会遇到一些问题,别问我为啥,反正放弃了1.0.0。(1.1跟1.0兼容性感觉有问题)
如果你还是v1.0.0,这里有个脚本拉取v1.1.0吧,会很快,不用担心;如果有更新的,改下VERSION=xxx就好了。
#!/bin/bash
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
export VERSION=1.1.0
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')
#Set MARCH variable i.e ppc64le,s390x,x86_64,i386
MARCH=`uname -m`
dockerFabricPull() {
local FABRIC_TAG=$1
for IMAGES in peer orderer couchdb ccenv javaenv kafka zookeeper tools; do
echo "==> FABRIC IMAGE: $IMAGES"
echo
docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG
docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES
done
}
dockerCaPull() {
local CA_TAG=$1
echo "==> FABRIC CA IMAGE"
echo
docker pull hyperledger/fabric-ca:$CA_TAG
docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca
}
: ${CA_TAG:="$MARCH-$VERSION"}
: ${FABRIC_TAG:="$MARCH-$VERSION"}
echo "===> Downloading platform binaries"
curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/hyperledger-fabric-${ARCH}-${VERSION}.tar.gz | tar xz
echo "===> Pulling fabric Images"
dockerFabricPull ${FABRIC_TAG}
echo "===> Pulling fabric ca Image"
dockerCaPull ${CA_TAG}
echo
echo "===> List out hyperledger docker images"
docker images | grep hyperledger*
4、启动
因为demo已经生成好了证书,所以这里就不去再生成再讲了;
nohup ./fabric.sh up &
后台运行,这里没有用-d 的原因是希望能通过nohup.out查看下之后的所有运行日志;如果-d则需要每个容器单独的查看,当然如果需要看更细的日志请在docker-compose 后加 --verbose
二、导入并进行测试
本人是先按照官方指导在eclipse上折腾了半天,后来单独运行tests有问题,最后直接导入到IntelliJ IDEA上运行的tests;
这是个maven工程
1、下载SDK的第三方依赖
mvn dependency:tree
或者 mvn dependency:list.
然后 mvn dependency:analyze-report
2、然后跳过测试进行编译
mvn install -DskipTests
到目前为止跟eclipse没有一点关系,如果非要用eclipse,这里也简单讲下;不用eclipse的直接跳到4;
3、eclipse导入项目
a、导入(导入之前要将.project文件中顶部的<--//-->的整块注释删掉)
File > Import > Maven > Existing Maven Project
b、会遇到报错
**No marketplace entries found to handle maven-antrun-plugin:1.4:run in Eclipse. Please see Help for more information.**
直接忽略就好了;
c、还会有个错误(官方真的是有错误不调整。。。)
**Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.4:run (execution: default, phase: generate-test-resources).**
点击右键,选择**Mark goal run as ignored in eclipse.**直接忽略这个假错误
d、启用Checkstyle(这个有可能没有安装过)
安装:
Help --> Install New Software
CheckStyle插件地址:[http://eclipse-cs.sourceforge.net/update](http://eclipse-cs.sourceforge.net/update)
然后next选择安装,等待安装就好,可能需要半个小时
启用:
Project > Properties > Checkstyle
然后这几个选项:“Checkstyle active for this project”, “files outside source directories”, and “derived (generated) files”都钩上;
然后在“Local Check Configurations”选项卡,选择new添加新的,选择“External Configuration File”方式,然后会有个browser按钮,选择根目录的“checkstyle-config.xml” 文件即可;
最后应用确定;
e、完成
再说个eclipse必然恼人的,在测试类中Testconfig等一些类无法跳转,而且不能单独运行tests,原因就是eclipse认为test/java不是sources文件!!
4、关联环境进行测试
首先要更新网络地址:
/fabric-sdk-java/src/test/java/org/hyperledger/fabric/sdk/testutils/TestConfig.java
文件中:
private static final String LOCALHOST = "10.0.200.117";//Change test to reference another host .. easier config for my testing on Windows !
将LOCALHOST改为实际的地址!!!
可以直接在根目录使用:
mvn install
会顺便运行测试案例
5、使用IntelliJ IDEA进行单个测试
同样是导入一个maven项目,软件会自动下载依赖;
然后切换到tests视图,选择End2endIT.java运行即可!
三、可能会遇到的问题
1、No goals have been specified for this build. You must specify a valid lifecycle phase ……
紧跟<build>标签后面 加上<defaultGoal>compile</defaultGoal>即可
2、getPayload()报错
这个是sdk内容,直接忽略
网友评论