版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guokaikevin/article/details/53441025
前两个帖子只相当于是感受了一下区块链应用的编译、运行,没有真正的着手搭建二次开发环境,本次基于Ethereum的Java版客户端EthereumJ进行学习,着手搭建Gradle+Idea的开发环境。
在尝试的过程中,遇到了gradle的问题,gradle是个很好的构建公举,但实话实说,我之前没有怎么用过gradle,所以遇到了很多问题,不过让我吃惊的是,中文搜索不到任何关于EthereumJ的安装编译的帖子,英文的也很少。(哈哈~不会憨妮熊成功拿下EthereumJ中文开发教程一血了~~)。所以过程中,也有些不确定的东西,有大牛赐教的话,就更好了,大家多交流吧。
为什么选择EthereumJ,是因为憨妮熊比较熟悉Java,BitCoin是用C++开发的,Ethereum Go是用Go语言开发的,尝试看了一下源代码,基本架构能明白,但是要想做点事情,或者深入下去,语言确实有一定障碍,所以着手考虑这个Java的客户端。
所需环境
操作系统,Windows 10,之前用的Linux都是虚拟机,考虑到要用到开发的IDE,虚拟机运行比较吃力,所以果断选择Windows了,原理都一样。
idea 2016.X 版本就好,我用的是2016.1.1 Community版。
gradle。idea默认是自带gradle的,也可以自己去官网下载安装。
首先, 安装很简单,需要配置一下path,gradle的Home目录在Windows下是C:\Users\憨妮熊\.gradle.
其次由于伟大的GFW,需要配置翻墙,我使用的是HTTP/socket代理方式,老司机们应该都懂怎么弄,代理软件设定好之后,在%gradle Home%下面新建一个文本gradle.properties,里面添加如下代码后,就可以跨过GFW了。
1 systemProp.http.proxyHost=127.0.0.1
2 systemProp.http.proxyPort=7070 #端口号
3 systemProp.https.proxyHost=127.0.0.1
4 systemProp.https.proxyPort=7070 #端口号
[注意]在我实践过程中,当出现请求无响应的时候,我用切换是否翻墙来解决了。可能是我记错了,也可能是我服务器线路的问题,这个经验仅供参考,GFW的淫威之下,大家且番茄珍惜吧。
EthereumJ源代码,https://github.com/ethereum/ethereumj
编译运行,导入Idea工程
过程走通了,不过我的流程中的关键点理解还不是太深,参考的同学先严格按照我的步奏来吧,以后研究透了再更新。
首先要运行EthereumJ。Run from command line. (官方手册的提法)
1 打开cmd黑窗口,执行以下命令。
2 cd ethereumj
3 gradlew run
这一步开始一定要翻墙,因为有一个spring的依赖包是没办法直接获取的。正常运行后,在黑窗口底部会有进度百分比,当百分比读到70%-80%的时候,你会看到输出的字符提示,应该是在同步区块了,同时,可以发现在ethereumj/ethereumj-core/下面,出现新文件夹database,并且在实时更新。这时候我选择了ctrl+c关闭,因为区块比较大,我们的目的是学习研究代码,准备二次开发,所以先关闭。
导入到Idea
首先需要在cmd窗口里面运行gradlew build,同样在cmd窗口底部可以看到进度百分比,当我的百分比到82%的时候,提示出了一个错误,被跳过了,但是百分比长时间不再改变,此时我ctrl+c结束。
然后,我按照官方手册的方法,将工程导入到了Idea中。具体步奏是:IDEA: * File -> New -> Project from existing sources… * Select ethereumj/build.gradle * Dialog “Import Project from gradle”: press “OK” * 。此时,应该能够正常导入,建立Idea工程。
[注意]如果没有用gradlew run和gradlew build两个命令将EthereumJ编译成功,Idea在导入的时候是会执行build操作的,我的经验是通常会失败。
二次开发
至此,我们就可以基于EthereumJ进行二次开发了,官方有个说明https://github.com/ether-camp/ethereumj.starter,这时候就可以编译运行org.ethereumj.Start或者任意一个org.ethereum.samples.*或者你自己写一个main。
个人感觉EthereumJ更像一个核心库,代码包名字都叫ethereumJ-core,官方是比较支持大家新建自己的工程,讲工程依赖在ethereumJ-core上的。
To be continued…准备从区块入手,开展下一步的工作。
---------------------
作者:Archmage1024
来源:CSDN
原文:https://blog.csdn.net/guokaikevin/article/details/53441025
版权声明:本文为博主原创文章,转载请附上博文链接!