Ubuntu18.04编译Log4J2
背景
由于漏洞需要紧急修复,发现2.15.0版本代码已经合并,所以来编译一下,替换生产中使用的core-jar。
环境准备
jdk 8 / 9 / 11环境(忽略)
maven3.6+
git2.2+(忽略)
maven环境准备
ubuntu有apt install安装命令,可以直接使用,这里只讲下载bin文件,如何配置到系统环境中。
下载后解压,我以3.6.3版本介绍
1.解压
sudo tar -zxvf /tmp/apache-maven-3.6.3.tar.gz -C /opt/
为了更好地控制Maven版本和更新,我们将创建一个符号链接,该链接将指向安装目录:
sudo ln -s /opt/apache-maven-3.6.3 /opt/maven
2.配置环境变量
sudo vim /etc/profile.d/maven.sh
3.根据自己环境的情况添加以下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_211
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
4.给脚本赋予可执行权限
sudo chmod +x /etc/profile.d/maven.sh
5.最后,让我们 加载环境变量 使用以下命令:
source /etc/profile.d/maven.sh
6.验证mvn安装情况
root@loyx04:/etc/profile.d# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /opt/maven
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_211/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-89-generic", arch: "amd64", family: "unix"
编译Log4j2
直接编译会遇到以下问题,因为我们使用的是jdk8环境,但是源码种API有做java9以上的支持,所以需要有java9环境,光有9还不够还需要jdk11。否则会报错
project log4j-perf: Cannot find matching toolchain definitions for the following toolchain types:
[ERROR] jdk [ version='[9, )' ]
[ERROR] jdk [ version='[11, )' ]
准备jdk9/11(省略)
将项目clone到本地,fork了官方项目,方便自己修改管理。
cd /home/impdatahd/software && git clone https://github.com/zhengkw/logging-log4j2
配置toolchains的xml文件
cd log4j-api-java9
cp ../toolchains-sample-linux.xml ../toolchains-sample-linux-9.xml
将其他chain删除,只保留9的,小心删除,标签对,很好检查!根据自己JDK9安装位置修改对应HOME目录!
<toolchains>
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>9</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/home/impdatahd/software/jdk-9.0.4</jdkHome>
</configuration>
</toolchain>
<!-- other toolchains -->
</toolchains>
修改以后编译
#查看当前位置
pwd
/home/impdatahd/software/logging-log4j2/log4j-api-java9
#编译
mvn clean install -t ./toolchains-sample-linux-9.xml
编译成功后,回到上级目录。
如果回到项目根目录cd …,执行命令mvn install -Dmaven.test.skip=true依然报该错误,请执行以下命令
cp ./toolchains-sample-linux-9.xml ~/.m2/toolchains.xml
mvn install -Dmaven.test.skip=true
[ERROR] jdk [ version=’[11, )’ ]
编译一段时间后,会发现error提示,需要11以上版本,和之前9的操作一样,不过这次直接去xml里面修改。
vim ~/.m2/toolchains.xml
<toolchains>
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>9</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/home/impdatahd/software/jdk-9.0.4</jdkHome>
</configuration>
</toolchain>
<!-- other toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/home/impdatahd/software/jdk-11.0.13</jdkHome>
</configuration>
</toolchain>
</toolchains>
添加完后继续编译
mvn install -Dmaven.test.skip=true
编译后核心jar位置
编译后源码位置
cd /home/impdatahd/software/logging-log4j2/log4j-core/target