本篇文章网上有迹可寻,但是每个人在搭建的时候会遇到各种问题,与本地环境有关,下面写下我自己的搭建过程以及遇到的问题:
1、资源准备
ElasicSearch版本:6.0.0: https://github.com/elastic/elasticsearch
安装jdk(jdk1.8以上,本人用的是1.8.0_131)
安装gradle(3.3以上,本人用的是4.3.1) 需要安装环境变量网上有好多,
下载地址 http://services.gradle.org/distributions/
上面资源都准备好了后 ,开始
1.配置软件包仓库源地址 (此步骤因为需要从包仓库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‘
}
}
2、cmd控制台进入elasticsearch源码根目录,执行gradle idea。(idea导入源码前,必须进行此步骤,否则会报错)
3、IDEA导入工程,导入的时候需要设置gradle_home,配置为gradle的安装根目录。勾选Offline work(否则会连到官网私服下载,会超级慢)和Use local gradle distribution。
gradle 安装使用的时候本人也碰到了坑,安装完代码执行gradle idea 编译成功,之后导入idea
但是导入的时候包错,说jdk版本只能是1.8或以上,当时我这里用的是jdk1.6,然后我选择1.8
大家可以看到 有好多jdk版本,但是我选多次都不管用,之后才知道这里面改的时候不好用,只有目前图片上 use java_home 这个选中了才好用,
如果本地安装的时候有1.8版本 ,但是 use java_home 这里面指向的还是低版本,本地windows环境安装了多个jdk 在cmd命令窗口里面执行java -version发现版本确实是1.8
开始的时候以为这个如果是1.8 环境变量也就是1.8 ,但是gradle默认就是不指向1.8 查看gradle的配置文件发现取的jdk版本就是本机环境变量配置的版本,
然后查看本机环境变量配置,发现确实是1.6.。。。。。。 之后改了环境变量配置 生效,导入项目成功
4、编译代码 在core下 的jar 编译
5、启动elasticsearch
在core下org.elasticsearch.bootstrap.Elasticsearch 这个类 右键运行main方法
报错 启动包es.path.conf未设置
解决方法 :配置jvm参数
这个是自己项目里面distribution 下的路径
-Des.path.home=F:\es_code\elasticsearch-6.0\distribution\src\main\resources
-Des.path.conf=F:\es_code\elasticsearch-6.0\distribution\src\main\resources\config
报错
2017-12-06 19:18:42,999 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
解决办法
在里面加上 -Dlog4j2.disable.jmx=true
报错 Unsupported transport.type
这个报错 网上说将发行版modules目录下内容拷贝过来。
对于刚开始接触elasticsearch 对上边的说法非常模糊,
自己在处理的时候 跟踪代码看了下发现如果用这个jar包的话需要 有个描述文件,
而我在源码里面modules 下看到的没有这个文件,这个时候才意识到网上所说的可能是正在运行中的能直接发布运行的,
之后看了下linux上正在跑着的elasticsearch下的modules文件里面的内容,果然就应该是这个下面的内容。这里进行补充
所谓发行版modules 就是现在elasticsearch 在linux上边能够部署运行的版本,我们把这里面的modules里面的 文件拷贝下来 放在elasticsearch-6.0\distribution\src\main\resources\modules 下
注意 版本要一致
报错 stirng index out of range -1
跟踪源码,发现如下原因:ES中对于modules中对于jar包名称包含elasticsearch-rest-client.jar包的,在编译的时候,因为本地编译默认是snapshot的,所以会追加snapshot,这样的化版本号变为了6.0.0-snapshot,而modules中是从发行版拷贝过来的,结合代码上追加的codebase,变为了codebase.elasticsearch-rest-client-6.0.0.jar,这样index版本号就出错了。
解决方法 这个
修改 core 下面的 org.elasticsearch.Build.java 74行,
// isSnapshot = true;
isSnapshot = false;
有的时候有可能下载下来的源码 打包的版本是6.1.0-snapshot 本人就碰到了这种情况下载的是6.0的源码但是在编译的 时候发现 6.1.0-snapshot 是这个版本
跟踪源码发现 org.elasticsearch.Build.java
主要做验证这块是Version里面的版本信息,修改下这个里面的当前版本就行了。再次启动OK。