<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sonatype Blog &#187; Aether</title>
	<atom:link href="http://blog.sonatype.com/people/tag/aether/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sonatype.com/people</link>
	<description>Sonatype is transforming software development with tools, information and services that enable organizations to build better software, faster, using open-source components.</description>
	<lastBuildDate>Thu, 16 May 2013 18:53:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>How to Use Aether in Maven Plugins</title>
		<link>http://blog.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/</link>
		<comments>http://blog.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 14:50:18 +0000</pubDate>
		<dc:creator>Bentmann Benjamin</dc:creator>
				<category><![CDATA[Aether]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=6838</guid>
		<description><![CDATA[When developing plugins for Maven 3.0 plugin developers that need to perform dependency resolution have a choice: they can continue to use the Maven 2.x API, or they can use the new Maven 3 API which makes use of Aether. In this post, I&#8217;m going to walk through some of the API features that are [...]]]></description>
				<content:encoded><![CDATA[<p>When developing plugins for Maven 3.0 plugin developers that need to perform dependency resolution have a choice: they can continue to use the Maven 2.x API, or they can use the new Maven 3 API which makes use of <a rel="nofollow" href="http://aether.sonatype.org/" target="_blank">Aether</a>.   In this post, I&#8217;m going to walk through some of the API features that are now available to plugin developers in Aether.</p>

<p>If your plugin needs to be compatible with Maven 2.x, take a look at the sources of <a rel="nofollow" href="http://maven.apache.org/plugins/maven-dependency-plugin/source-repository.html" target="_blank">Maven Dependency Plugin</a>.   This example provides a sophisticated example of using the Maven 2.x dependency resolution API. But if legacy Maven support is of no concern to you, read on and see how the Maven 3.x API handles the job.</p>

<p><span id="more-6838"></span></p>

<h2>Aether Plugin Dependencies</h2>

<p>To make use of the new Maven 3.x Plugin API add the following dependencies to your plugin project&#8217;s POM:</p>

<script src="https://gist.github.com/777716.js?file=aether-dependencies.xml"></script>

<p>The dependency on <tt>maven-plugin-api</tt> shouldn&#8217;t be surprising &#8211; the more interesting bits are <tt>aether-api</tt> and <tt>aether-util</tt>. Depending on your use case, the latter dependency might not be required for your plugin given <tt>aether-util</tt> is just a collection of utility classes. For our example however, it will be handy to have <tt>org.sonatype.aether.util.artifact.DefaultArtifact</tt> around.</p>

<h2>Mojo Parameters</h2>

<p>Now that the plugin build path is set up, we can continue to add some parameters to our plugin that will grab the repository system:</p>

<script src="https://gist.github.com/777719.js?file=MyMojo-aether-parameters.java"></script>

<p>In contrast to Maven 2.x, a single component of type <tt>RepositorySystem</tt> is sufficient for all resolution work. This repository system generally takes a request bean as input and hands back a result bean. When performing multiple repository operations, some inputs tend to be the same like the local repository, the offline mode, proxies etc. These configuration values are represented by the <tt>RepositorySystemSession</tt>.</p>

<p>The remote repositories to resolve from are always specific to a certain operation. For our example, we&#8217;re going to use the remote plugin repositories of the current project. Alternatively, the expression <tt>$&#123;project.remoteProjectRepositories&#125;</tt> is available to grab the project dependency repositories. Which set of remote repositories to use depends on the kind of artifacts the plugin is going to resolve. Artifacts that are compile/runtime/test dependencies of a project need to be resolved from <tt>$&#123;project.remoteProjectRepositories&#125;</tt>. Plugins or other artifacts that merely support the build need to be resolved from <tt>$&#123;project.remotePluginRepositories&#125;</tt>.</p>

<h2>Mojo Execution</h2>

<p>Equipped with the plugin parameters shown in the previous section, we can start to do some real work with project dependencies:</p>

<script src="https://gist.github.com/777724.js?file=gistfile1.java"></script>

<p>This code snippet resolves a single artifact that is hard-coded here for the sake of conciseness. By employing other methods of the <tt>repoSystem</tt> transitive resolution or version query can be performed as well.</p>

<p>Tip: To help with the common task of transitively resolving project dependencies, the <tt>maven-core</tt> artifact provides the component <tt>org.apache.maven.project.ProjectDependenciesResolver</tt>.</p>

<p>A complete plugin project ready to run and play with can be found in our Git repo at <tt><a rel="nofollow" href="https://github.com/sonatype/aether-demo-maven-plugin" target="_blank">https://github.com/sonatype/aether-demo-maven-plugin</a></tt>.</p>

<p>A final note to avoid confusion when experimenting with the new API: Unlike the Maven 2.x API, <tt>Artifact</tt> instances in Aether are immutable. As such the result of a resolution operation returns new <tt>Artifact</tt> instances. That is why it is essential that the log statement above uses <tt>result.getArtifact().getFile()</tt> and not <tt>artifact.getFile()</tt>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sonatype&#039;s August newsletter now available</title>
		<link>http://blog.sonatype.com/people/2010/08/sonatypes-august-newsletter-now-available/</link>
		<comments>http://blog.sonatype.com/people/2010/08/sonatypes-august-newsletter-now-available/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 12:00:51 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Aether]]></category>
		<category><![CDATA[Eclipse Day]]></category>
		<category><![CDATA[newsletter]]></category>
		<category><![CDATA[nexus professional]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5995</guid>
		<description><![CDATA[The August edition of the Sonatype newsletter is now available.  Read all about Aether, Eclipse Day and other events we&#8217;ll be attending, and our upcoming webinar series on Build Promotion with Nexus Professional. The Sonatype newsletter helps you catch up on everything we&#8217;ve been up to, and read about upcoming projects, releases and presentations from [...]]]></description>
				<content:encoded><![CDATA[<p><!--dzoneZ=none--><a href="http://www.sonatype.com/people/wp-content/uploads/2008/11/sonatype-logo.png"><img class="alignright size-full wp-image-804" title="sonatype-logo" src="http://www.sonatype.com/people/wp-content/uploads/2008/11/sonatype-logo.png" alt="" width="203" height="63" /></a>The <a href="http://www.sonatype.com/newsletter/544" target="_blank">August edition</a> of the Sonatype newsletter is now available.  Read all about Aether, Eclipse Day and other events we&#8217;ll be attending, and our upcoming webinar series on Build Promotion with Nexus Professional.</p>

<p>The Sonatype newsletter helps you catch up on everything we&#8217;ve been up  to, and read about upcoming projects, releases and presentations from  the Sonatype team.</p>

<p>If you want to get updates from the Sonatype team the moment news  breaks and cannot wait until the next newsletter, subscribe to this  Twitter feed:</p>

<ul>
    <li><a href="http://twitter.com/SonatypeCM">http://twitter.com/SonatypeCM</a></li>
</ul>

<p>If  you would like to get on our mailing list, you can <a href="../../newsletter/signup">subscribe here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/08/sonatypes-august-newsletter-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aether questions answered for JAX</title>
		<link>http://blog.sonatype.com/people/2010/08/aether-questions-answered-for-jax/</link>
		<comments>http://blog.sonatype.com/people/2010/08/aether-questions-answered-for-jax/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 12:17:43 +0000</pubDate>
		<dc:creator>Jason van Zyl</dc:creator>
				<category><![CDATA[Aether]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[JAX]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5983</guid>
		<description><![CDATA[JAX asked me some questions about Aether so I&#8217;m providing the the English version of the answers here for the community. The German version should show up on the JAX site shortly. Can you give us an introduction to Aether? Aether is a library for interacting with artifact repositories. This involves the specification of local [...]]]></description>
				<content:encoded><![CDATA[<p>JAX asked me some questions about Aether so I&#8217;m providing the the English version of the answers here for the community. The German version should show up on the JAX site shortly.</p>

<h2>Can you give us an introduction to Aether?</h2>

<p>Aether is a library for interacting with artifact repositories. This involves the specification of local repository formats, remote repository formats, workspaces, transports, and artifact resolution. People are generally familiar with repositories whether they be local or remote. Workspaces are additional sources where artifacts can be resolved from. Workspaces can be used in IDEs to provide resolution of projects you are working on, in shells like the Maven Shell or Roo, or any other long-lived process where a developer needs to resolve against in-development projects. I think people are familiar with various transports but HTTP is by far the dominant transport used with artifact repositories, but Aether lets you define additional ones if you need to. Along with all the rules to resolve artifacts taking into consideration any transformations, relocations, and conflict resolution strategies you might need to employ. We also plan to allow Aether to define version schemes, but the first work was just started on this by Alin Dreghiciu.</p>

<p>It is very important to note that Aether has no dependencies on Maven. When I said Aether is a library for interacting with artifact repositories, I didn&#8217;t mean Maven artifact repositories. Aether is a general purpose library for interacting with artifact repositories. If you wanted to specify your dependency metadata in a properties files Aether will let you do that. If you want to store your artifacts in a database Aether will let you do that. But, of course, we needed Aether to work for Maven so we created an implementation of what we call an ArtifactDescriptorReader to process Maven POMs. That implementation lives in the Maven codebase and that&#8217;s how we make Aether work for Maven.</p>

<p><span id="more-5983"></span></p>

<h2>Why is interoperability at the repository level, so important for Maven projects?</h2>

<p>It&#8217;s more a question of interoperability between tools that interact with Maven repositories. Maven projects interoperate because they all use Maven. What we want to ensure is that projects building with SBT, Leinigen, Gradle, Buildr, Ant, or a homegrown system interoperate reliably with Maven repositories. Maven repositories are the defacto standard storehouses of JVM components. If a project that builds with Gradle can&#8217;t interoperate with a project built with Maven on the same machine because the local repository format that Ivy produces is not compatible then we see that as highly problematic. We want to prevent these problems, and we know that people creating these build tools would prefer to use as neutral a library as possible. Of course, to interoperate with Maven repositories integrators will require the ArtifactDescriptorReader to process POMs from remote repositories but they can create their own format for describing their dependency metadata.</p>

<h2>At the project announcement, it is stated that “if compatibility with Maven repositories is important for your project then it’s not going to get any better than Aether.” Why is this?</h2>

<p>If a project is using the Aether implementations that Maven itself is using then they are guaranteed to have the same behavior Maven does for resolving artifacts. If SBT is using the exact same code as Maven to read and process POMs, and the same local repository implementation then the level of interoperability is pretty much guaranteed. All the various tools may want to express their dependencies in their own particular way, but it would be bad if they interpreted POMs differently, did conflict resolution differently, or deployed artifact metadata incorrectly. These types of problems just wreak havoc for the average user trying to use artifacts from Maven repositories.</p>

<h2>What is Aether&#8217;s relationship to Mercury and SAT4J library?</h2>

<p>Mercury was our previous attempt at a library like Aether. We learned many things from Mercury, but it was a failed attempt because we tried to do too much at once. We tried to completely separate the resolution code from Maven, and introduce SAT4J at the same time. This proved to be a fatal mistake, but we have learned from our mistakes. Since Mercury we&#8217;ve brought Pascal Rapicault, the lead of the Eclipse p2 project, to the Sonatype team. Pascal is very familiar with SAT4J, but more importantly Pascal has a very good working relationship with Daniel Le Berre, who is the author of the SAT4J library. In talking with Pascal about our goals for Aether we concluded that we should design Aether to eventually allow a collaboration with SAT4J but not use it in our first pass. Our primary goal was to create a general purpose library that could be used in any tool including Maven. It&#8217;s also going to take more research and experimentation to understand exactly how we will integrate SAT4J. It&#8217;s not a question of if we will integrate SAT4J, it&#8217;s a question of when.</p>

<h2>What is the current status of Aether Ant Tasks?</h2>

<p>The Aether Ant Tasks are functional. They currently do the basic resolving, installing, and deploying. But there are some clarifications that we want to make in the syntax before we make an official release. The Aether Ant Tasks can be found in their <a href="http://github.com/sonatype/sonatype-aether/tree/ant/aether-ant-tasks/">own branch at Github</a>. For those interested in discussing what the syntax should look like for the Aether Ant Tasks we encourage you to subscribe to the <a href="mailto:aether-dev-subscribe@sonatype.org">Aether development list</a>. One short term goal with the Aether Ant Tasks is to provide a complete Ant-based solution for <a href="https://docs.sonatype.org/display/repository/sonatype+oss+maven+repository+usage+guide">submitting artifacts to Maven Central</a>.</p>

<p>We also intend to demonstrate how to make submissions to Maven Central programmatically using Aether so integrators can participate as freely in the exchange of JVM artifacts as Maven projects do now.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/08/aether-questions-answered-for-jax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Aether: Embeddable Maven Repository API</title>
		<link>http://blog.sonatype.com/people/2010/08/introducing-aether/</link>
		<comments>http://blog.sonatype.com/people/2010/08/introducing-aether/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 17:43:54 +0000</pubDate>
		<dc:creator>Jason van Zyl</dc:creator>
				<category><![CDATA[Aether]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5952</guid>
		<description><![CDATA[Introducing Aether Aether (pronounced ē&#8217;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 [...]]]></description>
				<content:encoded><![CDATA[<h1>Introducing Aether</h1>

<p>Aether (pronounced ē&#8217;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&#8217;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&#8217;s critical for happy users in the ecosystem.</p>

<h2>Aether &amp; Maven 3.x</h2>

<p>Benjamin Bentmann, Sonatype&#8217;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&#8217;s not going to get any better than Aether.</p>

<h2>Aether &amp; Mercury</h2>

<p>Mercury was our first attempt at extracting a Repository API from Maven and that didn&#8217;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 <a href="http://www.sat4j.org/">SAT4J</a> library but didn&#8217;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.</p>

<h2>Aether, p2 &amp; SAT4J</h2>

<p>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.</p>

<h2>Aether &amp; Ant</h2>

<p>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&#8217;re interested in Aether Ant Tasks you can follow the progress <a href="https://issues.sonatype.org/browse/AETHER-4">here</a>.</p>

<h2>Aether Resources</h2>

<p>If you are interested in Aether here are the goods:</p>

<ul>
<li><a href="http://github.com/sonatype/sonatype-aether">Aether Sources @ Github</a></li>
<li><a href="https://issues.sonatype.org/browse/AETHER">Aether Issue Tracking @ Sonatype</a></li>
<li><a href="https://docs.sonatype.org/display/AETHER">Aether Wiki @ Sonatype</a></li>
<li>Mailing lists:

<ul>
<li><a href="mailto:aether-user@sonatype.org">Aether Users @ sonatype.org</a></li>
<li><a href="mailto:aether-dev@sonatype.org">Aether Developers @ sonatype.org</a></li>
<li><a href="mailto:aether-scm@sonatype.org">Aether SCM @ sonatype.org</a></li>
</ul></li>
</ul>

<p>P.S. Thanks to <a href="https://twitter.com/zepag">Pierre-A Grégoire</a> for the name Aether!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/08/introducing-aether/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
