This project aims to be a functional replacement for plexus-utils in Maven.
It is not a 100% API compatible replacement though but a replacement with improvements: lots of methods got cleaned up, generics got added and we dropped a lot of unused code.
plexus-utils consisted mostly of code that was forked from various apache projects. maven-shared-utils is based on the original from the apache sources.
We would prefer code to use commons-* code where appropriate, but the plexus-utils became slightly incompatible (different) from the commons over the years, so migrating is not always a 1:1 operation. Migrating to maven-shared-utils is a 1:1 operation in most cases.
maven-shared-utils internally use commons-io. We shade all commons classes into our own private package to prevent classpath clashes.
This is the reason why any public API in maven-shared-utils must avoid to expose commons-io classes directly. Most times it's sufficient to just create an empty subclass and expose that instead.