<!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="20220525" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Archiva :: Web &#x2013; Project Dependencies</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">Modules <b class="caret"></b></a>
        <ul class="dropdown-menu">
        
                      <li>      <a href="archiva-security/index.html"  title="Archiva Web :: Security Configuration">Archiva Web :: Security Configuration</a>
</li>
                  
                      <li>      <a href="archiva-webdav/index.html"  title="Archiva Web :: WebDAV">Archiva Web :: WebDAV</a>
</li>
                  
                      <li>      <a href="archiva-rss/index.html"  title="Archiva Web :: RSS">Archiva Web :: RSS</a>
</li>
                  
                      <li>      <a href="archiva-test-mocks/index.html"  title="Archiva Web :: Tests Mocks">Archiva Web :: Tests Mocks</a>
</li>
                  
                      <li>      <a href="archiva-rest/index.html"  title="Archiva Web :: REST support">Archiva Web :: REST support</a>
</li>
                  
                      <li>      <a href="archiva-web-common/index.html"  title="Archiva Web :: Web Common">Archiva Web :: Web Common</a>
</li>
                  
                      <li>      <a href="archiva-webapp/index.html"  title="Archiva Web :: Javascript Application">Archiva Web :: Javascript Application</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.8" 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="">
                    <a href="./" title="Archiva :: Web">
        Archiva :: Web</a>
                    <span class="divider">/</span>
      </li>
        <li class="active ">Project Dependencies</li>
        
                
                    
                  <li id="publishDate" class="pull-right">Last Published: 25 May 2022</li>
            
                            </ul>
      </div>

      
                
        <div id="bodyColumn" >
                                  
            <a name="Project_Dependencies"></a>
<div class="section">
<h2><a name="Project_Dependencies"></a>Project Dependencies</h2><a name="Project_Dependencies_test"></a>
<div class="section">
<h3><a name="test"></a>test</h3>
<p>The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:</p>
<table border="0" class="table table-striped">
<tr class="a">
<th>GroupId</th>
<th>ArtifactId</th>
<th>Version</th>
<th>Type</th>
<th>License</th></tr>
<tr class="b">
<td>junit</td>
<td><a class="externalLink" href="http://junit.org">junit</a></td>
<td>4.12</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License 1.0</a></td></tr>
<tr class="a">
<td>org.easymock</td>
<td><a class="externalLink" href="http://www.easymock.org/easymock">easymock</a></td>
<td>3.2</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2</a></td></tr>
<tr class="b">
<td>org.easymock</td>
<td><a class="externalLink" href="http://www.easymock.org/easymockclassextension">easymockclassextension</a></td>
<td>3.2</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2</a></td></tr></table></div></div><a name="Project_Transitive_Dependencies"></a>
<div class="section">
<h2><a name="Project_Transitive_Dependencies"></a>Project Transitive Dependencies</h2>
<p>The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.</p><a name="Project_Transitive_Dependencies_test"></a>
<div class="section">
<h3><a name="test"></a>test</h3>
<p>The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:</p>
<table border="0" class="table table-striped">
<tr class="a">
<th>GroupId</th>
<th>ArtifactId</th>
<th>Version</th>
<th>Type</th>
<th>License</th></tr>
<tr class="b">
<td>cglib</td>
<td><a class="externalLink" href="http://cglib.sourceforge.net/">cglib-nodep</a></td>
<td>2.2.2</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">ASF 2.0</a></td></tr>
<tr class="a">
<td>org.hamcrest</td>
<td><a class="externalLink" href="https://github.com/hamcrest/JavaHamcrest/hamcrest-core">hamcrest-core</a></td>
<td>1.3</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a></td></tr>
<tr class="b">
<td>org.objenesis</td>
<td><a class="externalLink" href="http://objenesis.org">objenesis</a></td>
<td>1.3</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2</a></td></tr></table></div></div><a name="Project_Dependency_Graph"></a>
<div class="section">
<h2><a name="Project_Dependency_Graph"></a>Project Dependency Graph</h2><script language="javascript" type="text/javascript">
      function toggleDependencyDetail( divId, imgId )
      {
        var div = document.getElementById( divId );
        var img = document.getElementById( imgId );
        if( div.style.display == '' )
        {
          div.style.display = 'none';
          img.src='./images/icon_info_sml.gif';
        }
        else
        {
          div.style.display = '';
          img.src='./images/close.gif';
        }
      }
