IntelliJ / Maven不会更新Artifactory中的工件

时间:2016-03-17 21:02:46

标签: java maven intellij-idea jenkins artifactory

我最近设置了一个受密码保护的Artifactory服务器。 Jenkins服务器正在将我的工件部署到该Artifactory服务器上的maven存储库。

问题在于:
新版本在运行时(在IntelliJ中)也不可用于Maven(构建时)。为了让maven更新,我必须从本地仓库中删除工件。

如何告诉Maven / IntelliJ始终检查最新版本?
即便如此,也没有做任何事情:

<releases>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
</releases>
<snapshots>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
</snapshots>

1 个答案:

答案 0 :(得分:3)

有些案件需要处理:

  1. 发布。如果本地缓存(Maven的~/.m2/存储库缓存或Artifactory的远程存储库缓存)中存在相同版本的发布二进制文件,则不Maven或Artifactory将永远不会检查更新的二进制文件。 强制Artifactory和Maven重新获取发布工件的唯一方法是将其从缓存中删除。永远不要对不同的blob使用相同的版本。
  2. 快照。虽然唯一(文件名以时间戳结束)和非唯一(文件名以-SNAPSHOT结尾)之间存在差异,因此它们违反了我刚写的规则,所以不要使用它们,它们的检索策略是相同:Maven认为它们是 expirable resources ,它偶尔会检查一个新的blob,在同一个版本下发布。 Artifactory也是这样做的:偶尔会将可过期资源声明为“已过期”,因此下次Maven请求此资源时,Artifactory将获取远程存储库以检查在同一版本下发布的新blob。在这两个工具中,您可以控制缓存周期并手动“快速删除缓存”。
    • 在Maven中<update-policy/>控制Maven检查新snpashot的频率,--update-snapshots标记迫使Maven立即检查。
    • 在Artifactory中,远程存储库配置中的Retrieval Cache Period参数控制Artifactory检查新快照的频率,以及工件浏览器屏幕中远程存储库上的Zap Caches操作,确保Artifactory将检查新的下一个请求的快照。