【发布时间】:2022-01-16 20:39:24
【问题描述】:
我有一个可能正在使用 Log4j 的 .jar 项目。如何查看该 Log4j 的版本号?
这是一个可执行的 JAR 文件。我没有源代码,无法反编译。
【问题讨论】:
标签: java jar log4j executable-jar
我有一个可能正在使用 Log4j 的 .jar 项目。如何查看该 Log4j 的版本号?
这是一个可执行的 JAR 文件。我没有源代码,无法反编译。
【问题讨论】:
标签: java jar log4j executable-jar
解压 JAR 文件并查找清单文件 (META-INF\MANIFEST.MF)
unzip -p file.jar META-INF/MANIFEST.MF
【讨论】:
org.apache.log4j.Layout.class.getPackage().getImplementationVersion()
【讨论】:
如果你对服务器或主机有 sudo shell 访问权限,你可以通过这个或类似的东西得到快速而肮脏的答案:
sudo find / -name "*log4j*" -print -exec unzip -p {} META-INF/MANIFEST.MF \;
正如其他答案中提到的,这不适用于所有 JAR 文件,但它似乎对我来说。
【讨论】:
解压缩应用程序的 JAR 文件并检查目录“META-INF\maven\org.apache.logging.log4j\log4j-core”中的 pom.xml/property 文件中的版本
【讨论】:
如果您使用的是Linux,这会有所帮助。它查找 Log4j JAR 文件,提取它们的清单文件并打印 Implementation-Version: 行,这将显示 Log4j 的版本。
locs=( $(sudo find / -name 'log4j*'|grep jar) )
fcount=${#locs[@]}
echo "Found $fcount jar files"
echo " "
for (( j=0; j<${fcount}; j++ ));
do
unzip ${locs[$j]} META-INF/MANIFEST.MF
mv META-INF/MANIFEST.MF META-INF/MANIFEST$j.MF
done
echo " "
for (( j=0; j<${fcount}; j++ ));
do
echo ${locs[$j]}
tail -2 META-INF/MANIFEST$j.MF
done
【讨论】:
有两种方法可以做到这一点
方式一:
jar -tfv my.jar | grep -i log4
23590 Tue Aug 10 10:51:24 IST 2021 log4j-slf4j-impl-2.13.3.jar
32722 Tue Aug 10 10:51:24 IST 2021 log4j-web-2.13.3.jar
1714164 Tue Aug 10 10:51:24 IST 2021 log4j-core-2.13.3.jar
23702 Tue Aug 10 10:51:24 IST 2021 log4j-over-slf4j-1.7.30.jar
292301 Tue Aug 10 10:51:24 IST 2021 log4j-api-2.13.3.jar
11259 Tue Aug 10 10:50:10 IST 2021 log4j2.xml
方式 2:
unzip -l my.jar | grep -i log4
23590 08-10-2021 10:51 log4j-slf4j-impl-2.13.3.jar
32722 08-10-2021 10:51 log4j-web-2.13.3.jar
1714164 08-10-2021 10:51 log4j-core-2.13.3.jar
23702 08-10-2021 10:51 log4j-over-slf4j-1.7.30.jar
292301 08-10-2021 10:51 log4j-api-2.13.3.jar
11259 08-10-2021 10:50 log4j2.xml
【讨论】: