場景:
項目A依賴項目B,此時項目A可以正常構建,當我修改項目B后,並將B項目Deploy到私服,本地正常運行。
此時再次使用Jenkins構建項目A,構建失敗。
報錯信息如下:
[INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /var/jenkins_home/workspace/aaa-aaa/src/main/java/com/aaa/aaa/aaa/aaa/aaa/aaa.java:[367,24] cannot find symbol symbol: method setRoomName(java.lang.String) location: variable aaaDTO of type com.aaa.aaa.aaa.domain.dto.AaaDTO
原因:
Jenkins項目配置的使用本地倉庫,本地倉庫中的jar是舊版本,當Jenkins編譯時,在本地倉庫找到就直接納入項目了。
除非本地倉庫沒有找到,才會去遠程倉庫拉取。所以構建A時,老的jar沒有新版本中新增的內容,導致編譯出錯。
解決方法(心急的帥哥直接看最后一種方法):
方法一:Jenkins手動清除舊的依賴,緩存
每次部署項目前:
1、進入容器內部。
2、進入本地倉庫。
3、將有變動的依賴刪除掉,或者簡單一點,把所有的依賴都刪除。
方法二:項目配置中增加構建前腳本
寫腳本將本地倉庫依賴清空,每次構建項目前都先清空一下。
這種方法和第一種方法差不多,一個是手動擋,一個是自動擋,本質上還是使用Jenkins中本地倉庫,大家應該都喜歡自動擋吧。
方法三:修改Jenkins中maven配置文件。(未測試,僅僅記錄一下)
修改~/.m2/settings.xml 或/opt/maven/conf/settings.xml文件,
添加 <updatePolicy>always</updatePolicy>,強制每次都更新依賴庫。
<repositories> <repository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories>
方法四:強制使用遠程倉庫中最新的依賴(推薦)
這種方法就沒有本地倉庫什么事兒了,不會對本地倉庫有任何CRUD操作,完全使用私服中的依賴,不存在舊的jar。
系統管理–maven項目配置–local maven Reposiory 選擇Loacl to the workspace。OK。
測試:
現在本地倉庫是老的依賴包,我更改系統配置后,構建一下項目。
沒毛病。
原文鏈接:https://blog.csdn.net/numbbe/article/details/118346146