ElasticSearch本地调测环境构建

ElasicSearch版本:6.0.0:https://github.com/elastic/elasticsearch.git

1:安装JVM(JVM1.8以上)

2:安装gradle(3.3以上)

下载:gradle下载地址:http://services.gradle.org/distributions/,下载4.3版本。(本人第一次安装的是4.4.5,结果到后面执行gradle idea指令的时候,下载不到gradle-logger-4.4.5的包,阿里的maven或者jcenter都没有,最新的归档的只有4.3)

环境变量:配置GRADLE_HOME到你的gradle根目录当中,然后把%GRADLE_HOME%/bin加到PATH的环境变量。

检查:进入cmd控制台,执行gradle -V,会输出Groovy,JVM等的版本,说明安装OK

3:下载elasticsearch源码:

下载ElasticSearch代码:https://github.com/elastic/elasticsearch,(本人下载的是6.0.0版本):

4:配置软件包仓库源地址(如果忍受得了下载的网速,此步骤可选。此步骤因为需要从包仓库jcenter或者apache的maven库下载依赖额所有jar,会很漫长,耗费了40分钟,使用国内的仓库源,只需要5分钟即可)

  • C:Users用户.gradle下建立init.gradle文件
  • 编辑文件内容如下:

allprojects{

    repositories {

        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'

        all { ArtifactRepository repo ->

            if(repo instanceof MavenArtifactRepository){

                def url = repo.url.toString()

                if (url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {

                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."

                    remove repo

                }

            }

        }

        maven {

            url REPOSITORY_URL

        }

    }

}

  • 编辑${elasticsearch源码根目录}distributionuild.gradle文件,红色部分替换为如下。

buildscript {

  repositories {

    maven {

      url "http://maven.aliyun.com/nexus/content/groups/public/"

    }

  }

  dependencies {

    classpath 'com.netflix.nebula:gradle-ospackage-plugin:3.4.0'

  }

}

5:执行gradle idea

cmd控制台进入elasticsearch源码根目录,执行gradle idea。(idea导入源码前,必须进行此步骤,否则会报错)

 

6:ElasticSearch工程导入IDEA

IDEA导入工程,导入的时候需要设置gradle_home,配置为gradle的安装根目录。勾选Offline work(否则会连到官网私服下载,会超级慢)和Use local gradle distribution。

7:编译

IDEA中view->tool windows->gradle点击,在gradle project视图栏目里找到core工程,点击build编译,也可以选择jar,编译后会在coreuilddistributions下生成elasticsearch的jar包。

 

8:启动

Elasticsearch的启动类:org.elasticsearch.bootstrap.Elasticsearch,右键运行。

错误一:

Error:Unable to make the module: core_main, related gradle configuration was not

执行

解决方式:刷新gradle工程

 

问题二:启动报错

 

解决方式:

搞了半天是IDEA和gradle的兼容性bug问题:

https://stackoverflow.com/questions/42587487/noclassdeffounderror-after-intellij-idea-upgrade

编译无问题,运行时找不到依赖的类。

 

根据所说,此bug在IDEA的新版本解决了,but我的IDEA版本是:2016.3.4

官网下载IDEA 2017.2.5版本:

https://www.jetbrains.com/idea/download/previous.html?fromIDE=

新版本安装后,此问题解决。

问题三:启动包es.path.conf未设置。

 

查看源码的启动脚本:

distributionsrcmain esourcesin下elasticsearch.sh中:

 

所需的配置文件在源码的位置:

G:github-javaelasticsearch-6.0.0distributionsrcmain esourcesconfig。故而设置两个JVM环境变量即可:

 

再次启动此问题解决。

问题四:access denied ("javax.management.MBeanTrustPermission" "register")

 

解决方式:设置JVM环境变量如下:-Dlog4j2.disable.jmx=true

 

问题五:加载不到plugin。

解决方式:参照发行版,发行版目录下有空的plugins目录,在G:github-javaelasticsearch-6.0.0distributionsrcmain esources下也建立空的plugins目录。

问题六:Unsupported transport.type

 

解决方式:将发行版mudules目录下内容拷贝过来。

问题七:空指针异常:

 

跟踪源码,发现如下原因:ES中对于modules中对于jar包名称包含elasticsearch-rest-client.jar包的,在编译的时候,因为本地编译默认是snapshot的,所以会追加snapshot,这样的化版本号变为了6.0.0-snapshot,而modules中是从发行版拷贝过来的,结合代码上追加的codebase,变为了codebase.elasticsearch-rest-client-6.0.0.jar,这样index版本号就出错了。

 

解决方式:修改org.elasticsearch.Build 74行,

// isSnapshot = true; by angie_hawk7

isSnapshot = false;

 

也可以设置jvm环境变量:build.snapshot

再次启动OK

 

10:测试

原文地址:https://www.cnblogs.com/hrbeu05/p/7954555.html