背景
今天在打包項目的過程中出現了編譯問題,奇怪的是這個項目已經好久沒有修改過了,報錯如下。
找不到符號
[ERROR] 符號: 方法 intent(java.lang.String)
[ERROR] 位置: 類型爲com.paypal.orders.OrderRequest的變量 orderRequest
找不到符號
[ERROR] 符號: 方法 amount(com.paypal.orders.AmountWithBreakdown)
[ERROR] 位置: 類 com.paypal.orders.PurchaseUnitRequest
原因在於設置外部依賴包的版本時使用了LATEST,這樣每次便會嘗試拉取最新版本的包。
<dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>checkout-sdk</artifactId>
<version>LATEST</version>
</dependency>
問題原因
問題的錯誤提示很明確,是找不到paypal的sdk方法,很自然的就把問題指向了版本依賴上面,經過一番搜索後在Maven倉庫中發現checkout-sdk這個包在2019年7月份的時候發佈了1.0.1版本,這個版本在一些功能上沒有向上兼容舊版本,導致項目中依賴了1.0.0版本所使用的sdk,再依賴了新版本後便出現了編譯問題。
找到問題原因之後,我們只需要把版本號改成原來的舊版本便可以了。
<dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>checkout-sdk</artifactId>
<version>1.0.0</version>
</dependency>
建議
在依賴外部包的時候,版本號不要直接寫LATEST,要使用固定的版本號,否則有可能出現包升級,導致不兼容的問題。