<!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; Terminology</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 ">Terminology</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="Terminology"></a>Terminology</h2>
<p>Archiva uses a lot of pieces of data that can have heavily overloaded meaning, so it is important to ensure the terminology used is well defined and consistently used. The following section highlights the terms used in these documents.</p>
<div class="section">
<h3><a name="Repository"></a>Repository</h3>
<p>Repository is the most overloaded term, but when used alone it will refer to the abstract concept of anything that can act as a repository. For example, an on-disk Maven 2 repository, a remote proxied repository, or a repository group that appears as a single repository.</p>
<p>A repository is capable of storing a number of artifacts and their associated metadata. Each artifact is identified by a number of elements: the repository itself, it's namespace, project, project version and artifact ID. Some components are optional, depending on the repository type being discussed - for example each is mapped in a Maven 2 repository, while for a flat file storage only the repository and artifact ID (file path and name) is needed.</p></div>
<div class="section">
<h3><a name="Namespace"></a>Namespace</h3>
<p>A namespace is a hierarchical grouping for projects and artifacts, allowing project and artifact IDs to more easily be made unique within their namespace and to assist in mapping between different repository types.</p>
<p>In a Maven 2 repository, this maps to the group ID of an artifact.</p></div>
<div class="section">
<h3><a name="Project"></a>Project</h3>
<p>A project is a simple grouping of artifacts that share a version in a repository. It does not contain subprojects.</p>
<p>In a Maven 2 repository, this maps to the artifact ID of an artifact. Note that multi-module projects will actually represent multiple projects by default, and additional grouping (other than achieved by the namespace) would need to be done through additional metadata.</p></div>
<div class="section">
<h3><a name="Project_Version"></a>Project Version</h3>
<p>A project version is the version best used to describe the project (the &quot;marketed version&quot;). It must be unique for lookup and comparing project versions to each other, but the artifact(s) it contains may still use a different version. For example:</p>
<ul>
<li>Archiva 1.4-SNAPSHOT may have artifacts <tt>archiva-1.4-20090909.123456-1.jar</tt> and <tt>archiva-1.4-20100201.345612-2.jar</tt>.</li>
<li>Jetty 7.0.0 may have an artifact <tt>jetty-7.0.0.v20091005.jar</tt></li></ul>
<p>In a Maven 2 repository, this maps to the (base) version of a project.</p></div>
<div class="section">
<h3><a name="Artifact_ID"></a>Artifact ID</h3>
<p>The artifact ID uniquely identifies an artifact within a given namespace, project and project version. For example, <tt>archiva-1.4-20100201.345612-2.jar</tt> or <tt>archiva-1.4-20100201.345612-2.pom</tt>.</p>
<p>In a Maven 2 repository, this maps to the filename within the repository, including both the Maven artifact ID, artifact version, classifier and type/extension. Note that the POM and the classic artifact will be stored with separate artifact IDs, but the repository implementation stores the common information for the whole project version (and perhaps all project versions in some instances).</p></div>
<div class="section">
<h3><a name="Metadata_Repository"></a>Metadata Repository</h3>
<p>The metadata repository is the metadata representation of a given repository, containing information about the artifacts it contains, as well as other auxiliary information such as statistics, events, etc.</p></div>
<div class="section">
<h3><a name="Metadata_Content_Repository"></a>Metadata Content Repository</h3>
<p>The metadata content repository is how the information in a metadata repository is persisted. It is effectively the same in appearance to the metadata repository.</p></div>
<div class="section">
<h3><a name="Repository_Resolver"></a>Repository Resolver</h3>
<p>A resolver decides how to translate a request into a given set of metadata or an artifact retrieved from repository storage. The default resolver first queries metadata, falling back to the repository storage if available if necessary due to not being found or being out of date. It is possible that new resolvers can be introduced to also check proxied repositories or to group multiple repositories.</p></div>
<div class="section">
<h3><a name="Repository_Storage"></a>Repository Storage</h3>
<p>A physical storage medium for a type of repository. This may be a file system in Maven 2 format, a URL pointing to a repository in a certain format, a flat set of files, etc. It can be queried and modified to affect the canonical set of artifacts.</p></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>