转自: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源码分析(一)编译启动的更多相关文章

  1. Tomcat源码分析之—具体启动流程分析

    从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...

  2. php中foreach源码分析(编译原理)

    php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...

  3. JVM源码分析之JVM启动流程

      原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十四篇. 今天呢!灯塔君跟大家讲: JVM源码分析之JVM启动流程 前言: 执行Java类的main方法,程序就能运 ...

  4. Jvm(jdk8)源码分析1-java命令启动流程详解

    JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...

  5. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  6. tomcat8 源码分析 | 组件及启动过程

    tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...

  7. 详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  8. Tomcat源码分析(从启动流程到请求处理)

    Tomcat 8.5下载地址 https://tomcat.apache.org/download-80.cgi Tomcat启动流程 Tomcat源码目录 catalina目录 catalina包含 ...

  9. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

随机推荐

  1. 当一些库和类无法在Silverlight工程中使用

    因为要更新空间数据,所以需要导入MDB文件.但是Silverlight中不能直接使用OdbcConnection类读取MDB文件,所以需要新建一个ASP.NET空Web应用程序 工程 随后在此工程中, ...

  2. 解决chrome浏览器在win8下没有注册类的问题

    解决chrome浏览器在win8下没有注册类的问题 新建一个txt,里面存放代码 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SO ...

  3. vs 调式连接oracle报错问题32,64位问题

    wind8 系统选择项目时生成目标平台选择为X86 报错“System.Exception”类型的未经处理的异常在 WindowsFormsApplication1.exe 中发生 其他信息: 尝试加 ...

  4. Linux 下杀毒可用工具 clamav

    clamav 杀毒工具:Linux下可用的杀毒工具: 下载地址: 最新 包 0.101 官网下载地址:http://www.clamav.net/downloads最新包地址: https://cla ...

  5. C#Windows 服务的安装说明

    安装/卸载的步骤: 1 . .点击 开始,运行中输入cmd,获取命令提示符win7需要已管理员的身份启动,否则无法安装 2. 输入 : cd C:\Windows\Microsoft.NET\Fram ...

  6. Expression知识

    http://www.cnblogs.com/Ninputer/archive/2009/08/28/expression_tree1.html#!comments

  7. NIO & Netty框架学习

    channle buffer selector.selectionKey 关于websocket http://lixiaohui.iteye.com/blog/2328068 长连接和短连接 htt ...

  8. IDEA-使用技巧

    IDEA--个性化配置 - 心飞扬的博客 - CSDN博客--里面很好,http://blog.csdn.net/afzaici/article/details/71524643 IntelliJ I ...

  9. java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?

    java程序中默认浮点形值常量是什么类型的 默认的所有的浮点型数值都是double型

  10. Windows 7 SP1无人值守自动应答文件制作

    使用U盘安装Windows系统时,很多人都会使用UltraISO工具来制作U盘启动盘,然后插入到电脑中加以安装.系统的安装过程中,需要一步一步手动选择或者输入配置,Windows是支持无人值守自动应答 ...