<!DOCTYPE html>


<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 from src/site/apt/developers/building.apt
 | Rendered using Apache Maven Fluido Skin 1.11.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
    <meta name="date" content="2017-08-01" />
    <title>Archiva &#x2013; Building Archiva</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.11.0.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
    <script src="../js/apache-maven-fluido-1.11.0.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">

    <!-- Matomo -->
    <script>
        var _paq = window._paq = window._paq || [];
                _paq.push(['disableCookies']);
                    _paq.push(['trackPageView']);
                    _paq.push(['enableLinkTracking']);
        
        (function() {
            var u="https://analytics.apache.org";
            _paq.push(['setTrackerUrl', u+'/matomo.php']);
            _paq.push(['setSiteId', '10']);
            var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
            g.async=true; g.src=u+'/matomo.js'; s.parentNode.insertBefore(g,s);
        })();
    </script>
    <!-- End Matomo Code -->
  </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>
    <header id="topbar" class="navbar navbar-fixed-top ">
      <div class="navbar-inner">
            <div class="container">
              <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
              </a>
          <nav class="nav-collapse">
            <ul class="nav">
      <li class="dropdown">
        <a class="dropdown-toggle" data-toggle="dropdown">Introduction <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="../index.html" title="About">About</a></li>
            <li><a href="../download.html" title="Downloads">Downloads</a></li>
            <li><a href="../versions.html" title="Versions">Versions</a></li>
            <li><a href="../mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
            <li><a href="../security.html" title="Security">Security</a></li>
            <li class="dropdown-submenu">
<a href="../" title="Documentation">Documentation</a>
              <ul class="dropdown-menu">
                  <li><a href="../docs/2.2.8/" title="Release 2.2.8">Release 2.2.8</a></li>
                  <li><a href="../docs/3.0.0-SNAPSHOT/" title="Dev 3.0.0-SNAPSHOT">Dev 3.0.0-SNAPSHOT</a></li>
              </ul>
            </li>
        </ul>
      </li>
      <li class="dropdown">
        <a class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a title="Build Apache Archiva">Build Apache Archiva</a></li>
            <li><a href="../get-involved.html" title="Get involved">Get involved</a></li>
            <li><a href="../developers/how-we-do-things.html" title="How we do things">How we do things</a></li>
            <li class="dropdown-submenu">
<a href="../" title="Developer Reference">Developer Reference</a>
              <ul class="dropdown-menu">
                  <li><a href="../ref/2.2.8/index.html" title="Archiva 2.2.8">Archiva 2.2.8</a></li>
                  <li><a href="../ref/3.0.0-SNAPSHOT/index.html" title="Archiva 3.0.0-SNAPSHOT">Archiva 3.0.0-SNAPSHOT</a></li>
                  <li><a href="../redback/core/3.0.0-SNAPSHOT/index.html" title="Redback 3.0.0-SNAPSHOT">Redback 3.0.0-SNAPSHOT</a></li>
              </ul>
            </li>
            <li><a href="../redback/index.html" title="Redback">Redback</a></li>
            <li><a href="../components/index.html" title="Archiva Components Project">Archiva Components Project</a></li>
            <li class="dropdown-submenu">
<a href="../jsui/index.html" title="Javascript application Architecture">Javascript application Architecture</a>
              <ul class="dropdown-menu">
                  <li><a href="../jsui/rest.html" title="Rest service">Rest service</a></li>
                  <li><a href="../jsui/template-loading.html" title="JS Template loading">JS Template loading</a></li>
                  <li><a href="../jsui/i18n.html" title="i18n">i18n</a></li>
                  <li><a href="../jsui/knockout-binding.html" title="Knockout Binding">Knockout Binding</a></li>
                  <li><a href="../jsui/generics-js.html" title="Generic Javascipts">Generic Javascipts</a></li>
              </ul>
            </li>
            <li><a href="../developers/releasing.html" title="Releasing">Releasing</a></li>
            <li><a href="../developers/publishing-site.html" title="Site Publish">Site Publish</a></li>
        </ul>
      </li>
      <li class="dropdown">
        <a class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="https://www.apache.org/foundation/how-it-works.html" title="How Apache Works">How Apache Works</a></li>
            <li><a href="https://www.apache.org/foundation/" title="Foundation">Foundation</a></li>
            <li><a href="https://www.apache.org/foundation/sponsorship.html" title="Sponsoring Apache">Sponsoring Apache</a></li>
            <li><a href="https://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
        </ul>
      </li>
      <li class="dropdown">
        <a 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="../ci-management.html" title="CI Management">CI Management</a></li>
                  <li><a href="../mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
                  <li><a href="../issue-management.html" title="Issue Management">Issue Management</a></li>
                  <li><a href="../licenses.html" title="Licenses">Licenses</a></li>
                  <li><a href="../team.html" title="Team">Team</a></li>
                  <li><a href="../scm.html" title="Source Code Management">Source Code Management</a></li>
              </ul>
            </li>
        </ul>
      </li>
            </ul>
          </nav>
          <div class="nav-collapse">
