爲何明明deploy 了最新的snapshot包,調用方仍是報找不到類

案例現象
服務提供方修改了 對外提供的 api jar 包版本,而且 deploy jar 包到 maven 私服。調用方在編譯的時候,打包或者運行的時候報 找不到類/noSuchMethodError。web

解決方案apache

在依賴此 jar 包項目的 pom 文件中,增長以下配置,便可解決。
<repositories>api

<repository>
<id>私服 ID</id>
<url>http://私服 IP 和 port/nexus/content/groups/public/</url>
<snapshots>
<!-- 始終下載最新的 snapshot 包 -->
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>maven

</repositories>url

問題緣由spa

1.若是在 web 項目中出現此錯誤,大機率是由於 調用方在以前編譯的過程,已經下載過此版本的快照版。
而 maven 默認的 snapshot 更新策略是天天都更新。 在一天內deploy 屢次到 maven 私服,調用方從新編譯的時候極可能拉取不到最新的snapshot jar 包,致使報錯。blog

2.若是是以 jar 方式啓動,可能須要另一種解決方式。 緣由是在生成 jar 包的時候,jar 中的 MANIFEST.MF 中配置 classpath 時候,將snapshot 包打成帶時間戳的snapshot 版本。
解決方案以下:get

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>main 類入口</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>it

</archive>
</configuration>
</plugin>io

知識儲備
1.解決此類問題,須要知道 maven 本地倉庫,私服,中央倉庫的關係。
2.maven 打包時候獲取 snapshot 的默認更新規則。
3.以 jar 方式啓動的項目,如何指定 classPath ,以及含有 snapshot 依賴的時候默認的處理規則。

參考文章:
https://www.iteye.com/blog/zh...
https://www.iteye.com/blog/br...

相關文章
相關標籤/搜索