Introducing Aether: Embeddable Maven Repository API


August 3, 2010 By Jason van Zyl

# Introducing Aether #

Aether (pronounced ē’thər, as in flying though the ether) aims to be the standard library for interacting with Maven repositories. Without question, the most important aspect of the Maven ecosystem is interoperability at the repository level. There are many emerging options in the build space for JVM-based languages, but the one thing they all have in common is their interaction with Maven repositories. It’s clear that Maven repositories play a critical role within JVM-based development infrastructures and Aether will provide the necessary interoperability, through a common set of tools and APIs, that’s critical for happy users in the ecosystem.

## Aether & Maven 3.x ##

Benjamin Bentmann, Sonatype’s lead on Maven 3.x, has fully integrated Aether back into Maven 3.x. Though Aether is an extraction from Maven, Aether is not Maven specific. That said Maven 3.x and Maven repositories are our first priorities. The upshot is that if you embed Aether, you will be embedding the same library that Maven 3.x uses when it interacts with a Maven repository. If compatibility with Maven repositories is important for your project then it’s not going to get any better than Aether.

## Aether & Mercury ##

Mercury was our first attempt at extracting a Repository API from Maven and that didn’t work. We bit off more then we could chew, and so our first attempt was a learning experience. We attempted to integrate the excellent [SAT4J][sat4j] library but didn’t have enough experience to pull that off. In addition there may be features of SAT4J Maven requires that are not present yet. As such, we felt it better to attempt something less ambitious, yet functional, and invest in research for future improvements.

## Aether, p2 & SAT4J ##

As part that investment, we will be collaborating in sponsored research with Daniel Le Berre, who is the author of SAT4J. Daniel is a tenured professor at University of Lens, and researcher at Centre de Recherche en Informatique de Lens and is affiliated with Centre National de la Recherche Scientifique. His work will not only help us with p2, but also with many things we want to accomplish in Maven. We see a lot of overlap in the work Sonatype is doing on Maven and p2 and ultimately we really see there being one artifact resolving framework.

## Aether & Ant ##

Rest assured there will be excellent Aether Ant Tasks. Making sure that Aether works flawlessly inside Maven 3.x is our first priority, but we are committed to making a set of excellent Aether Ant Tasks. If you’re interested in Aether Ant Tasks you can follow the progress [here][aether-ant-tasks].

## Aether Resources ##

If you are interested in Aether here are the goods:

* [Aether Sources @ Github][aether-sources]
* [Aether Issue Tracking @ Sonatype][aether-issue-tracking]
* [Aether Wiki @ Sonatype][aether-wiki]
* Mailing lists:
* [Aether Users @ sonatype.org][1]
* [Aether Developers @ sonatype.org][2]
* [Aether SCM @ sonatype.org][3]

P.S. Thanks to [Pierre-A Grégoire][4] for the name Aether!

[aether-wiki]: https://docs.sonatype.org/display/AETHER
[aether-sources]: http://github.com/sonatype/sonatype-aether
[aether-issue-tracking]: https://issues.sonatype.org/browse/AETHER
[sat4j]: http://www.sat4j.org/
[1]: mailto:aether-user@sonatype.org
[2]: mailto:aether-dev@sonatype.org
[3]: mailto:aether-scm@sonatype.org
[4]: https://twitter.com/zepag
[aether-ant-tasks]: https://issues.sonatype.org/browse/AETHER-4

  • Jamie Whitehouse

    Do I need an account on the wiki to view the content? I’m currently presented with a login page.

    • Jason van Zyl

      Should be open now. Sorry about that.

  • http://twitter.com/willcode4beer Paul Davis

    The objective of this API doesn’t seem very clear?

    An API to communicate with a repository? HTTP seems to work pretty well (especially well on nexus) and it’s language independent. Obviously, I must be missing something.

    • Jason van Zyl

      Aether handles the artifact resolution aspect as well. Processing artifact metadata, resolving conflicts, providing pluggable transport, and retrieving artifacts. A full repository API.