blob: af9520cf9e0551fa5942e07f79676a2ccc5a1442 [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia
| Rendered using Apache Maven Fluido Skin 1.3.1
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="author" content="Maria Odea Ching
Olivier Lamy" />
<meta name="Date-Creation-yyyymmdd" content="20130207" />
<meta name="Date-Revision-yyyymmdd" content="20200614" />
<meta http-equiv="Content-Language" content="en" />
<title>Archiva Documentation &#x2013; Understanding Repository Configuration of Apache Archiva</title>
<link rel="stylesheet" href="../css/apache-maven-fluido-1.3.1.min.css" />
<link rel="stylesheet" href="../css/site.css" />
<link rel="stylesheet" href="../css/print.css" media="print" />
<script type="text/javascript" src="../js/apache-maven-fluido-1.3.1.min.js"></script>
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-140879-5']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body class="topBarDisabled">
<div class="container-fluid">
<div id="banner">
<div class="pull-left">
<a href="../../../" id="bannerLeft">
<img src="../../../images/archiva.png" alt="Apache Archiva"/>
</a>
</div>
<div class="pull-right"> <a href="http://www.apache.org/" id="bannerRight">
<img src="https://www.apache.org/images/asf_logo_wide_2016.png" alt="Apache Software Foundation"/>
</a>
</div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li class="">
<a href="http://www.apache.org/" class="externalLink" title="Apache">
Apache</a>
<span class="divider">/</span>
</li>
<li class="">
<a href="../" title="Apache Archiva">
Apache Archiva</a>
<span class="divider">/</span>
</li>
<li class="">
<a href="../../../index.html" title="Apache Archiva">
Apache Archiva</a>
<span class="divider">/</span>
</li>
<li class="active ">Understanding Repository Configuration of Apache Archiva</li>
<li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2020-06-14</li>
<li id="projectVersion" class="pull-right">
Version: 2.2.5
</li>
</ul>
</div>
<div class="row-fluid">
<div id="leftColumn" class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Introduction</li>
<li>
<a href="../quick-start.html" title="Quick Start">
<i class="none"></i>
Quick Start</a>
</li>
<li>
<a href="../tour/index.html" title="Feature Tour">
<i class="none"></i>
Feature Tour</a>
</li>
<li>
<a href="../release-notes.html" title="Release Notes">
<i class="none"></i>
Release Notes</a>
</li>
<li>
<a href="../../../download.html" title="Downloads">
<i class="none"></i>
Downloads</a>
</li>
<li class="nav-header">Users Guide</li>
<li>
<a href="../userguide/browsing.html" title="Browsing">
<i class="none"></i>
Browsing</a>
</li>
<li>
<a href="../userguide/searching.html" title="Searching">
<i class="none"></i>
Searching</a>
</li>
<li>
<a href="../userguide/delete-artifact.html" title="Deleting an Artifact">
<i class="none"></i>
Deleting an Artifact</a>
</li>
<li>
<a href="../userguide/using-repository.html" title="Using as a repository">
<i class="none"></i>
Using as a repository</a>
</li>
<li>
<a href="../userguide/deploy.html" title="Deploying to repository">
<i class="none"></i>
Deploying to repository</a>
</li>
<li>
<a href="../userguide/virtual-repositories.html" title="Configuring Virtual Repositories">
<i class="none"></i>
Configuring Virtual Repositories</a>
</li>
<li>
<a href="../userguide/rss.html" title="Rss Feeds in Archiva">
<i class="none"></i>
Rss Feeds in Archiva</a>
</li>
<li>
<a href="../userguide/querying-artifacts.html" title="Querying Artifacts">
<i class="none"></i>
Querying Artifacts</a>
</li>
<li class="nav-header">Administrators Guide</li>
<li>
<a href="../adminguide/installing.html" title="Installing Archiva">
<i class="icon-chevron-right"></i>
Installing Archiva</a>
</li>
<li>
<a href="../adminguide/databases.html" title="Databases">
<i class="none"></i>
Databases</a>
</li>
<li>
<a href="../adminguide/repositories-content-storage.html" title="Repositories Content Storage">
<i class="none"></i>
Repositories Content Storage</a>
</li>
<li>
<a href="../adminguide/security.html" title="Security">
<i class="icon-chevron-right"></i>
Security</a>
</li>
<li>
<a href="../adminguide/configuration.html" title="Archiva Configuration">
<i class="icon-chevron-down"></i>
Archiva Configuration</a>
<ul class="nav nav-list">
<li class="active">
<a href="#"><i class="none"></i>Repositories</a>
</li>
<li>
<a href="../adminguide/proxy-connectors.html" title="Proxy Connectors">
<i class="none"></i>
Proxy Connectors</a>
</li>
<li>
<a href="../adminguide/proxy-connector-rules.html" title="Proxy Connectors Rules">
<i class="none"></i>
Proxy Connectors Rules</a>
</li>
<li>
<a href="../adminguide/network-proxies.html" title="Network Proxies">
<i class="none"></i>
Network Proxies</a>
</li>
<li>
<a href="../adminguide/network-configuration.html" title="Network Configuration">
<i class="none"></i>
Network Configuration</a>
</li>
<li>
<a href="../adminguide/legacy.html" title="Legacy (Maven 1) Support">
<i class="none"></i>
Legacy (Maven 1) Support</a>
</li>
<li>
<a href="../adminguide/consumers.html" title="Consumers">
<i class="none"></i>
Consumers</a>
</li>
<li>
<a href="../adminguide/staging-repositories.html" title="Staging Repositories">
<i class="none"></i>
Staging Repositories</a>
</li>
<li>
<a href="../adminguide/appearance-configuration.html" title="Appearance Configuration">
<i class="none"></i>
Appearance Configuration</a>
</li>
<li>
<a href="../adminguide/ui-configuration.html" title="UI Configuration">
<i class="none"></i>
UI Configuration</a>
</li>
<li>
<a href="../adminguide/file-locking-configuration.html" title="File Locking Configuration">
<i class="none"></i>
File Locking Configuration</a>
</li>
<li>
<a href="../adminguide/url-cache-failure-configuration.html" title="Url Failure Cache Configuration">
<i class="none"></i>
Url Failure Cache Configuration</a>
</li>
<li>
<a href="../adminguide/redback-runtime-configuration.html" title="Redback Runtime Configuration">
<i class="none"></i>
Redback Runtime Configuration</a>
</li>
</ul>
</li>
<li>
<a href="../adminguide/webservices/rest.html" title="REST Apis">
<i class="none"></i>
REST Apis</a>
</li>
<li>
<a href="../adminguide/configuration-files.html" title="Configuration Files">
<i class="none"></i>
Configuration Files</a>
</li>
<li>
<a href="../adminguide/system-status.html" title="System Status">
<i class="none"></i>
System Status</a>
</li>
<li>
<a href="../adminguide/logging.html" title="Log Files">
<i class="icon-chevron-right"></i>
Log Files</a>
</li>
<li>
<a href="../adminguide/reports.html" title="Reports">
<i class="none"></i>
Reports</a>
</li>
<li class="nav-header">Customising Archiva</li>
<li>
<a href="../customising/writing-consumer.html" title="Writing a Consumer Plugin">
<i class="none"></i>
Writing a Consumer Plugin</a>
</li>
<li class="nav-header">More Information</li>
<li>
<a href="http://cwiki.apache.org/confluence/display/ARCHIVA/Index" class="externalLink" title="Archiva Wiki">
<i class="none"></i>
Archiva Wiki</a>
</li>
<li class="nav-header">ASF</li>
<li>
<a href="http://www.apache.org/foundation/how-it-works.html" class="externalLink" title="How Apache Works">
<i class="none"></i>
How Apache Works</a>
</li>
<li>
<a href="http://www.apache.org/foundation/" class="externalLink" title="Foundation">
<i class="none"></i>
Foundation</a>
</li>
<li>
<a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsoring Apache">
<i class="none"></i>
Sponsoring Apache</a>
</li>
<li>
<a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">
<i class="none"></i>
Thanks</a>
</li>
<li class="nav-header">Project Documentation</li>
<li>
<a href="../project-info.html" title="Project Information">
<i class="icon-chevron-right"></i>
Project Information</a>
</li>
</ul>
<form id="search-form" action="http://www.google.com/search" method="get" >
<input value="http://archiva.apache.org/docs/2.2.5/" name="sitesearch" type="hidden"/>
<input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=search-form"></script>
<hr />
<div id="poweredBy">
<div class="clear"></div>
<div class="clear"></div>
<div id="twitter">
<a href="https://twitter.com/archiva" class="twitter-follow-button" data-show-count="false" data-align="left" data-size="medium" data-show-screen-name="true" data-lang="en">Follow archiva</a>
<script type="text/javascript">!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
<img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
</a>
</div>
</div>
</div>
<div id="bodyColumn" class="span10" >
<!-- 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 --><div class="section">
<h2><a name="Understanding_Repository_Configuration_of_Apache_Archiva"></a>Understanding Repository Configuration of Apache Archiva</h2><!-- TODO: revise more as suggested by Jeff in the dev list -->
<p>Archiva has two types of repository configuration: managed repository and remote repository.</p>
<div class="section">
<h3><a name="Managed_Repository"></a>Managed Repository</h3>
<p>A managed repository is a repository which resides locally to the server where Archiva is running. It could serve as a proxy repository, an internal deployment repository or a local mirror repository.</p>
<p>Managed repository fields:</p>
<table border="1" class="table table-striped">
<tr class="a">
<td align="left"><b>Id</b></td>
<td align="left">The identifier of the repository. This must be unique.</td></tr>
<tr class="b">
<td align="left"><b>Name</b></td>
<td align="left">The name of the repository. This is the display name.</td></tr>
<tr class="a">
<td align="left"><b>Directory</b></td>
<td align="left">The location of the repository. If the path specified does not exist, Archiva will create the missing directories.</td></tr>
<tr class="b">
<td align="left"><b>Index Directory</b></td>
<td align="left">The location of the index files generated by Archiva. If no location is specified, then the index directory (named <tt>.indexer</tt>) will be created at the root of the repository directory. This directory contains the packaged/bundled index which is consumed by different consumers of the index such as M2Eclipse.</td></tr>
<tr class="a">
<td align="left"><b>Type</b></td>
<td align="left">The repository layout (maven 2 or maven 1)</td></tr>
<tr class="b">
<td align="left"><b>Cron Expression</b></td>
<td align="left">The <a class="externalLink" href="http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html">cron schedule</a> when repository scanning will be executed.</td></tr>
<tr class="a">
<td align="left"><b>Days Older</b></td>
<td align="left">The first option for repository purge. Archiva will check how old the artifact is and if it is older than the set number of days in this field, then the artifact will be deleted respecting the retention count of course. In order to disable the purge by number of days old and set Archiva to purge by retention count, just set the repository purge field to 0. The maximum number of days which can be set here is 1000. See the Repository Purge section below for more details.</td></tr>
<tr class="b">
<td align="left"><b>Retention Count</b></td>
<td align="left">The second option for repository purge. When running the repository purge, Archiva will retain only the number of artifacts set for this field for a specific snapshot version. See the Repository Purge section below for more details.</td></tr>
<tr class="a">
<td align="left"><b>Description</b></td>
<td align="left">Additional information about the repository.</td></tr>
<tr class="b">
<td align="left"><b>Releases</b></td>
<td align="left">Specifies whether there are released artifacts in the repository.</td></tr>
<tr class="a">
<td align="left"><b>Snapshots</b></td>
<td align="left">Specifies whether there are snapshot artifacts in the repository.</td></tr>
<tr class="b">
<td align="left"><b>Block Redeployments</b></td>
<td align="left">Specifies whether released artifacts that are already existing in the repository can be overwritten. Note that this only take effects for non-snapshot deployments.</td></tr>
<tr class="a">
<td align="left"><b>Scanned</b></td>
<td align="left">Specifies whether the repository can be scanned, meaning it is a local repository which should be indexed, purged, etc.</td></tr>
<tr class="b">
<td align="left"><b>Delete Released Snapshots</b></td>
<td align="left">Specifies whether to remove those snapshot artifacts which already has release versions of it in the repository during repository purge.</td></tr>
<tr class="a">
<td align="left"><b>Staging Repository</b></td>
<td align="left">Automatic creation of a stage repository for this local repository.</td></tr>
<tr class="b">
<td align="left"><b> Skip Packed Index Creation</b></td>
<td align="left">Avoid creation of compressed index for IDE usage.</td></tr></table><img src="../images/managed-repositories.png" alt="Managed Repositories" />
<p>Each repository has its own http(s)/webdav url. This allows the user to browse and access the repository via http(s)/webdav. The url has the following format:</p>
<div class="source">
<pre>http://[URL TO ARCHIVA]/repository/[REPOSITORY ID] (e.g. http://localhost:8080/repository/releases).</pre></div>
<p>A pom snippet is also available for each repository. The &lt;distributionManagement&gt; section can be copied and pasted into a project's pom to specify that the project will be deployed in that managed repository. The &lt;repositories&gt; section on the other hand, can be copied and pasted to a project's pom.xml or to Maven's settings.xml to tell Maven to get artifacts from the managed repository when building the project.</p></div>
<div class="section">
<h3><a name="Remote_Repository"></a>Remote Repository</h3>
<p>A remote repository is a repository which resides remotely. These repositories are usually the proxied repositories. See Proxy Connectors on how to proxy a repository.</p>
<p>Remote repository fields:</p>
<table border="1" class="table table-striped">
<tr class="a">
<td align="left"><b>Id</b></td>
<td align="left">The identifier of the remote repository.</td></tr>
<tr class="b">
<td align="left"><b>Name</b></td>
<td align="left">The name of the remote repository.</td></tr>
<tr class="a">
<td align="left"><b>Url</b></td>
<td align="left">The url of the remote repository. It is also possible to use a 'file://' url to proxy a local repository. Be careful that if this local repository is a managed repository of archiva which has some proxies connectors, those ones won't be triggered.</td></tr>
<tr class="b">
<td align="left"><b>Username</b></td>
<td align="left">The username (if authentication is needed) to be used to access the repository.</td></tr>
<tr class="a">
<td align="left"><b>Password</b></td>
<td align="left">The password (if authentication is needed) to be used to access the repository.</td></tr>
<tr class="b">
<td align="left"><b>Download Timeout</b></td>
<td align="left">The time in seconds after which a download from the remote repository is stopped.</td></tr>
<tr class="a">
<td align="left"><b>Type</b></td>
<td align="left">The layout (maven 2 or maven 1) of the remote repository.</td></tr>
<tr class="b">
<td align="left"><b>Download Remote Index</b></td>
<td align="left">To activate downloading remote index to add available remote artifacts in search queries.</td></tr>
<tr class="a">
<td align="left"><b>Remote Index Url</b></td>
<td align="left">Can be relative to Url - path of the remote index directory.</td></tr>
<tr class="b">
<td align="left"><b>Cron expression</b></td>
<td align="left">Cron expression for downloading remote index (default weekly on sunday)</td></tr>
<tr class="a">
<td align="left"><b>Index Directory</b></td>
<td align="left">Path to store index directory, default will be ${appserver.base}/data/remotes/${repositoryId}/.indexer</td></tr>
<tr class="b">
<td align="left"><b>Download Remote Index Timeout</b></td>
<td align="left">Time in seconds, after which download of remote index files will be stopped (default 300).</td></tr>
<tr class="a">
<td align="left"><b>Proxy for Remote Download Index</b></td>
<td align="left">Proxy to use for downloading remote index files.</td></tr>
<tr class="b">
<td align="left"><b>Download Remote Index on Startup</b></td>
<td align="left">If selected, the remote index will be downloaded on Archiva startup.</td></tr>
<tr class="a">
<td align="left"><b>Description</b></td>
<td align="left">Can be used to store additional information about the repository.</td></tr>
<tr class="b">
<td align="left"><b>Connection Check Path</b></td>
<td align="left">If set, the connection to the remote repository is checked by validating the existence of the given file / artifact. Some repositories do not allow to browse the base directory and the standard check may fail. The path is relative to the repository Url.</td></tr>
<tr class="a">
<td align="left"><b>Additionnal Url Parameters</b></td>
<td align="left">Key/Value pairs to add to url when querying remote repository.</td></tr>
<tr class="b">
<td align="left"><b>Additionnal Http Headers</b></td>
<td align="left">Key/Value pairs to add as http headers when querying remote repository.</td></tr></table><img src="../images/remote-repositories.png" alt="Remote Repositories" />
<p>You can also trigger an immediate download of remote index files.</p>
<div class="section">
<h4><a name="Maven_Index_from_Remote_repositories"></a>Maven Index from Remote repositories</h4>
<p><b>Since 1.4-M4</b>: If you have configured download remote index, those files (Maven Indexer project format) will be available in the path http://[URL TO ARCHIVA]/repository/id/.index (you can consume those files for IDE)</p></div></div>
<div class="section">
<h3><a name="Scanning_a_Repository"></a>Scanning a Repository</h3>
<p>Repository scan can be executed on schedule or it can be explicitly executed by clicking the 'Scan Repository Now' button in the repositories page. By default, Archiva only processes new artifacts in the repository with respect to the last run of the repository scanner. Meaning that if the artifact's last modified date is newer than the last repository scan, then the artifact will be processed. Otherwise, it will be skipped. You can override this behavior and force Archiva to process all artifacts regardless of its age by ticking the 'Process All Artifacts' checkbox in the repositories page and clicking the 'Scan Repository Now' button.</p><img src="../images/repositories.png" alt="Repositories" />
<p>For every artifact found by the repository scanner, processing is done on this artifact by different consumers. Examples of the processing done are: indexing, repository purge and database update. Details about consumers are available in the <a href="./consumers.html"> Consumers</a> page.</p></div>
<div class="section">
<h3><a name="Repository_Purge"></a>Repository Purge</h3>
<p>Repository purge is the process of cleaning up the repository of old snapshots. When deploying a snapshot to a repository, Maven deploys the project/artifact with a timestamped version. Doing daily/nightly builds of the project then tends to bloat the repository. What if the artifact is large? Then disk space will definitely be a problem. That's where Archiva's repository purge feature comes in. Given a criteria to use -- by the number of days old and by retention count, it would clean up the repository by removing old snapshots.</p>
<p>Please take note that the by number of days old criteria is activated by default (set to 100 days). In order to de-activate it and use the by retention count criteria, you must set the Repository Purge By Days Older field to 0. Another thing to note here is that if the by number of days old criteria is activated, the retention count would still be respected (See the Repository Purge By Days Older section below for more details) but not the other way around.</p>
<p>Let's take a look at different behaviours for repository purge using the following scenario:</p>
<div class="source">
<pre>Artifacts in the repository:
../artifact-x/2.0-SNAPSHOT/artifact-x-20061118.060401-2.jar
../artifact-x/2.0-SNAPSHOT/artifact-x-20061118.060401-2.pom
../artifact-x/2.0-SNAPSHOT/artifact-x-20070113.034619-3.jar
../artifact-x/2.0-SNAPSHOT/artifact-x-20070113.034619-3.pom
../artifact-x/2.0-SNAPSHOT/artifact-x-20070203.028902-4.jar
../artifact-x/2.0-SNAPSHOT/artifact-x-20070203.028902-4.pom</pre></div>
<ol style="list-style-type: decimal">
<li>Repository Purge By Number of Days Older
<p>Using this criteria for the purge, Archiva will check how old an artifact is and if it is older than the set value in the repository purge by days older field, then the artifact will be deleted respecting the retention count of course.</p>
<p>If repository purge by days older is set to 100 days (with repository purge by retention count field set to 1), and the current date is let's say 03-01-2007, given the scenario above.. the following artifacts will be retained: artifact-x-20070113.034619-3.jar, artifact-x-20070113.034619-3.pom, artifact-x-20070203.028902-4.jar and artifact-x-20070203.028902-4.pom. It is clear in the version timestamps that these 4 artifacts are not more than 100 days old from the current date (which is 03-01-2007 in our example) so they are all retained. In this case the retention count doesn't have any effect since the priority is the age of the artifact.</p>
<p>Now, if the repository purge by days older is set to 30 days (with repository purge by retention count field still set to 1) and the current date is still 03-01-2007, then given the same scenario above.. only the following artifacts will be retained: artifact-x-20070203.028902-4.jar and artifact-x-20070203.028902-4.pom. In this case, we can see that the retained artifacts are still not older by the number of days set in the repository purge by days older field and the retention count is still met.</p>
<p>Now, let's set the repository purge by days older to 10 days (with repository purge by retention count field still set to 1) and the current date is still 03-01-2007, then still given the same repository contents above.. the following artifacts will still be retained: artifact-x-20070203.028902-4.jar and artifact-x-20070203.028902-4.pom. It is clear from the version timestamps that the artifacts ARE MORE THAN the repository purge by days older value, which is 10 days. Why is it still retained? Recall the value of the repository purge by retention count -- 1 :) This ensures that there is ALWAYS 1 artifact timestamped version retained for every unique version snapshot directory of an artifact.</p></li>
<li>Repository Purge By Retention Count
<p>If the repository purge by retention count field is set to 2, then only the artifacts artifact-x-20070113.034619-3.jar, artifact-x-20070113.034619-3.pom, artifact-x-20070203.028902-4.jar and artifact-x-20070203.028902-4.pom will be retained in the repository. The oldest snapshots will be deleted maintaining only a number of snapshots equivalent to the set retention count (regardless of how old or new the artifact is).</p></li></ol>
<div class="section">
<h4><a name="Deleting_Released_Snapshots"></a>Deleting Released Snapshots</h4>
<p>You can also configure Archiva to clean up snapshot artifacts that have already been released. This can be done by ticking the Delete Released Snapshots checkbox in the Repository Configuration form.</p>
<p>Once this feature is enabled, if Archiva encounters a snapshot artifact during repository scanning, it would check <b>all</b> the repositories configured for a released version of that snapshot. If it finds one, then it would delete the entire snapshot version directory.</p>
<p>It should be noted that this feature is entirely separate from the repository purge by number of days older and by retention count.</p></div></div></div>
</div>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
<p >Copyright &copy; 2006&#x2013;2020
<a href="http://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
</p>
</div>
<div class="row span12">Apache Archiva :: Documentation, Archiva :: Documentation, Apache, the Apache feather logo, and the Apache Archiva :: Documentation project logos are trademarks of The Apache Software Foundation.</div>
<div class="row span12">
<a href="http://archiva.apache.org/docs/2.2.5/privacy-policy.html">Privacy Policy</a>
</div>
<div id="ohloh" class="pull-right">
<script type="text/javascript" src="http://www.ohloh.net/p/6670/widgets/project_basic_stats.js"></script>
</div>
</div>
</footer>
</body>
</html>