<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<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 http-equiv="Content-Language" content="en" />
    <title>Archiva :: Modules &#x2013; Archiva Developer's Documentation</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.6.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.6.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://archiva.apache.org/css/site.css" />
      <!-- 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="topBarEnabled">
                      <a href="https://github.com/apache/archiva">
      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
        src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"
        alt="Fork me on GitHub">
    </a>
      <div id="topbar" class="navbar navbar-fixed-top ">
      <div class="navbar-inner">
            <div class="container"><div class="nav-collapse">
            <ul class="nav">
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Developers <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="index.html" title="Overview">Overview</a></li>
            <li><a href="terminology.html" title="Terminology">Terminology</a></li>
            <li><a href="metadata-content-model.html" title="Metadata Control Model">Metadata Control Model</a></li>
            <li><a href="metadata-api.html" title="Metadata API">Metadata API</a></li>
            <li><a href="repository-api.html" title="Repository API">Repository API</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Modules <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="archiva-base/index.html" title="Archiva :: Base">Archiva :: Base</a></li>
            <li><a href="archiva-scheduler/index.html" title="Archiva :: Scheduler">Archiva :: Scheduler</a></li>
            <li><a href="archiva-web/index.html" title="Archiva :: Web">Archiva :: Web</a></li>
            <li><a href="metadata/index.html" title="Archiva :: Metadata">Archiva :: Metadata</a></li>
            <li><a href="plugins/index.html" title="Archiva :: Core Plugins">Archiva :: Core Plugins</a></li>
            <li><a href="archiva-maven/index.html" title="Archiva :: Maven">Archiva :: Maven</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li class="dropdown-submenu">
<a href="project-info.html" title="Project Information">Project Information</a>
              <ul class="dropdown-menu">
                  <li><a href="index.html" title="About">About</a></li>
              </ul>
            </li>
            <li class="dropdown-submenu">
<a href="project-reports.html" title="Project Reports">Project Reports</a>
              <ul class="dropdown-menu">
                  <li><a href="xref/index.html" title="Source Xref">Source Xref</a></li>
                  <li><a href="checkstyle-aggregate.html" title="Checkstyle">Checkstyle</a></li>
                  <li><a href="apidocs/index.html" title="Javadoc">Javadoc</a></li>
              </ul>
            </li>
        </ul>
      </li>
              </ul>
<form id="search-form" action="https://www.google.com/search" method="get"  class="navbar-search pull-right" >
      <input value="https://archiva.apache.org/ref/3.0.0-SNAPSHOT" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript">asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
                              <ul class="nav pull-right"><li>
        <a href="https://twitter.com/archiva" class="twitter-follow-button" data-show-count="false" data-align="right" data-size="large" 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>
        </li></ul>
                    </div>
        </div>
      </div>
    </div>
    <div class="container">
      <div id="banner">
        <div class="pull-left"><a href="http://archiva.apache.org/index.html" id="bannerLeft"><img src="http://archiva.apache.org/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="https://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../../index.html" title="Archiva">Archiva</a><span class="divider">/</span></li>
      <li class=""><a href="index.html" title="Archiva Modules">Archiva Modules</a><span class="divider">/</span></li>
    <li class="active ">Archiva Developer's Documentation</li>
        <li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2019-11-30</li>
          <li id="projectVersion" class="pull-right">Version: 3.0.0-SNAPSHOT</li>
        </ul>
      </div>
        <div id="bodyColumn" >
