<!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="Date-Revision-yyyymmdd" content="20230320" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Archiva :: Modules &#x2013; Terminology</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="topBarEnabled">
          
                        
                    
                

    <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="archiva-karaf/index.html"  title="Archiva :: Karaf">Archiva :: Karaf</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>
                          </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="integration.html"  title="Continuous Integration">Continuous Integration</a>
</li>
                                  <li>      <a href="dependencies.html"  title="Dependencies">Dependencies</a>
</li>
                                  <li>      <a href="dependency-info.html"  title="Dependency Information">Dependency Information</a>
</li>
                                  <li>      <a href="dependency-management.html"  title="Dependency Management">Dependency Management</a>
</li>
                                  <li>      <a href="distribution-management.html"  title="Distribution Management">Distribution Management</a>
</li>
                                  <li>      <a href="index.html"  title="About">About</a>
</li>
                                  <li>      <a href="issue-tracking.html"  title="Issue Tracking">Issue Tracking</a>
</li>
                                  <li>      <a href="license.html"  title="Project License">Project License</a>
</li>
                                  <li>      <a href="mail-lists.html"  title="Mailing Lists">Mailing Lists</a>
</li>
                                  <li>      <a href="modules.html"  title="Project Modules">Project Modules</a>
</li>
                                  <li>      <a href="plugin-management.html"  title="Plugin Management">Plugin Management</a>
</li>
                                  <li>      <a href="plugins.html"  title="Project Plugins">Project Plugins</a>
</li>
                                  <li>      <a href="team-list.html"  title="Project Team">Project Team</a>
</li>
                                  <li>      <a href="source-repository.html"  title="Source Repository">Source Repository</a>
</li>
                                  <li>      <a href="project-summary.html"  title="Project Summary">Project Summary</a>
</li>
                              </ul>
            </li>
                          </ul>
      </li>
                  </ul>
          
                      <form id="search-form" action="http://www.google.com/search" method="get"  class="navbar-search pull-right" >
    
  <input value="http://archiva.apache.org/ref/2.2.10" 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>
          
                                                    
        
        
        <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="../../index.html" 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="./" title="Archiva :: Modules">
        Archiva :: Modules</a>
                    <span class="divider">/</span>
      </li>
        <li class="active ">Terminology</li>
        
                
                    
                  <li id="publishDate" class="pull-right">Last Published: 20 Mar 2023</li>
            
                            </ul>
      </div>

      
                
        <div id="bodyColumn" >
                                  
            <!-- 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. --><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;2023
                        <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="http://www.ohloh.net/p/6670/widgets/project_basic_stats.js"></script>
    </div>
        </div>
    </footer>
        </body>
</html>
