blob: 6f8cc6ebd021088de9806ca7a837049c924ae57c [file] [log] [blame]
<!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>