处理本地仓库中旧快照的最佳方式是什么?

15
我们有一个 Nexus 本地仓库管理器,处理我们所有的内部项目(以及镜像外部仓库)。对于我们的内部项目,我们只保留最新版本的快照构建。例如,如果我们有 ProjectX 1.0、1.1 和 1.2-SNAPSHOT,一旦 1.2 发布,我们将删除 1.2-SNAPSHOT,然后在我们的 Nexus 仓库中保留 1.0、1.1、1.2 和 1.3-SNAPSHOT。
问题是,我们的 Jenkins 服务器在其本地`.m2/repository`文件夹中拥有所有旧版本的快照,并继续成功构建这些旧版本的项目,而实际上它们应该失败(我们的开发人员应该修复他们的 POM 文件)。
可以在 settings.xml 或 pom.xml 中配置 Maven 来删除这些不需要的快照吗?
如果不能,最好的方法是什么?Jenkins 配置、cron 作业还是其他选项?
谢谢...

有关问题,关于开发人员如何清除本地.m2\repository文件夹中旧的时间戳工件:https://dev59.com/fuo6XIcBkEYKwwoYTS1D。 - MarnixKlooster ReinstateMonica
5个回答

9
在Linux上,您可以使用以下命令:
find $HOME/.m2/repository/ \
   -name "*-SNAPSHOT" \
   -type d \
   -mtime +60 \
   -print \
   -prune \
   -exec rm -r "{}" \;

解释:

  • 在文件夹$HOME/.m2/repository/中查找任何以*-SNAPSHOT命名的内容
  • 并且它必须是一个目录
  • 并且它在过去60天内没有被修改过
  • 打印你找到的内容。如果你想测试这个命令,就停在这里
  • -exec将删除文件夹,-prune告诉find不要尝试进入文件夹。
  • -exec将删除文件夹和其中的文件。

4
你可以尝试使用Maven Repo Cleaner Jenkins插件。该插件的详细信息可在此链接中查看。

0

我们这里使用类似的设置。对于某些仓库,我们让Nexus在发布构件后自动删除快照。然后在我们的持续集成服务器上,我们只需设置一个cron job,每天删除本地仓库文件夹即可。这对我们来说效果很好。


这看起来是处理问题最轻松和有效的方式。谢谢! - user1071914

0

首先,如果您正在使用Jenkins进行构建,则最佳实践是要有干净的构建,这意味着每个构建都使用本地存储库而不是服务器全局存储库。此外,似乎您没有使用发布插件来发布您的工件,该插件会自动检查POM是否包含SNAPSHOT,并在存在时失败。此外,可以通过maven-dependency-plugin清理本地存储库。根据我的经验,我已经简单地配置了一个任务,删除早于一个月的SNAPSHOT...


-4

这可能是您的Jenkins服务器上maven的配置问题。

可以通过在<repository>部分为<snapshots>配置<updatePolicy>的值,定期让maven查找更新的快照版本。

<updatePolicy>daily</updatePolicy>

选项包括:alwaysdaily(默认),interval:X(其中X是以分钟为单位的整数)或never

此外,如果版本更改(从1.1-SNAPSHOT1.2-SNAPSHOT),不清楚Jenkins如何成功构建旧的(1.1-SNAPSHOT)版本。


2
我实际上是在问相反的问题:如何自动删除本地存储库中的快照,而不是更新它们。谢谢。 - user1071914

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接