当前位置: 首页 > 工具软件 > EthereumJ > 使用案例 >

区块链学习笔记(二)EthereumJ的编译及Idea开发环境搭建

袁雅逸
2023-12-01

前两个帖子只相当于是感受了一下区块链应用的编译、运行,没有真正的着手搭建二次开发环境,本次基于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了。
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=7070 #端口号
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7070 #端口号

[注意]在我实践过程中,当出现请求无响应的时候,我用切换是否翻墙来解决了。可能是我记错了,也可能是我服务器线路的问题,这个经验仅供参考,GFW的淫威之下,大家且番茄珍惜吧。

  • EthereumJ源代码,https://github.com/ethereum/ethereumj

编译运行,导入Idea工程

过程走通了,不过我的流程中的关键点理解还不是太深,参考的同学先严格按照我的步奏来吧,以后研究透了再更新。

  • 首先要运行EthereumJ。Run from command line. (官方手册的提法)
    打开cmd黑窗口,执行以下命令。
cd ethereumj
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 rungradlew 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…准备从区块入手,开展下一步的工作。

 类似资料: