 -----
 Documentation - All Versions
 -----
 Brett Porter
 -----
 2007-11-17
 -----

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Archiva Documentation

* Current Release: Archiva ${archivaReleaseVersion}

  The current stable release of Archiva is <${archivaReleaseVersion}>.

    * {{{./docs/${archivaReleaseVersion}/release-notes.html} Release Notes}}

    * {{{./docs/${archivaReleaseVersion}/index.html} Documentation}}

    * {{{./ref/${archivaReleaseVersion}/index.html} Developer Reference}}

~~ TODO: have more specific links than Documentation, and find a better link for developer reference

#if (!$supportedVersions.isEmpty())
* Previous Stable Releases

*------------+-------------------------------------------------+-----------------------------------------+----------------------------------------------------+
#foreach ($v in $supportedVersions.split(","))
| $v | {{{./docs/$v/release-notes.html} Release Notes}} | {{{./docs/$v/learn.html} Documentation}} | {{{./ref/$v/index.html} Developer Reference}} |
*------------+-------------------------------------------------+-----------------------------------------+----------------------------------------------------+
#end
#end

* Unsupported Releases

    * All Versions 1.X are not supported anymore

 << Previous versions have known security issues so it's recommended to upgrade to last ${archivaReleaseVersion} >>