<div class="section">
<h2><a name="Archiva_Developer.27s_Documentation"></a>Archiva Developer's Documentation</h2>
<p>These documents cover the architecture of Archiva and how to work with it. Information for users and plugin developers can be found instead in the <a class="externalLink" href="http://archiva.apache.org/docs/3.0.0-SNAPSHOT/index.html"> main Archiva documentation</a>.</p>
<p><i>Note:</i> This documentation is far from complete, and mostly covers new improvements relevant to developers as they are made, and may not cover older topics such as the <tt>archiva-model</tt> or <tt>archiva-repository-layer</tt> libraries that are still in use and particularly coupled to certain repository types and the web interfaces.</p>
<div class="section">
<h3><a name="Overview"></a>Overview</h3>
<p>Archiva is built as a layered application. It is intended to provide a platform for dealing with repositories of varied types, and so is built as a series of modular libraries that aim to be able to be used independently (such as embedded scenarios, from the CLI, or within the Archiva web application).</p>
<p>Central to the redesign of Archiva is the concept of a metadata content repository. Archiva separates the physical storage of a repository from the representation it works on, allowing it to store information about the repository in an extensible format that any plugin can operate on or add to, without all subsystems needing to know about each other. The metadata is not specific to any repository type - for instance, the Maven 2 portions can be completely optional. More information on the metadata format and how it is persisted is present in the section below.</p>
<p>This structure allows metadata repositories to be physically separated from the repository they represent and remotely updated. However, it is also possible to link the repository storage via the API so that the metadata can operate &quot;live&quot; on a repository, detecting changes. This also allows plugins that wish to operate directly on a repository (for example, Maven snapshot purging).</p>
<p>Similarly, the resolution strategy for resources in the repository is abstracted from the storage and metadata to allow multiple strategies. This facilitates features such as repository proxying, repository grouping, and on the fly format conversion. These are described in the <a href="./repository-api.html"> Repository API</a> documents.</p>
<p>On top of the metadata repository, components can be built to provide the services available in the application. These are described as plugins, though at this time there is no formal plugin registration mechanism or interface - they are loaded by the presence of the JAR in the application classpath, with the appropriate Spring or Plexus manifest and implementation of a core interface that they can &quot;plug in&quot; to. At present, these plugins interact either due to a user request (the repository resolution extension points), a distinct scheduled task, or as part of a repository scanning operation (the Archiva 1.0+ 'consumer' mechanism). In the future, an event mechanism is envisaged as the main means of triggering plugin operations, further decoupling them from the core interfaces. Plugins generally interact directly with the metadata repository to retrieve information, or store their own.</p>
<p>Some examples of current plugins are:</p>
<ul>
<li>Maven 2 storage repository type</li>
<li>Repository statistics</li>
<li>File-based metadata content repository persistence</li></ul>
<p>Finally, we look to the web application layers. At present, there is a single web application that serves both a WebDAV and Struts 2-based application, and operates directly on the metadata repository and some of the legacy APIs. Future development plans to better decouple these from the underlying plugins and legacy APIs, to allow applications to be much more componentised in their deployment.</p>
<div class="section">
<h4><a name="How_it_Works"></a>How it Works</h4>
<ul>
<li><a href="./terminology.html"> Terminology</a></li>
<li><a href="./metadata-content-model.html"> Repository metadata content model</a></li>
<li><a href="./metadata-api.html"> Repository metadata API and persistence</a></li>
<li><a href="./repository-api.html"> Repository APIs</a></li></ul></div></div>
<div class="section">
<h3><a name="More_Information"></a>More Information</h3>
<p>More information is available on the Archiva Wiki:</p>
<ul>
<li><a class="externalLink" href="http://cwiki.apache.org/confluence/display/ARCHIVA/Archiva+Developer+Notes"> Developer Notes</a></li>
<li><a class="externalLink" href="http://cwiki.apache.org/confluence/display/ARCHIVA/Conventions+and+Processes"> Conventions and Processes</a></li></ul></div></div>
        </div>
    </div>
    <hr/>
    <footer>
      <div class="container">
        <div class="row">
            <p>Copyright &copy;2006&#x2013;2019
<a href="http://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        <p id="poweredBy" class="pull-right">  <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>
  </p>
                          <div id="ohloh" class="pull-right">
      <script type="text/javascript" src="https://www.ohloh.net/p/6670/widgets/project_thin_badge.js"></script>
    </div>
        </div>
    </footer>
    </body>
</html>