原文地址
前言
25年新的一年,那就先更新一篇技術文章吧,這個是這幾天剛遇到的一個有意思的bug,記錄分享一下
原因分析
在使用maven加載一個項目的時,發現maven的依賴一直無法解析,更換阿里云鏡像和中央倉庫都沒辦法解析。不能解決com.amdelamar:jhash:2.1.2
隨后查看pom文件,maven依賴坐標發現沒有報錯,報錯的是依賴中的依賴
<dependency><groupId>io.github.talelin</groupId><artifactId>lin-cms-spring-boot-starter</artifactId><version>0.2.0-RC2</version></dependency>
是這個lin-cms-spring-boot-starter依賴里面的子依賴jhash報錯。
百度這個項目依賴的依賴,是一個開源項目
文檔如下:http://doc.cms.talelin.com/
最近的一次更新已經是2022年了,這個項目原作者應該已經停止維護了。
可以理解為jhash升級了版本,但是該cms開源項目沒有去更新maven倉庫的依賴,所以導致項目運行不成功。
但是為什么maven沒有jhash的對應的2.1.2版本呢
查看maven的中央倉庫,搜索jhash項目
中央倉庫竟然已經下架了2.1.2版本!!!
啊這,只有升級后的2.2.0版本,但是我沒辦法改動依賴里面對應的依賴。
Jcenter倉庫里面還有對應的版本,但是,Jcenter已經停止服務了,沒辦法從Jcenter下載依賴。
Jcenter 停止服務,我哭了 —— 說一說我們的遷移方案在今年的 2 月 3 日,Jcenter 運營官方發布一則通 - 掘金
解決方案
在網上尋找jhash的2.1.2版本,還好github上面保留了這個版本的發布tag
jhash的官網 J hash - Password hashing utility in Java
找到github的對應tag地址
2.1.2竟然沒有給編譯jar… 其他版本都有,只有2.1.2沒有(內心凌亂)
竟然沒有對應jar包,那就下載zip源碼包,下載好重新編譯一下。
打開jhash2.1.2的源代碼,發現是gradle項目,好在這個依賴并不復雜
我電腦沒有裝gradle,那我們根據gradle反向推斷maven的依賴
<dependencies><dependency><groupId>org.apache.directory.studio</groupId><artifactId>org.apache.commons.codec</artifactId><version>1.8</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
然后使用maven編譯成jar包,再將編譯好的jar包,放入本地倉庫讓項目解析到這個jar依賴
將jar包導入maven本地倉庫命令示例:
mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar
因為我編譯好的jar在桌面,推導后命令為
mvn install:install-file -Dfile=C:\Users\25855\Desktop\jhash-2.1.2\target\jhash-2.1.2.jar -DgroupId=com.amdelamar -DartifactId=jhash -Dversion=2.1.2 -Dpackaging=jar
導入成功之后,我們可以查看本地倉庫是否存在對應jar包
然后我們再回到最開始的項目,刷新maven緩存,再解析項目
報錯解決,可以愉快運行項目了
jar包下載
jhash-2.1.2.jar下載:https://www.123865.com/s/Z7EcVv-8V8td
maven本地倉庫對應下載:https://www.123865.com/s/Z7EcVv-0V8td