Jump to: navigation, search

Aether/What Is Aether

Did you ever want to integrate Maven's dependency resolution mechanism into your application and ended up trying to embed Plexus and an entire Maven distribution? Did you ever want to use Maven's dependency resolution mechanism in a multi-threaded fashion and got burned by the stateful singletons in there? Did you ever want to have a little more control over how Maven calculates the resolved dependency graph, say use another strategy for conflict resolution or inspect some intermediate dependency graph?

Well, Aether is the answer. It's an easily embeddable Java library to work with artifact repositories, enabling you to fetch artifacts from remote repositories for local consumption and to publish local artifacts to remote repositories for sharing with others.

There are many ways to transfer artifacts, to describe their relationships and to use them. Aether was designed with an open mind towards customization of these aspects, allowing you to augment or even replace stock functionality to fit your needs. In fact, the Aether Core itself doesn't know how to deal with Maven repositories for instance. It's tool agnostic and provides some general artifact resolution/deployment framework and leaves details like the repository format to extensions.

At this point, the maven-aether-provider from the Apache Maven project is probably the most interesting extension as it brings support for, well Maven repositories. So if you're looking for a way to consume artifacts from the Central Repository, Aether in combination with the Maven Aether Provider is your best bet. Usage of Aether in this way does not only ease your work when dealing with artifacts but also ensures interoperability with other tools that work with Maven repositories.