#maven #repository #cleanup #latest-version #cli

app mcup

命令行工具,用于保持您的本地 Maven 仓库小而整洁

5 个版本

0.2.3 2022年1月3日
0.2.2 2021年10月21日
0.2.1 2021年10月21日
0.2.0 2021年8月10日
0.1.0 2021年8月3日

#2084命令行工具

Apache-2.0

1MB
2K SLoC

Rust 1.5K SLoC // 0.0% comments BASH 143 SLoC AsciiDoc 124 SLoC PowerShell 76 SLoC Elvish 70 SLoC Shell 10 SLoC // 0.3% comments

[构建状态](https://github. com/hpehl/mcup/actions) Crates.io

Maven 清理

mcup /m'kʌp/ (maven clean up) 是一个命令行工具,用于保持您的本地 Maven 仓库小 📦 和整洁 🧹。

Maven 是一个构建 Java 以及其他在 JVM 上运行的编程语言的优秀工具。Maven 的核心是一个依赖管理器,它将依赖项下载并存储在本地仓库中。随着时间的推移,这个仓库会越来越大,并占用更多的硬盘空间。它通常包含过时的版本或不必要的依赖项。

mcup 帮助您清理本地仓库。它使用过滤器根据 Maven 坐标 groupIdartifactIdversion 来选择工件。它知道三种模式

  1. 分析和报告过滤器选择的工件的大小
  2. 删除过滤器选择的全部工件,保留其余的
  3. 保留过滤器选择的全部工件,删除其余的

安装

对各种包管理器的支持是 正在进行中

预编译的二进制文件 可用于 Windows、macOS 和 Linux。

Shell 自动补全

发布版二进制文件包含适用于 bash、fish、zsh、elvish 和 Powershell 的手册页和自动补全文件。要安装它们

  • 对于 bash,将 completions/mcup.bash 移动到 $XDG_CONFIG_HOME/bash_completion/etc/bash_completion.d/
  • 对于 fish,将 completions/mcup.fish 移动到 ~/.config/fish/completions/
  • 对于 zsh,将 completions/_mcup 移动到您的 $fpath 目录之一。
  • 对于Elvish,使用epm安装completions/mcup.elv
  • 对于PowerShell,将completions/_mcup.ps1添加到您的PowerShell配置文件中。

Cargo

如果您是Rust程序员,也可以使用cargo安装mcup。

$ cargo install mcup

用法

mcup [FLAGS] [OPTIONS] <SUBCOMMAND>

标志

  • -r, --releases仅选择已发布的工件

  • -s, --snapshots仅选择快照工件

  • -h, --help打印帮助信息

  • -V, --version打印版本信息

选项

  • -g, --groups <GROUPS>根据组ID选择工件。

    默认包括子组。

    选择
    org 以'org'开头(包括'org')的所有组
    org.wildfly 以'org.wildfly'开头(包括'org.wildfly')的所有组
    org.wildfly.core 以'org.wildfly.core'开头(包括'org.wildfly.core')的所有组
  • -a, --artifacts <ARTIFACTS>根据工件ID选择工件。

    支持类似于maven-*-plugin的globbing(有关更多详细信息,请参阅https://docs.rs/glob/0.3.0/glob/)。

    工件 选择
    wildfly-core 仅选择'wildfly-core'工件
    *wildfly* 包含'wildfly'的所有工件
  • -v, --versions <VERSIONS>根据版本(范围)选择工件。

    使用<n>..选择最新的n个版本,..<n>选择最旧的n个版本,以及使用<version>仅选择一个特定的版本

    版本 选择
    1.. 最新版本
    5.. 最新的5个版本
    ..1 最旧的版本
    ..4 最旧的4个版本
    1.2.3 版本1.2.3
  • -l, --local-repository <LOCAL_REPOSITORY>设置本地Maven仓库的位置。

    mcup根据https://maven.apache.org/guides/mini/guide-configuring-maven.html#configuring-your-local-repository尊重本地仓库的配置。

    本地仓库的位置按照以下顺序计算

    1. --local-repository选项的值
    2. ~/.m2/settings.xml中的<localRepository/>的值
    3. 回退到~/.m2/repository/

子命令

磁盘使用情况(《du》命令)

使用此子命令来分析由过滤器选择的工件磁盘使用情况。该子命令接受与《keep》和《rm》子命令相同的过滤器,但不会删除任何工件。相反,它选择与过滤器匹配的工件,并计算组、工件和版本的尺寸。

该子命令接受以下选项

  • -o, --output <OUTPUT> 定义是否将(g)组、(a)工件和(v)版本包含在使用摘要中。默认为 ga

有关更多信息和支持示例,请参阅DU 页面

保留/删除(《keep》命令,rm

使用这些子命令之一来删除过滤器选择的工件

  • keep 保留与过滤器匹配的工件并删除其他所有工件
  • rm 删除与过滤器匹配的工件并保留其他所有工件

这些子命令接受以下标志

  • -d, --dry-run 不删除工件

  • --list 打印将要删除的工件的完整路径。

    将此标志与 --dry-run 一起使用,以审查或后处理将要删除的工件

    mcup --versions '3..' keep --dry-run --list > artifacts.txt
    

过滤器组合

对于 keeprm 子命令,至少需要一个 --releases--snapshots--groups--artifacts--versions,其中 --releases--snapshots 是互斥的。

子命令 durm 有相同的语义,但不需要过滤器。

如果指定了 --groups 和任何其他过滤器,则只有匹配的(子)组下的工件会受到子命令(dukeeprm)的影响。匹配的(子)组之外的工件不会受到影响。

以下表格解释了不同的过滤器组合,并描述了哪些工件被分析、保留或删除。

过滤器 du keep rm
--groups 分析指定的(子)组。 保留指定的(子)组并删除其他所有内容。 删除指定的(子)组。
--artifacts 分析指定的工件。 保留指定的工件并删除其他所有内容。 删除指定的工件。
--versions 分析指定的版本。 保留指定的版本并删除其他所有内容。 删除指定的版本。
--groups 加任何其他过滤器 分析匹配的过滤器下的工件。 保留匹配的过滤器下的工件并删除其他所有内容。 删除匹配的过滤器下的工件并保留其他所有内容。
所有其他组合(无 --groups 分析匹配的过滤器。 保留匹配的过滤器并删除其他所有内容。 删除匹配的过滤器。

示例

快速了解哪些组占用的空间最大

mcup du -og

显示所有以'-build'结尾的工件的使用情况。在使用摘要中包括组、工件和版本。

mcup --artifacts '*-build' du -ogav

保留最近的三个版本

mcup --versions '3..' keep

删除最旧的三个版本

mcup --versions '..3' rm

保留最新的发布版本(不修改快照)

mcup --releases --version '1..' keep

删除所有快照

mcup --snapshots rm

删除所有以组ID 'edu'开头的工件

mcup --groups edu rm

保留最新的Maven插件。不要删除'org.apache.maven.plugins'组之外的任何内容

mcup --groups 'org.apache.maven.plugins' --versions '1..' keep

删除所有以'junit'开头的工件(跨所有组)

mcup --artifacts 'junit*' rm

依赖项

~6–16MB
~169K SLoC