# fabric java chaincode开发详细步骤!
作者:小桥夜雪
## 一. 配置相关环境
操作系统:ubuntu 16.04 LTS
fabric版本:0.6
### 1.配置fabric网络环境。
笔目前使用fabric0.6版本,基于docker容器配置,网上有各种教程,自己可以百度。
### 2.安装gradle环境。
安装gradle环境可以参考这一篇文章:http://blog.csdn.net/hejjiiee/article/details/53510209
### 3.安装REST API客户端
笔者使用firefox浏览器自带的RESTClient插件,具体安装方法可以自行百度。
### 4.编译java shim层的jar包文件。
#### (1)下载fabric源码
在OPATH路径下建立以下文件夹
```
mkdir -p $GOPATH/src/github.com/hyperledger
```
进入到刚建立的文件夹:
```
cd $GOPATH/src/github.com/hyperledger
```
从github上下载fabric0.6源码:
```
git clone https://github.com/hyperledger/fabric.git -b v0.6
```
#### (2)编译jar包
进入以下目录:
```
cd $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/shim/java
```
执行以下两条命令编译:
```
gradle -b build.gradle clean
gradle -b build.gradle build
```
执行结果如下:
![image2](C:\Users\Administrator\Desktop\HJJ\2.png)
这样java chaincode的编译运行环境就搭建好了。
## 二. 部署java chaincode范例进行测试
这里不过多赘述,可以参考这篇文章的步骤:https://www.ibm.com/developerworks/library/j-chaincode-for-java-developers/
## 三. 开发自己的java chaincode
### 1.设置开发环境
可以使用eclipse集成gradle插件进行开发。
#### (1)安装eclipse
网上有很多教程,自己搜索安装。
#### (2)安装gradle插件
打开eclipse-->help-->Eclipse Marketplace,然后搜索buildship,如下图:
![image1](C:\Users\Administrator\Desktop\HJJ\3.png)
然后点击install进行安装,安装完成后重启eclipse。
### 2.新建gradle项目
如图:
点击next;
点击next;
红圈处填写你的gradle目录,然后点击finish。
此时就会生成名为 ChainCode-test的gradle项目。
3.开发java chaincode
(1) 修改build.gradle文件
打开build.gradle文件,用chaincode任一范例中的build.gradle文件覆盖此文件的内容。此时要注意把build.gradle文件中mainClassName字段改为你相应的目录,如图:
然后进行Refresh操作,如图:
此时项目会自动下载相关的jar包。
(2)新建java文件,开发代码。
代码开发可以用如下模板:
package test;
import org.hyperledger.java.shim.ChaincodeBase;
import org.hyperledger.java.shim.ChaincodeStub;
public class main extends ChaincodeBase {
@Override
public String run(ChaincodeStub stub, String function, String[] args) {
System.out.println("In run, function:"+function);
switch (function) {
case "init":
return null;
case "put":
for (int i = 0; i < args.length; i += 2)
stub.putState(args[i], args[i + 1]);
break;
case "del":
for (String arg : args)
stub.delState(arg);
break;
case "hello":
System.out.println("hello invoked");
// log.info("hello invoked");
break;
}
return null;
}
@Override
public String query(ChaincodeStub stub, String function, String[] args) {
String value=stub.getState(args[0]);
if(value!=null&&!value.isEmpty())
return "key="+args[0]+" value="+value;
else
return "no value for "+args[0];
}
@Override
public String getChaincodeID() {
String id="hjj";
System.out.println("The ChaincodeID is "+id);
return id;
}
public static void main(String[] args) throws Exception {
System.out.println("starting to test chaincode"+args);
new main().start(args);
}
}
需要导入其他jar包的时候:在自己的 Gradle 项目里建立一个名为 libs (这个名字可以自己定义,不一定非要叫这个名字)的文件夹,把自己本地的 jar 包拷贝到这个文件夹中。
然后在build.gradle配置如下:
dependencies { compile fileTree(dir:'libs',include:['*.jar'])}
然后在此进行进行Refresh刷新操作。
(3)代码开发完成后,进行编译调试。
在Gradle Tasks面板选中要编译的项目,然后展开build,右键单击Run Gradle Tasks进行编译:
若显示如下,则编译成功:
此时在你的gradle项目中会出现build文件夹,此时可直接在此文件夹下运行gradle -b build.gradle run
命令运行程序,也可以进入build-->distributions文件夹,会看到如下两个压缩包:
解压任一压缩包,并进入ChainCode-test-->bin目录,此时可看见可执行文件:
在此目录下打开终端窗口,输入./ChainCode-test命令执行程序。(注意:此时fabric网络需要开启,就会在network窗口中看见链码注册到区块链网络的相关信息)