</script>
<a name="Dependency_Tree"></a>
<div class="section">
<h3><a name="Dependency_Tree"></a>Dependency Tree</h3>
<ul>
<li>org.apache.archiva:archiva-web:pom:2.2.8 <img id="_img1" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep0', '_img1' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep0" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>Archiva :: Web</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>Archiva is an application for managing one or more remote
      repositories, including administration, artifact handling,
      browsing and searching.</p>
<p><b>URL: </b><a class="externalLink" href="http://archiva.apache.org/ref/2.2.8/archiva-web">http://archiva.apache.org/ref/2.2.8/archiva-web</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></p></td></tr></table></div>
<ul>
<li>junit:junit:jar:4.12 (test) <img id="_img3" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep2', '_img3' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep2" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>JUnit</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.</p>
<p><b>URL: </b><a class="externalLink" href="http://junit.org">http://junit.org</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License 1.0</a></p></td></tr></table></div>
<ul>
<li>org.hamcrest:hamcrest-core:jar:1.3 (test) <img id="_img5" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep4', '_img5' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep4" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>Hamcrest Core</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>This is the core API of hamcrest matcher framework to be used by third-party framework providers. This includes the a foundation set of matcher implementations for common operations.</p>
<p><b>URL: </b><a class="externalLink" href="https://github.com/hamcrest/JavaHamcrest/hamcrest-core">https://github.com/hamcrest/JavaHamcrest/hamcrest-core</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a></p></td></tr></table></div></li></ul></li>
<li>org.easymock:easymock:jar:3.2 (test) <img id="_img7" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep6', '_img7' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep6" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>EasyMock</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>EasyMock provides an easy way to create Mock Objects for interfaces and classes generating them on the fly</p>
<p><b>URL: </b><a class="externalLink" href="http://www.easymock.org/easymock">http://www.easymock.org/easymock</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2</a></p></td></tr></table></div>
<ul>
<li>cglib:cglib-nodep:jar:2.2.2 (test) <img id="_img9" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep8', '_img9' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep8" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>Code Generation Library</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>Code generation library with shaded ASM dependecies</p>
<p><b>URL: </b><a class="externalLink" href="http://cglib.sourceforge.net/">http://cglib.sourceforge.net/</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">ASF 2.0</a></p></td></tr></table></div></li>
<li>org.objenesis:objenesis:jar:1.3 (test) <img id="_img11" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep10', '_img11' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep10" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>Objenesis</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>A library for instantiating Java objects</p>
<p><b>URL: </b><a class="externalLink" href="http://objenesis.org">http://objenesis.org</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2</a></p></td></tr></table></div></li></ul></li>
<li>org.easymock:easymockclassextension:jar:3.2 (test) <img id="_img13" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep12', '_img13' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep12" style="display:none">
<table border="0" class="table table-striped">
<tr class="a">
<th>EasyMock Class extension</th></tr>
<tr class="b">
<td>
<p><b>Description: </b>The EasyMock Class Extension allows to generate Mock Objects for classes</p>
<p><b>URL: </b><a class="externalLink" href="http://www.easymock.org/easymockclassextension">http://www.easymock.org/easymockclassextension</a></p>
<p><b>Project License: </b><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2</a></p></td></tr></table></div></li></ul></li></ul></div></div><a name="Licenses"></a>
<div class="section">
<h2><a name="Licenses"></a>Licenses</h2>
<p><b>Apache 2: </b>EasyMock, EasyMock Class extension, Objenesis</p>
<p><b>Eclipse Public License 1.0: </b>JUnit</p>
<p><b>ASF 2.0: </b>Code Generation Library</p>
<p><b>New BSD License: </b>Hamcrest Core</p>
<p><b>The Apache Software License, Version 2.0: </b>Archiva :: Web</p></div><a name="Dependency_File_Details"></a>
<div class="section">
<h2><a name="Dependency_File_Details"></a>Dependency File Details</h2>
<table border="0" class="table table-striped">
<tr class="a">
<th>Filename</th>
<th>Size</th>
<th>Entries</th>
<th>Classes</th>
<th>Packages</th>
<th>Java Version</th>
<th title="Indicates whether these dependencies have been compiled with debug information.">Debug Information</th></tr>
<tr class="b">
<td>cglib-nodep-2.2.2.jar</td>
<td>326.92 kB</td>
<td>255</td>
<td>251</td>
<td>9</td>
<td>1.2</td>
<td>Yes</td></tr>
<tr class="a">
<td>junit-4.12.jar</td>
<td>314.93 kB</td>
<td>323</td>
<td>286</td>
<td>30</td>
<td>1.5</td>
<td>Yes</td></tr>
<tr class="b">
<td>easymock-3.2.jar</td>
<td>119.78 kB</td>
<td>99</td>
<td>90</td>
<td>3</td>
<td>1.5</td>
<td>Yes</td></tr>
<tr class="a">
<td>easymockclassextension-3.2.jar</td>
<td>10.41 kB</td>
<td>16</td>
<td>7</td>
<td>2</td>
<td>1.5</td>
<td>Yes</td></tr>
<tr class="b">
<td>hamcrest-core-1.3.jar</td>
<td>45.02 kB</td>
<td>52</td>
<td>45</td>
<td>3</td>
<td>1.5</td>
<td>Yes</td></tr>
<tr class="a">
<td>objenesis-1.3.jar</td>
<td>40.57 kB</td>
<td>50</td>
<td>35</td>
<td>9</td>
<td>1.3</td>
<td>Yes</td></tr>
<tr class="b">
<th>Total</th>
<th>Size</th>
<th>Entries</th>
<th>Classes</th>
<th>Packages</th>
<th>Java Version</th>
<th>Debug Information</th></tr>
<tr class="a">
<td>6</td>
<td>857.64 kB</td>
<td>795</td>
<td>714</td>
<td>56</td>
<td>1.5</td>
<td>6</td></tr>
<tr class="b">
<td>test: 6</td>
<td>test: 857.64 kB</td>
<td>test: 795</td>
<td>test: 714</td>
<td>test: 56</td>
<td>-</td>
<td>test: 6</td></tr></table></div><a name="Dependency_Repository_Locations"></a>
<div class="section">
<h2><a name="Dependency_Repository_Locations"></a>Dependency Repository Locations</h2>
<table border="0" class="table table-striped">
<tr class="a">
<th>Repo ID</th>
<th>URL</th>
<th>Release</th>
<th>Snapshot</th></tr>
<tr class="b">
<td>central</td>
<td><a class="externalLink" href="https://repo.maven.apache.org/maven2">https://repo.maven.apache.org/maven2</a></td>
<td>Yes</td>
<td>No</td></tr></table>
<p>Repository locations for each of the Dependencies.</p>
<table border="0" class="table table-striped">
<tr class="a">
<th>Artifact</th>
<th>local-repository</th></tr>
<tr class="b">
<td>cglib:cglib-nodep:jar:2.2.2</td>
<td><a class="externalLink" href="http://localhost:8081/repository/maven-public//cglib/cglib-nodep/2.2.2/cglib-nodep-2.2.2.jar"><img alt="Found at http://localhost:8081/repository/maven-public/" src="images/icon_success_sml.gif" /></a></td></tr>
<tr class="a">
<td>junit:junit:jar:4.12</td>
<td><a class="externalLink" href="http://localhost:8081/repository/maven-public//junit/junit/4.12/junit-4.12.jar"><img alt="Found at http://localhost:8081/repository/maven-public/" src="images/icon_success_sml.gif" /></a></td></tr>
<tr class="b">
<td>org.easymock:easymock:jar:3.2</td>
<td><a class="externalLink" href="http://localhost:8081/repository/maven-public//org/easymock/easymock/3.2/easymock-3.2.jar"><img alt="Found at http://localhost:8081/repository/maven-public/" src="images/icon_success_sml.gif" /></a></td></tr>
<tr class="a">
<td>org.easymock:easymockclassextension:jar:3.2</td>
<td><a class="externalLink" href="http://localhost:8081/repository/maven-public//org/easymock/easymockclassextension/3.2/easymockclassextension-3.2.jar"><img alt="Found at http://localhost:8081/repository/maven-public/" src="images/icon_success_sml.gif" /></a></td></tr>
<tr class="b">
<td>org.hamcrest:hamcrest-core:jar:1.3</td>
<td><a class="externalLink" href="http://localhost:8081/repository/maven-public//org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"><img alt="Found at http://localhost:8081/repository/maven-public/" src="images/icon_success_sml.gif" /></a></td></tr>
<tr class="a">
<td>org.objenesis:objenesis:jar:1.3</td>
<td><a class="externalLink" href="http://localhost:8081/repository/maven-public//org/objenesis/objenesis/1.3/objenesis-1.3.jar"><img alt="Found at http://localhost:8081/repository/maven-public/" src="images/icon_success_sml.gif" /></a></td></tr>
<tr class="b">
<th>Total</th>
<th>local-repository</th></tr>
<tr class="a">
<td>6 (test: 6)</td>
<td>6</td></tr></table></div>
                  </div>
          </div>

    <hr/>

    <footer>
            <div class="container">
                      <div class="row">
                              <p >Copyright &copy;                    2006&#x2013;2022
                        <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>
