Skip Navigation
Resources Blog What is Mercury?

What is Mercury?

Mercury is a serious attempt to:

- Decouple major Maven components, making them available as stand-alone building blocks rather then having Maven as as one big monolith, not usable outside of its environment.
- Artifact - clearly separate an Artifact from its metadata.
- Repository - convert a repository into active component. It used to give back just pathOf(), now it accepts GAV collections and gives back either metadata or full blown Artifacts.
- Transport - an API in development.
- DependencyTreeBuilder main API for dependency graph creation and conflict resolution.
- Decouple container, so that these components are just plain pojos.
- Introduce Jetty-based HTTP/HTTPS and WebDAV transactional transport layer.
- Asynchronous downloads and uploads. One of the few successful usages of Java NIO in OSS.
- Transactional operations - all-or-nothing for file sets.
- Move integrity control into transport layer, upper level components should not care about these details.
- Abstract out metadata cache, provide at least one implementation there.
- Integrate these changes back to Maven 3.x to make it even better platform than it is right now (if it is possible to be better)

Currently Mercury can already be used for accessing repositories, and conflict resolution is under testing.

Written by Oleg Gusakov

Oleg is a former Chief Architect at Sonatype. He now works as an engineer at TripActions, a business travel platform that empowers companies and travelers to show up and create growth.