<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at May 27, 2013
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<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="20130527" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Archiva Documentation - Understanding Repository Configuration of Apache Archiva</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.3.0.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.0.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="http://www.apache.org/images/asf_logo_wide.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>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../" title="Apache Archiva">
        Apache Archiva</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../../../index.html" title="Apache Archiva">
        Apache Archiva</a>
        </li>
      <li class="divider ">/</li>
        <li class="">Understanding Repository Configuration of Apache Archiva</li>
        
                
                    
                  <li id="publishDate" class="pull-right">Last Published: 2013-05-27</li> <li class="divider pull-right">|</li>
              <li id="projectVersion" class="pull-right">Version: 1.4-M4</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 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/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/1.4-M4/" 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 class="divider" />

           <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>
                             <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>Understanding Repository Configuration of Apache Archiva<a name="Understanding_Repository_Configuration_of_Apache_Archiva"></a></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>Managed Repository<a name="Managed_Repository"></a></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><ul><li><b>identifier</b> - the id of the repository. This must be unique.</li><li><b>name</b> - the name of the repository.</li><li><b>directory</b> - the location of the repository. If the path specified does not exist, Archiva will create the missing directories.</li><li><b>index directory</b> - 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.</li><li><b>type</b> - the repository layout (maven 2 or maven 1)</li><li><b>cron</b> - the <a class="externalLink" href="http://quartz-scheduler.org/api/2.1.5/org/quartz/CronTrigger.html">cron schedule</a> when repository scanning will be executed.</li><li><b>repository purge by days older</b> - 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.</li></ul><!-- above was:the retention count (see #7) of course no idea what is was linkeed to --><ul><li><b>repository purge by retention count</b> - 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.</li><li><b>releases included</b> - specifies whether there are released artifacts in the repository.</li><li><b>block re-deployment of released artifacts</b> - specifies whether released artifacts that are already existing in the repository can be overwritten. Note that this only take effects for non-snapshot deployments.</li><li><b>snapshots included</b> - specifies whether there are snapshot artifacts in the repository.</li><li><b>scannable</b> - specifies whether the repository can be scanned, meaning it is a local repository which can be indexed, browsed, purged, etc.</li><li><b>delete released snapshots</b> - specifies whether to remove those snapshot artifacts which already has release versions of it in the repository during repository purge.</li><li><b> Skip Packed Index creation </b> - avoid creation of compressed index for IDE usage.</li></ul><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 class="prettyprint">http://[URL TO ARCHIVA]/repository/[REPOSITORY ID] (e.g. http://localhost:8080/archiva/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>Remote Repository<a name="Remote_Repository"></a></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><ul><li><b>identifier</b> - the id of the remote repository.</li><li><b>name</b> - the name of the remote repository.</li><li><b>url</b> - 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.</li><li><b>username</b> - the username (if authentication is needed) to be used to access the repository.</li><li><b>password</b> - the password (if authentication is needed) to be used to access the repository.</li><li><b>type</b> - the layout (maven 2 or maven 1) of the remote repository.</li><li><b>Activate download remote index</b> - to activate downloading remote index to add available remote artifacts in search queries.</li><li><b>Remote index url, can be relative to url</b> - path of the remote index directory.</li><li><b>Cron expression</b> - cron expression for downloading remote index (default weekly on sunday)</li><li><b>Directory index storage</b> - path to store index directory, default will be ${appserver.base}/data/remotes/${repositoryId}/.indexer</li><li><b>Download Remote Index Timeout in seconds</b> - read time out for downloading remote index files (default 300)</li><li><b>Network Proxy to Use for download Remote Index</b> - proxy to use for downloading remote index files.</li><li><b>Download Remote Index on Startup</b> - will download remote index on Archiva startup.</li><li><b>Additionnal url parameters</b> - key/value pairs to add to url when querying remote repository.</li><li><b>Additionnal Http Headers</b> - key/value pairs to add as http headers when querying remote repository.</li></ul><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>Maven Index from Remote repositories<a name="Maven_Index_from_Remote_repositories"></a></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://archiva/repository/id/.index (you can consume those files for IDE)</p></div></div><div class="section"><h3>Scanning a Repository<a name="Scanning_a_Repository"></a></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>Repository Purge<a name="Repository_Purge"></a></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 class="prettyprint">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>Deleting Released Snapshots<a name="Deleting_Released_Snapshots"></a></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 span12">Copyright &copy;                    2006-2013
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

                                                                  <?xml version="1.0" encoding="UTF-8"?>
<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>
                                                          <?xml version="1.0" encoding="UTF-8"?>
<div class="row span12">
  <a href="http://archiva.apache.org/docs/1.4-M4/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>