elasticsearch 源码阅读第二天
昨天 gradle idea 命令成功构建后, 再从idea refresh工程时又一直报 java.home没设置成java10,折腾了半天,估计就是IDEA没更新数据,实在找不到入口了=更新了, 于是我就重启了一发笔记本... 果然好了,如下图, 全是大象,好激动 🐘🐘
看了会启动代码,发现全是 JAVA8的特性语法,不懂这个还真不懂了...之前也看过,但真的忘了,特别是Function<T,R>这块, 先遇到下图
调用的是
这明明是System类的静态方法, 为什么要通过 System::getenv 变成一个Function 然后调用apply进行调用实际的这个getenv方法 ??? 现在的我真的无法理解... 先标个记吧..
好了,下去买了个酸奶,路上突然有灵感, replacePropertyPlaceholders(Function getenv) 这样的参数传进来,就是方法实现级别的抽象,现在是传 System::getenv, 在其他方法调用replacePropertyPlaceholders 就能传他要的实现了, 增加了灵活性, 感受到了面向函数编程的味道了, 函数级的抽象,以前面向对象都是类 对象级别的抽象
继续 开始运行源码 >...... 啪以下立刻报错 the system property [es.path.conf] must be set ,问题来了,
es.path.conf 这个参数在哪配置呢 代码是system.getProperty("es.path.conf") 按理是在application,yml里。。。当然es里没有, 经过一番百度 好了,在源码工程里新建home 把可以使用的es的 config目录复制到home 然后 加上了运行时参数
然后再运行.... 又来了path.home is not configured
再添加 参数 如下
然后把在使用的es 包里的module复制到 home下 ,再运行又报错
Caused by: java.nio.file.NoSuchFileException: /Users/elbert/Documents/GitLocal/elasticsearch-source/home/modules/x-pack/plugin-descriptor.properties
怀疑是不是版本不一致,果然官方已经6.4.0了 我的是6.3.2, 好吧再下载一个es...再复制进去module
然后又开始了。。。org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Plugin [percolator] was built for Elasticsearch version 6.4.0 but version 7.0.0-alpha1 is running
啥 github里是7.0.0??
好的好的,我也是第一次拉源码,直接拉了master,果然不行,要拉最新的tag分支 才是最新发行的。。。 好的 晚上重新下载一次! 再编译一次!