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源码根目录}\distribution\build.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,编译后会在core\build\distributions\下生成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未设置。
查看源码的启动脚本:
distribution\src\main\resources\bin\下elasticsearch.sh中:
所需的配置文件在源码的位置:
G:\github-java\elasticsearch-6.0.0\distribution\src\main\resources\config。故而设置两个JVM环境变量即可:
再次启动此问题解决。
问题四:access denied ("javax.management.MBeanTrustPermission" "register")
解决方式:设置JVM环境变量如下:-Dlog4j2.disable.jmx=true
问题五:加载不到plugin。
解决方式:参照发行版,发行版目录下有空的plugins目录,在G:\github-java\elasticsearch-6.0.0\distribution\src\main\resources下也建立空的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:测试