流程
- 下载azkaban源码包
- 用Gradle编译azkaban源码包
- 将编译完的单节点工程包运行
官方流程
注意
- azkaban源码包对JDK几乎没有要求。
- azkaban源码包对Gradle要求较高。
- Gradle对JDK要求较高。
- azkaban工程包对JDK有一定要求。
azkaban源码包下载
- 通过git下载。
yum install git
git clone https://github.com/azkaban/azkaban.git
- 压缩包下载。
尽量找发行版下载,就是边上没有Pre-release的
azkaban压缩包github
prer-elease
Gradle下载
- 因为azkaban源码包对Gradle有较高要求,所以在azkaban里面就会有配置期望的Gradle版本。如果我们直接编译,会从github上下载,这样会有下载出错的风险。所以我以压缩包的形式下载,然后上传。
-
查看配置文件,确认自己需要的Gradle版本。
查看配置文件
确定版本 - 下载对应Gradle,通常都是 complete
Gradle
Gradle和JDK对应关系
Gradle5.和Gradle6.的编译差别
Gradle 6.x and later
This version of Gradle usescom.gradle.enterprise
as the plugin ID. The plugin must be applied in the settings file of the build.
Gradle 5.x
This version of Gradle uses com.gradle.build-scan as the plugin ID. The plugin must be applied to the root project of the build.
注意:如果当前虚拟机下的JDK为13及以上时,可能会出现特殊情况。因为azkaban源码包在4.0版本前基本都是要求Gradle的版本在5.*之前。而Gradle5.*之前的JDK根据对照表为JDK12左右。这样会出现,azkaban源码包能适应JDK,而能适应当前azkaban源码包的Gradle的版本,不能适应当前JDK环境。且不说当前Gradle能否使用,当其版本为5.*之前和6.*之后,Gradle的编译要求也有变化。所以在azkaban4.0版本的时期,在编译的过程中,JDK1.8是最稳定的。若当前JDK较高,那我有2个建议。一,直接找别人编译完的工程包进行后续操作。二,新建一个虚拟机用来编译,获取工程包。
-
将下载的Gradle放到指定目录,同时修改配置文件。
Gradle.zip放置的文件位置
将原来的git源换成自己的zip -
sudo yum install -y gcc-c++*
安装完成 -
sudo yum install gcc
安装完成
上述两个步骤我也不是很明白,但有的教程就是这么写的,感觉没用到。 -
指定目录下编译
目录+结果图
./gradlew build installDist -x test
-x test用来跳过测试,这个过程有可能会出问题。
获取工程包及运行。
-
单节点工程包所在位置
单节点工程包所在位置 - 拷贝一份到自己想要的位置,然后解压就行。
-
bin/start-solo.sh
运行项目,务必在该目录下这样运行
注意:若当前JDK的版本为1.9及以上,可能会出现映射问题。
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @7be0cc22
JDK1.9模块化之后,JRE环境缺失,有东西找不到了。需要手动添加上
-
进入sh执行文件目录
sh目录 - 对internal-start-solo-server.sh修改
java --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens java.base/java.lang=ALL-UNNAMED \
${AZKABAN_OPTS} -cp ${CLASSPATH} azkaban.soloserver.AzkabanSingleServer -conf ${conf} $@ &