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.