= Downloads

== General information

Apache Aries modules are distributed in source and binary form.
These http://www.apache.org/dist/aries/KEYS[KEYS] can be used to verify the releases.

All Apache Aries products are distributed under the terms of The Apache Software License (version 2.0).
See the LICENSE file included in each distribution for additional license information.

== Official downloads

The official downloads for Apache projects are hosted at Apache.
For maven users we recommend to simply refer to the  individual maven artifacts instead of downloading by hand.

http://www.apache.org/dist/aries/[Official Aries Downloads]

== Maven central

All Aries modules are released to http://search.maven.org[maven central].

The Aries subprojects can be found at these locations

* {blank}
+
[cols=4*]
|===
| [async](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.async)
|===

* {blank}
+
[cols=4*]
|===
| [blueprint](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.blueprint)
|===

* {blank}
+
[cols=5*]
|===
| [eba-maven-plugin](http://search.maven.org/#artifactdetails
| org.apache.aries
| eba-maven-plugin
| 1.0.0
| maven-plugin)
|===

* {blank}
+
[cols=4*]
|===
| [ejb](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.ejb)
|===

* {blank}
+
[cols=4*]
|===
| [jmx](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.jmx)
|===

* {blank}
+
[cols=4*]
|===
| [jndi](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.jndi)
|===

* {blank}
+
[cols=4*]
|===
| [jpa](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.jpa)
|===

* {blank}
+
[cols=4*]
|===
| [proxy](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.proxy)
|===

* {blank}
+
[cols=4*]
|===
| [quiesce](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.quiesce)
|===

* {blank}
+
[cols=4*]
|===
| [subsystem](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.subsystem)
|===

* {blank}
+
[cols=4*]
|===
| [testsupport](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.testsupport)
|===

* {blank}
+
[cols=4*]
|===
| [transaction](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.transaction)
|===

* {blank}
+
[cols=4*]
|===
| [util](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.util)
|===

* {blank}
+
[cols=4*]
|===
| [web](http://search.maven.org/#search
| ga
| 1
| g%3Aorg.apache.aries.web)
|===

== Apache Karaf

http://karaf.apache.org[Apache Karaf] is a modular OSGi server that integrates very well with Aries.
Most aries subprojects can be installed into Apache Karaf using features.
For example *feature:install jndi* installs the Aries jndi modules.

== Samples

The easiest way to use the samples is to download the source zip, navigate to the appropriate 'assembly' module and run mvn install to download all the released  binary artifacts.
Alternatively you can build the entire source.

http://www.apache.org/dyn/closer.cgi/aries/samples-1.0.0-source-release.zip[Aries Samples]
