本文主要通过替换 class 文件的方法对 Ambari 二次开发,可以达到快速开发测试的目的。
在二次开发 Ambari 时,需要对开发的内容进行快速测试,如果使用完整的 CI 打包流程部署测试则太庞大笨重,这里介绍通过替换 class 文件的方法进行快速部署测试的方法。
环境准备
一套部署好的 Ambari 环境
这套环境已经部署好 Ambari,可正常运行,供测试使用。IDE 开发工具
这里使用 IDEA 开发工具。压缩软件
一款压缩软件,这里使用 7-zip。Postman
最好准备一个 Postman 进行接口测试。
二次开发
比如我们修改一个类,将 org.apache.ambari.server.utils.ShellCommandUtil
类的这段代码的 process.waitFor();
调换下位置,避免在执行大输出量的 shell 语句时造成阻塞,源代码如下:
1 | //TODO: not sure whether output buffering will work properly |
将其修改为:
1 | String stdout = streamToString(inputStream); |
然后在 IDEA 中运行 AmbariServer
主程序 org.apache.ambari.server.controller.AmbariServer
,会报如下找不到日志文件的错误,这个属于正常,而且要的就是这个效果。
1 | log4j:WARN No appenders could be found for logger (org.apache.ambari.server.utils.AmbariPath). |
代开 ambari-server 对应的 target 文件夹 \ambari-server\target
,可以看到里面有编译好的 class 文件。
替换 class 文件
将 Ambari 测试环境中的 ambari-server-2.7.1.0.0.jar
发送到本地做修改使用,发送到本地之前最好做备份,以便回退。
1 | cd /usr/lib/ambari-server/ |
找到修改的 class 文件
使用压缩工具直接打开 jar 包,并找到相应的包,将修改的 class 直接拖到这个包内,并同意如下弹框提示。
替换好后直接关闭这个压缩软件打开的窗口。
替换 jar 包
在 Ambari 测试环境中停止 ambari-server,删除原有 ambari-server-2.7.1.0.0.jar
,替换上新的 jar 包。
1 | ambari-server stop |
开启 ambari-server,为了方便测试,这里使用 debug 模式启动,这样方便调试,具体调试方法可以参考文章:Ambari 远程 Debug 调试
1 | ambari-server start --debug |
测试接口
这时可以通过在 Ambari 测试环境中找到相应的界面或使用 Postman 调用接口就行调试。
总结
主要是通过替换 calss 文件修改 jar 包,达到快速开发测试的目的,其实这还是有些繁琐,改动一点儿还要编译、替换 class、替换 jar 包、启停服务等操作,有更方便的方法欢迎告知,联系方式。