<form id="search-form" action="https://www.google.com/search" method="get"  class="navbar-search pull-right" >
  <input value="https://archiva.apache.org/" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script>asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
          </div>
        </div>
      </div>
    </header>
    <div class="container">
      <header>
        <div id="banner">
          <div class="pull-left"><a href="../index.html" id="bannerLeft"><img src="../images/archiva.png"  alt="Apache Archiva" style="" /></a></div>
          <div class="pull-right"><a href="https://www.apache.org/" id="bannerRight"><img src="https://www.apache.org/images/asf_logo_wide_2016.png"  alt="Apache Software Foundation" style="" /></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="../" title="Archiva">Archiva</a><span class="divider">/</span></li>
    <li class="active ">Building Archiva</li>
        <li id="publishDate" class="pull-right">Last Published: 25 May 2022</li>
          </ul>
        </div>
      </header>
        <main id="bodyColumn" >
<section>
<h2><a name="Building_Archiva"></a>Building Archiva</h2>
<p>To build the very latest code available... </p>
<ol style="list-style-type: decimal">
<li>Check out the source code as described on the <a href="../source-repository.html">Source Repository</a> page.</li>
<li>You may setup a suitable ~/.m2/settings.xml to add the needed repositories.</li>
<li>In the 'parent' directory, execute <code>mvn clean install</code> to build the parent pom. (only needed if we depend on a new parent)</li>
<li>In the 'archiva' directory, execute <code>mvn clean install</code> to build the Archiva modules and distribution.</li></ol>
<p>After the build completes, you can find the Archiva distribution in <code>archiva-jetty/target</code> and the Archiva webapp in <code>archiva-modules/archiva-web/archiva-webapp/target</code></p>
<p>Usually, it's that simple. :) Occasionally, Archiva may depend on a snapshot of another project such as <a class="externalLink" href="http://archiva.apache.org/redback">Redback</a>, and you may need to build that first, or configure a snapshot repository. If you're having trouble building Archiva, ask on the <a href="../mailing-lists.html">Development mailing list</a> and we'll point you in the right direction.</p></section><section>
<h2><a name="Merging_Github_Pull_requests"></a>Merging Github Pull requests</h2>
<p>When somebody creates a pull request for archiva on github an email is sent to the developer list.</p>
<p>First review the changes and check for style and impact of the changes. And check the build on the jenkins server for this pull request (archiva-master-build-pr-builder).</p>
<p>We have moved to gitbox, so merging the PR should be done on the github web site by using the PR merge features.</p></section><section>
<h2><a name="Documentation"></a>Documentation</h2>
<p>The version-specific documentation for the latest version of Archiva can be found in <code>archiva/archiva-docs</code>, and the top-level Archiva website --including the page you're reading now -- is in the <code>site</code> directory.</p>
<p>To work on the documentation, execute <code>mvn site:run</code> in one of these directories, and then visit <a class="externalLink" href="http://localhost:8080">http://localhost:8080</a> to view pages as you edit them. When you're done, submit a patch in the <a href="../issue-management.html">issue tracker</a>.</p></section><section>
<h2><a name="git_clone"></a>git clone</h2>
<div class="source"><pre class="prettyprint">git clone git://github.com/apache/archiva.git
or trough https
git clone https://github.com/apache/archiva.git</pre></div></section><section>
<h2><a name="Running_Javascript_webapp_with_jetty-maven-plugin"></a>Running Javascript webapp with jetty-maven-plugin</h2>
<p>You can use <a class="externalLink" href="https://www.eclipse.org/jetty/documentation/current/maven-and-jetty.html">jetty-maven-plugin</a> to run the webapp without installing the war in a container. With maven3 in the top directory :</p>
<div class="source"><pre class="prettyprint">mvn jetty:run -pl :archiva-webapp -am # use mvnDebug if you want to attach a debugger
or
sh ./jetty.sh # use sh ./jetty-debug.sh if you want to attach a debugger</pre></div>
<p>Hit your browser: <a class="externalLink" href="http://localhost:9091/archiva/index.html">http://localhost:9091/archiva/index.html</a></p></section><section>
<h2><a name="Running_the_selenium_tests_.28Web_UI_tests.29_locally"></a>Running the selenium tests (Web UI tests) locally</h2>
<p>The selenium tests use docker containers for the selenium and browser installation. To run the tests locally you should have docker installed on your developer machine. The docker container can be built locally or pulled from the apachearchiva Dockerhub repository. To start the docker container, run the following script:</p>
<div class="source"><pre class="prettyprint">  ./src/ci/scripts/container_webtest.sh start</pre></div>
<p>The UI tests can be run with:</p>
<div class="source"><pre class="prettyprint">mvn clean install -DmaxWaitTimeInMs=2000 -DseleniumRemote=true -Pci-server -Pit-js -Pchrome -pl :archiva-webapp-test</pre></div></section><section>
<h2><a name="Maven_settings.xml"></a>Maven settings.xml</h2>
<p>You should setup the following repositories in your settings.xml to be able to resolve the dependencies. Sometimes we need to have certain snapshot versions for plugins, so the apache snapshot repository is added.</p>
<div class="source"><pre class="prettyprint">  &lt;profiles&gt;
      &lt;profile&gt;
          &lt;activation&gt;
              &lt;activeByDefault&gt;true&lt;/activeByDefault&gt;
          &lt;/activation&gt;
          &lt;repositories&gt;
              &lt;repository&gt;
                  &lt;id&gt;central&lt;/id&gt;
                  &lt;releases&gt;
                      &lt;enabled&gt;true&lt;/enabled&gt;
                  &lt;/releases&gt;
                  &lt;snapshots&gt;
                      &lt;enabled&gt;false&lt;/enabled&gt;
                  &lt;/snapshots&gt;
                  &lt;url&gt;https://repo1.maven.org/maven2&lt;/url&gt;
              &lt;/repository&gt;
          &lt;/repositories&gt;
          &lt;pluginRepositories&gt;
              &lt;pluginRepository&gt;
                  &lt;id&gt;central&lt;/id&gt;
                  &lt;releases&gt;
                      &lt;enabled&gt;true&lt;/enabled&gt;
                  &lt;/releases&gt;
                  &lt;snapshots&gt;
                      &lt;enabled&gt;true&lt;/enabled&gt;
                  &lt;/snapshots&gt;
                  &lt;url&gt;https://repo1.maven.org/maven2&lt;/url&gt;
              &lt;/pluginRepository&gt;
              &lt;pluginRepository&gt;
                  &lt;id&gt;apache-snapshot&lt;/id&gt;
                  &lt;releases&gt;
                      &lt;enabled&gt;false&lt;/enabled&gt;
                  &lt;/releases&gt;
                  &lt;snapshots&gt;
                      &lt;enabled&gt;true&lt;/enabled&gt;
                  &lt;/snapshots&gt;
                  &lt;url&gt;https://repository.apache.org/content/groups/snapshots&lt;/url&gt;
              &lt;/pluginRepository&gt;

          &lt;/pluginRepositories&gt;
       &lt;/profile&gt;
  &lt;/profiles&gt;</pre></div></section>
        </main>
    </div>
    <hr/>
    <footer>
      <div class="container">
        <div class="row">
<div class="row pull-left">Apache Archiva, Archiva, Apache, the Apache feather logo, and the Apache Archiva project logos are trademarks of The Apache Software Foundation.</div>
      <div class="row">
        &nbsp;
      </div>
      <div class="row">
      <p>
        <a href="https://archiva.apache.org/privacy-policy.html">Privacy Policy</a>
        </p>
      </div>
        </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>
    </footer>
<script>
	if(anchors) {
	  anchors.add();
	}
</script>
  </body>
</html>