下载源码 v7.13.4
git clone https://github.com/elastic/elasticsearch.git
切换到对应tag:git checkout v7.13.4
checkout对应的tag到本地分支:git checkout -b v7.13.4
目录:D:\03.git\elasticsearch
下载elasitcsearch发布包
https://mirrors.huaweicloud.com/elasticsearch/7.13.4/
目录:D:\elasticsearch-7.13.4
下载jdk16
https://mirrors.huaweicloud.com/openjdk/16/
配置idea的jdk
idea的gradle配置
①:配置gradle user home
Gradle user home:该目录配置的是jar包的下载目录(D:\gradle\.gradle)
②:配置环境变量GRADLE_USER_HOME:D:\gradle\.gradle
※:①和②保证了idea的小像和gradlew命令下载的jar包在同一目录,避免重复下载
③:Use Gradle from选择gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionSha256Sum=ca42877db3519b667cd531c414be517b294b0467059d401e7133f0e55b9bf265
④:在D:\gradle\.gradle下编辑init.gradle
allprojects {
repositories {
maven { url 'file:///D:\01.develop\repo'} ## 这里是本地maven仓库地址,没有就会依次向下设置的地址寻找
maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/google/'}
maven { url 'https://maven.aliyun.com/repository/jcenter/'}
mavenLocal()
mavenCentral()
}
}
编译elasticsearch
点击idea的小像的同步,下载jar包
./gradlew :distribution:ar
chives:linux-tar:assemble ##linux包
./gradlew :distribution:archives:no-jdk-windows-zip:assemble ##windows包
./gradlew assemble ##所有的包
elasticsearch\distribution\archives\no-jdk-windows-zip\build\distributions\elasticsearch-7.13.4-SNAPSHOT-no-jdk-windows-x86_64.zip
https://systema.waliwang.com/ff/es/elasticsearch-7.13.4-SNAPSHOT.jar
http://139.196.162.93:8080/ff/es/elasticsearch-7.13.4-SNAPSHOT.jar
elasticsearch配置
main函数是:org.elasticsearch.bootstrap.Elasticsearch#main
-cp:elasticsearch.server.main
vm参数:
-Des.path.conf=D:\elasticsearch-7.13.4\config
-Des.path.home=D:\elasticsearch-7.13.4
-Djava.security.policy=D:\elasticsearch-7.13.4\config\java.policy
-Dlog4j2.disable.jmx=true
es.path.conf:es的配置文件
es.path.home:主要是加载modules,plugins
java.security.policy:java.policy的文件
执行gradlew和执行小象的区别?
gradlew使用的GRADLE_USER_HOME配置项是系统配置项
小象使用的GRADLE_USER_HOME是idea配置的(Gradle user home:该目录配置的是jar包下载目录D:\gradle\.gradle)
gradlew:固定使用gradle-wrapper.properties的distributionUrl指定的gradle
小象使用idea配置的Use Gradle from(Specified location;gradle-wrapper.properties)
最佳实践:
一、配置GRADLE_USER_HOME
系统变量的GRADLE_USER_HOME和idea配置的Gradle user home: 配置成相同的D:\gradle\.gradle 可以避免重复下载包
idea配置成gradle-wrapper.properties
这样gradlew和小象就会使用相同的gradle和GRADLE_USER_HOME
※:只能在项目目录下执行gradlew,gradlew其实不是一个配置在path下的命令。是项目根目录下的一个可执行文件
※:不用配置系统变量的GRADLE_HOME,当然这样不能在任意使用gradle命令。
验证gradlew和小象是否使用同一版本gradle
./gradlew clean
找到小象的clean
查看输出日志 gradle版本
二、不配置GRADLE_USER_HOME
不配置系统变量GRADLE_USER_HOME,不设置idea配置的Gradle user home,那么默认就是${user_home}/.gradle
可以提前创建${user_home}/.gradle,编辑好init.gradle
idea配置成gradle-wrapper.properties
那么gradlew和小象使用的都是gradle-wrapper.properties的gradle版本。下载的jar包都在${user_home}/.gradle
其他
gradle配置
GRADLE_USER_HOME:jar包的下载目录,跟maven的repo目录一个意思
GRADLE_HOME:gradle的安装目录,跟maven_home一个意思
idea的gradle配置
File | Settings | Build, Execution, Deployment | Build Tools | Gradle
①:Gradle user home:该目录配置的是jar包下载目录(D:\gradle\.gradle)。如果未配置,使用环境变量的GRADLE_USER_HOME,如果环境变量未配置,使用${user_home}/.gradle
②:Use Gradle from:Specified location 选择本地安装的gradle目录:D:\gradle\gradle-7.3.3
如果Use Gradle from选择gradle-wrapper.properties,那么使用项目的gradle/wrapper/gradle-wrapper.properties的配置
不同项目的gradle可能使用的gradle版本不一致。可以根据gradle-wrapper.properties配置手动下载对应版本的gradle,然后配置Use Gradle from:Specified location
③:命令行或者idea的terminal执行gradlew gradle命令时,使用的是环境变量配置的GRADLE_HOME:gradle的安装目录,可能跟idea的小像执行gradle命令使用的gradle版本不一定一样。
④:gradle-wrapper.properties参数说明
GRADLE_USER_HOME:环境变量或者idea的(Gradle user home)
distributionUrl:下载gradle地址,可以是本地文件目录
zipStoreBase和zipStorePath组合成下载保存gradle.zip的保存目录
distributionBase和distributionPath组合成了下载后的gradle.zip的解压目录
检查wrapper/dists下是否有对应版本。如果没有,下载zip包并解压到wrapper/dists
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionSha256Sum=c9490e938b221daf0094982288e4038deed954a3f12fb54cbf270ddf4e37d879
下载ml-cpp-7.13.4-SNAPSHOT.zip
使用阿里云服务器:wget https://prelert-artifacts.s3.amazonaws.com/maven/org/elasticsearch/ml/ml-cpp/7.13.4-SNAPSHOT/ml-cpp-7.13.4-SNAPSHOT.zip
修改elasticsearch\x-pack\plugin\ml\build.gradle
urlSystem.getProperty('build.ml_cpp.repo','https://prelert-artifacts.s3.amazonaws.com')
==>urlSystem.getProperty('build.ml_cpp.repo','https://systema.waliwang.com/ff/')
在服务器上放置ml-cpp-7.13.4-SNAPSHOT.zip下载文件
/data/prod/tomcat/webapps/ff/maven/org/elasticsearch/ml/ml-cpp/7.13.4-SNAPSHOT/ml-cpp-7.13.4-SNAPSHOT.zip
对应的下载链接:https://systema.waliwang.com/ff/maven/org/elasticsearch/ml/ml-cpp/7.13.4-SNAPSHOT/ml-cpp-7.13.4-SNAPSHOT.zip
下载jdk卡住:distribution:archives:jdk_bundled_windows_x64 > adoptopenjdk
打包命令如果是需要jdk,可能无法下载./gradlew :distribution:archives:windows-zip:assemble
可以换成不需要jdk的打包命令./gradlew :distribution:archives:no-jdk-windows-zip:assemble ##windows包
启动其他错误:
Unknown codebases。。。:org.elasticsearch.bootstrap.PolicyUtil#readPolicy去除259行的IllegalArgumentException("Unknown codebases "
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "setContextClassLoader")
在文件增加D:\elasticsearch-7.13.4\config\java.policy
permission java.lang.RuntimePermission "setContextClassLoader";
其他参考
https://zhuanlan.zhihu.com/p/188725714