近日,apache log4j2爆出“核彈級”遠程代碼執行漏洞。公司相關系統也在升級log4j版本。
過程中遇到一個問題,本地代碼通過maven clean install命令執行后的程序包里已經沒有log4j舊版本的依賴了,可是呢,測試環境通過Jenkins構建后,利用log4shell工具掃描程序包,依然存在log4j舊版本。
[root@youfu-server ~]# cd /root/
[root@youfu-server ~]# ./log4shell scan /www/epaysch/tomcat-pctrans-provider-8580/webapps/*/WEB-INF/lib
1:38PM INF identified vulnerable path fileName=org/apache/log4j/net/SocketNode.class path=/www/epaysch/tomcat-pctrans-provider-8580/webapps/pctrans-provider/WEB-INF/lib/log4j-1.2.17.jar versionInfo="log4j 1.2.17"
看來,測試環境Jenkins服務器的maven庫里某些包可能依賴了log4j舊版本。
於是乎,找運維伙伴將Jenkins任務的build配置由clean install暫時改為dependency:tree,來看看具體是由哪個包造成的。
可是,構建Jenkins任務時,發現報錯,提示maven私服上特定版本的某個jar包已經緩存在了本地倉庫中(xxx-version.jar was cached in the local repository)。就是說,Maven默認會使用本地緩存的庫來編譯工程,對於上次下載失敗的庫,maven會在~/.m3/repository/<group>/<artifact>/<version>/
目錄下創建xxx.lastUpdated文件,一旦這個文件存在,那么在直到下一次nexus更新之前都不會更新這個依賴庫。
[ERROR] Failed to execute goal on project trans-rpcprovider: Could not resolve dependencies for project com.yft:trans-rpcprovider:war:1.0-SNAPSHOT: Failure to find com.yft:PCOperCommonUtil:jar:1.0-SNAPSHOT in http://192.168.40.196:8081/nexus/content/repositories/snapshots/ was cached in the local repository, resolution will not be reattempted until the update interval of public has elapsed or updates are forced -> [Help 1]
[ERROR]
[ERROR] T...
網上給出的解決辦法有3個:
- 刪掉本地maven倉庫里的緩存文件,m3repository/<group>/<artifact>/<version>/目錄下的*.lastUpdated文件。然后重新執行maven命令。
- 在maven settings.xml文件里,加<updatePolicy>always</updatePolicy>來強制每次都更新依賴庫。
- 加上-U指令來強制刷新本地倉庫。
我和運維伙伴逐個嘗試,前兩個方法並沒解決問題(也許是操作不當吧)。好事多磨,最終靠第三個方法得以解決,即使用dependency:tree -U命令,最終看到了測試環境程序包的依賴樹。