最近Log4j的漏洞搞的互联网乌烟瘴气的……大部分Java栈的同学都为此忙了起来。
ElasticSearch是最常见的搜索引擎,Java开发的,默认使用的还是2.11的Log4j,也在漏洞影响的范围。
呐,我本身并不怎么玩儿Java,但因为项目用到了ElasticSearch,所以在官方未出台方案前,根据浩哥建议,直接替换对应低版本jar包可解决问题。
那么问题来了,在只有源码和IDEA的情况下,如何build Log4j呢?经过一些摸索,找到个方法,当然,这二把刀的方法只能说是能用,你要说专业优雅那绝对谈不上。
如果有Java的大拿知道一些优雅的姿势方法,还望不吝赐教。
下面说下编译方法:
- 前置IDEA已经搞定了maven。
- https://downloads.apache.org/logging/log4j/2.15.0/ 下载src源码并解压。
- 重命名
toolchains-sample-win.xml
到toolchains.xml
- 备份IDEA的配置文件(注意,以下路径需替换为自己IDEA安装的实际路径):
D:\Program Files\JetBrains\IntelliJ IDEA 2021.1\plugins\maven\lib\maven3\conf\toolchains.xml
将刚才重命名的xml覆盖同目录文件。
- 打开
toolchains.xml
,修改里面实际jdkHome的路径,缺什么补什么,比如没有Java9,那就下载一个Java9并把路径改对。 - 命令行进入源码目录,使用以下指令编译(注意,
pom.xml
的elastic.version建议修改为你对应的版本):mvn install -DskipTests
- 之后,耐心等待各种编译下载(必要时可以启动IDEA打开源码目录,也会自动sync下载所需依赖)。
- 基本上编译出如下四个文件就可以了:
log4j-1.2-api-2.15.0.jar
log4j-api-2.15.0.jar
log4j-core-2.15.0.jar
log4j-slf4j-impl-2.15.0.jar - 删除ElasticSearch目录下的对应jar:
rm -rf /elasticsearch/lib/log4j-api-2.11.1.jar
rm -rf /elasticsearch/lib/log4j-core-2.11.1.jar
rm -rf /elasticsearch/modules/repository-url/log4j-1.2-api-2.11.1.jar
rm -rf /elasticsearch/modules/x-pack-core/log4j-1.2-api-2.11.1.jar
rm -rf /elasticsearch/modules/x-pack-identity-provider/log4j-slf4j-impl-2.11.1.jar
rm -rf /elasticsearch/modules/x-pack-security/log4j-slf4j-impl-2.11.1.jar - 将最新版文件复制过去:
cp log4j-api-2.15.0.jar /elasticsearch/lib/
cp log4j-core-2.15.0.jar /elasticsearch/lib/
cp log4j-1.2-api-2.15.0.jar /elasticsearch/modules/repository-url/
cp log4j-1.2-api-2.15.0.jar /elasticsearch/modules/x-pack-core/
cp log4j-slf4j-impl-2.15.0.jar /elasticsearch/modules/x-pack-identity-provider/
cp log4j-slf4j-impl-2.15.0.jar /elasticsearch/modules/x-pack-security/ - 注意修改好文件权限,之后重启ElasticSearch服务即可。
- 当然,其实下载源码的地方,bin的压缩包里就是编译好的jar,我整理只是为了梳理下基本的编译流程,迫切需要jar包的同学可以直接下载bin的包。
参考资料
https://github.com/apache/logging-log4j2
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。