Eleaticsearch源码分析(一)编译启动
转自:https://lunatictwo.github.io/2017/12/21/Eleaticsearch%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90(%E4%B8%80)%E7%BC%96%E8%AF%91%E5%90%AF%E5%8A%A8/
源码下载
地址:https://github.com/elastic/elasticsearch
分支
使用git tag
命令可以看到目前 es 的各个版本分支,这里我们分析 6.0 版本:
git checkout v6.0.0
编译
前提需要jdk10的支持
es使用了gradle,在es源码根目录执行:(下载依赖)
gradle idea
之后执行:(编译)
gradle build -x test
(网太慢,下了好几个小时 . md...)
注意这两步要在项目导入IDEA之前操作,源码中 build.gradle 有相关提示:
/ Make sure gradle idea was run before running anything in intellij (including import).
File ideaMarker = new File(projectDir, '.local-idea-is-configured')
tasks.idea.doLast {
ideaMarker.setText('', 'UTF-8')
}
if (System.getProperty('idea.active') != null && ideaMarker.exists() == false) {
throw new GradleException('You must run gradle idea from the root of elasticsearch before importing into IntelliJ')
}
运行
将项目导入IDEA,找到es启动主类:org.elasticsearch.bootstrap.Elasticsearch,
配置 Run/Debug Configurations:
Main Class: org.elasticsearch.bootstrap.Elasticsearch
VM Options: -Dlog4j2.disable.jmx=true -Des.path.home=/Users/Code/utils/elasticsearch-6.0. -Des.path.conf=/Users/Code/utils/elasticsearch-6.0./config
注意要配置 -Des.path.home 及 -Des.path.conf 让 es 发现主路径及配置文件路径,然后就可以愉快的启动了。
报错 1 jar hell
这个错误是因为 es 中一个 jar 文件中有大量的重复类,代码进行了审查,注释掉相关的 check 即可:
elasticsearch/core/src/main/java/org/elasticsearch/plugins/PluginsService.java line : JarHell.checkJarHell(union);
elasticsearch/core/src/main/java/org/elasticsearch/bootstrap/Bootstrap.java line : JarHell.checkJarHell();
报错 2 Security.java 类中 String index out of range: -1
源码中使用了 hardcode 的方式来校验 jar 包,会造成冲突,GitHub上边有相关的 Issue:Internal: Add versionless alias for rest client codebase in policy files #26521
在 elasticsearch/core/src/main/java/org/elasticsearch/bootstrap/Security.java 中修改 esVersion 的获取方式即可:
//final String esVersion = Version.CURRENT + (Build.CURRENT.isSnapshot() ? "-SNAPSHOT" : "");
final String esVersion = Version.CURRENT.toString();
Eleaticsearch源码分析(一)编译启动的更多相关文章
- Tomcat源码分析之—具体启动流程分析
从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...
- php中foreach源码分析(编译原理)
php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...
- JVM源码分析之JVM启动流程
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十四篇. 今天呢!灯塔君跟大家讲: JVM源码分析之JVM启动流程 前言: 执行Java类的main方法,程序就能运 ...
- Jvm(jdk8)源码分析1-java命令启动流程详解
JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
- tomcat8 源码分析 | 组件及启动过程
tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...
- 详解Tomcat系列(一)-从源码分析Tomcat的启动
在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...
- Tomcat源码分析(从启动流程到请求处理)
Tomcat 8.5下载地址 https://tomcat.apache.org/download-80.cgi Tomcat启动流程 Tomcat源码目录 catalina目录 catalina包含 ...
- kafka源码分析之一server启动分析
0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...
随机推荐
- 利用C#访问注册表获取软件的安装路径
文章地址:https://blog.csdn.net/yl2isoft/article/details/17332139
- [译]在vuejs中使用任意js库
原文 全局变量 最naive的办法是通过附加类库到window对象,使之成为全局变量: entry.js window._ = require('lodash'); MyComponent.vue e ...
- Coursera, Deep Learning 5, Sequence Models, week2, Natural Language Processing & Word Embeddings
Word embeding 给word 加feature,用来区分word 之间的不同,或者识别word之间的相似性. 用于学习 Embeding matrix E 的数据集非常大,比如 1B - 1 ...
- struts2简单入门-关于Result标签Type属性的说明
Result标签 作用 当action执行完毕,后要返回什么样的视图. Type属性 决定返回的是什么视图. struts-default.xml的Type属性的定义 <result-types ...
- canvas粒子背景
- Windows下python安装运行
1. 在python官网 https://www.python.org/downloads/windows/ 选择要下载的版本,我下载了最新版本 2. 双击运行 3. naxt 4. install ...
- gradle文件中自定义字段值在java代码中使用
1. 在build.gradle 中 buildConfigField 的参数有3个 第一个类型 第二个为名称 第三个是值 如果是字符串类型 请不要忘记 双引号! buildTypes { ...
- Javascript入门(四)条件控制语句
一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...
- mysql 查询优化 ~ select count 知多少
一 简介:今天咱们来聊聊mysql的查询总数 二 具体介绍 1 从引擎层面说 myisam myisam的扫描总行数是非常快的,这是因为myisam会将表的总行数存储起来,定期维护,但是注意,一旦加 ...
- 找出程序GasMileage中的哪一行与下列叙述相对应:
找出程序GasMileage中的哪一行与下列叙述相对应: a.通知程序将使用Scanner类 import java.util.Scannner; b.创建一个Scanner类的对象 Scan ...