Build status Crates.io

Maven Clean Up

mcup /m'kʌp/ (maven clean up) is a command line tool to keep your local maven repository small 📦 and tidy 🧹.

Maven is a great tool to build software for Java and other languages running on the JVM. At its core Maven is a dependency manager which downloads and stores dependencies in a local repository. Over time, this repository grows and takes up more and more space on the hard disk. It often contains obsolete versions or dependencies that are no longer needed.

mcup helps you to clean up your local repository. It uses filters to select artifacts based on the Maven coordinates groupId, artifactId and version. It knows three modes:

  1. analyze and report the size of the artifacts selected by the filters
  2. remove all artifacts selected by the filters and keep the rest
  3. keep all artifacts selected by the filters and remove the rest

Installation

Support for various package managers is wip.

Precompiled binaries are available for Windows, macOS and Linux.

Shell Completion

The release binaries are packaged with a man page and shell completion files for bash, fish, zsh, elvish and Powershell. To install them:

Cargo

If you're a Rust programmer, mcup can also be installed using cargo:

$ cargo install mcup

Usage

shell mcup [FLAGS] [OPTIONS] <SUBCOMMAND>

Flags

Options

Subcommands

Disk Usage (du)

Use this subcommand to analyze the disk usage of the artifacts selected by the filters. The subcommand accepts the same filters as the keep and rm subcommands, but does not remove any artifacts. Instead, it selects the artifacts matched by the filters and calculates the size of the groups, artifacts and versions.

The subcommand accepts the following options:

See the DU page for more information and sample outputs.

Keep / Remove (keep, rm)

Use one of these subcommands to remove artifacts selected by the filters:

The subcommands accept the following flags:

Filter Combinations

For subcommands keep and rm at least one of --releases, --snapshots, --groups, --artifacts or--versions is required, where --releases and --snapshots are mutually exclusive.

Subcommand du has the same semantics as rm, but doesn't require a filter.

If --groups is specified together with any other filter, only artifacts below the matched (sub)groups are subject to the subcommands (du, keep or rm). Artifacts outside the matched (sub)groups won't be touched.

The following table explains the different filter combinations and describes which artifacts are analyzed, kept or removed.

| Filter | du | keep | rm | |---|---|---|---| | --groups only | Analyzes the specified (sub)groups. | Keeps the specified (sub)groups and removes anything else. | Removes the specified (sub)groups. | | --artifacts only | Analyzes the specified artifacts. | Keeps the specified artifacts and removes anything else. | Removes the specified artifacts. | | --versions only | Analyzes the specified versions. | Keeps the specified versions and removes anything else. | Removes the specified versions. | | --groups plus any other filter | Analyzes the artifacts matched by the filters below the specified (sub)groups. | Keeps the artifacts matched by the filters below the specified (sub)groups and removes anything else. | Removes the artifacts matched by the filters below the specified (sub)groups and keeps anything else. | | All other combinations w/o --groups | Analyzes the artifacts matched by the filters. | Keeps the artifacts matched by the filters and removes anything else. | Removes the artifacts matched by the filters. |

Examples

Get a quick overview which groups take the most space

shell mcup du -og

Show the usage of all artifacts ending with '-build'. Include groups, artifacts and versions in the usage summary.

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

Keep the three most recent versions

shell mcup --versions '3..' keep

Remove the three oldest versions

shell mcup --versions '..3' rm

Keep the latest releases (doesn't touch snapshots)

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

Remove all snapshots

shell mcup --snapshots rm

Remove all artifacts starting with group ID 'edu'

shell mcup --groups edu rm

Keep the latest maven plugins. Don't remove anything outside group 'org.apache.maven.plugins'

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

Remove all artifacts (across all groups) starting with 'junit'

shell mcup --artifacts 'junit*' rm