【问题标题】:When is it safe to delete the local Maven repository?什么时候可以安全地删除本地 Maven 存储库?
【发布时间】:2012-04-06 22:27:05
【问题描述】:

如果我正在在线工作并且我可以通过远程存储库访问所有需要的工件,那么在哪些情况下,rm -rf ~/.m2/repository 是安全的还是不安全的。

【问题讨论】:

    标签: maven


    【解决方案1】:

    当您从远程存储库中检索所有依赖项时,本地存储库只不过是一个缓存。

    与所有缓存一样,Maven 本地存储库有时会变得“脏”。在一个公认的偏执和矫枉过正的行为中,我安排了一个定期的 cron 作业来清除我的构建机器上的本地存储库。这会强制与我的 Nexus Maven 存储库重新同步。

    【讨论】:

    • 很好的解释,感谢有关强制重新同步的额外提示。
    • 为什么不简单地使用 mvn -U (update) 来强制检查更新?
    • @imagineerThat 当然可以,但是缓存重置可确保构建完全干净。当依赖项也在本地缓存在 Maven 存储库中时不会花费太多。
    • 在 Linux 上,我真的不需要清除本地存储库,除了 Jenkins 构建(构建干净)。当保存许多本地快照时,在 Windows 上构建时间滞后。所以windows例行清除是好的。本地缓存应该始终是可消耗的。但是,我遇到过将 300 个模块中的一个设置为永不部署的情况。
    【解决方案2】:

    如果您可以通过远程存储库访问所有需要的工件,则删除本地 Maven 存储库始终是安全的。下一次构建所需的所有工件,包括基本的 Maven 插件(如编译器)基本上都将从远程存储库中获取。就是这样。

    【讨论】:

    • 感谢您的回答。是我需要知道的!
    【解决方案3】:

    因此,与其采用“蛮力”方式,不如采用不同的选择:

    蛮力:

    rm -rf ~/.m2/repository

    这是执行此操作的“mvn”方式。

    “一切:

    mvn dependency:purge-local-repository
    

    我认为有帮助的一些论点

    mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
    

    这是我通常为我的本地机器做的事情:(我使用“groupid”的选项参数,它比大-锤子/蛮力.....

    mvn dependency:purge-local-repository -DmanualInclude="my.group.id" -DsnapshotsOnly=true  -DactTransitively=false -DreResolve=false
    

    您可以在这里查看命令行选项:

    https://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html

    【讨论】:

      【解决方案4】:

      您可以添加一个 cron 条目,以便在给定时间段内(例如 90 天)定期删除本地存储库中的文件。

      find ~/.m2/ -type f -atime +90 -delete && \
          find ~/.m2/ -type d -empty -delete
      

      这会将您的缓存大小缩小到仅包含您最近使用的工件。

      【讨论】:

        猜你喜欢
        • 2015-10-02
        • 1970-01-01
        • 2020-03-14
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        • 2012-06-29
        相关资源
        最近更新 更多