<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.    
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at Aug 20, 2014 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache James Server 3.0 - 
  Apache James Server 3 - Build Apache James from Source</title>
    <style type="text/css" media="all">
      @import url("./css/james.css");
      @import url("./css/maven-base.css");
      @import url("./css/maven-theme.css");
      @import url("./css/site.css");
      @import url("./js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
      @import url("./js/jquery/css/print.css");
      @import url("./js/fancybox/jquery.fancybox-1.3.4.css");
    </style>
    <script type="text/javascript" src="./js/jquery/js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="./js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
    <script type="text/javascript" src="./js/fancybox/jquery.fancybox-1.3.4.js"></script>
    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
    <meta name="Date-Revision-yyyymmdd" content="20140820" />
    <meta http-equiv="Content-Language" content="en" />
                                                    
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/>
                      
          <!-- Google Analytics -->
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1384591-1']);
      _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').item(0); s.parentNode.insertBefore(ga, s);
      })();

    </script>
    </head>
  <body class="composite">
    <div id="banner">
                                      <a href="../index.html" id="bannerLeft" title="james-server-logo.gif">
              
                                                                            
        <img src="images/logos/james-server-logo.gif" alt="Apache James Server 3.0" />
                </a>
                              <a href="http://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf-logo-reduced.gif" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2014-08-20</span>
                      </div>
            <div class="xright">                    <a href="../../index.html" title="Home">Home</a>
            |
                        <a href="../index.html" title="Server">Server</a>
            |
                        <a href="../../hupa/index.html" title="Hupa">Hupa</a>
            |
                        <a href="../../protocols/index.html" title="Protocols">Protocols</a>
            |
                        <a href="../../mailet/index.html" title="Mailets">Mailets</a>
            |
                        <a href="../../mailbox/index.html" title="Mailbox">Mailbox</a>
            |
                        <a href="../../mime4j/index.html" title="Mime4J">Mime4J</a>
            |
                        <a href="../../jsieve/index.html" title="jSieve">jSieve</a>
            |
                        <a href="../../jspf/index.html" title="jSPF">jSPF</a>
            |
                        <a href="../../jdkim/index.html" title="jDKIM">jDKIM</a>
            |
                        <a href="../../mpt/index.html" title="MPT">MPT</a>
            |
                        <a href="../../postage/index.html" title="Postage">Postage</a>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>Overview</h5>
                  <ul>
                  <li class="none">
                          <a href="index.html" title="Introduction">Introduction</a>
            </li>
                  <li class="none">
                          <a href="release-notes.html" title="Release Notes">Release Notes</a>
            </li>
          </ul>
                       <h5>Features</h5>
                  <ul>
                  <li class="none">
                          <a href="feature-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
            </li>
                  <li class="none">
                          <a href="feature-queue-priority.html" title="Queue Priority">Queue Priority</a>
            </li>
                  <li class="none">
                          <a href="feature-persistence.html" title="Persistence">Persistence</a>
            </li>
                  <li class="none">
                          <a href="feature-protocols.html" title="Protocols">Protocols</a>
            </li>
                  <li class="none">
                          <a href="feature-smtp-hooks.html" title="SMTP Hooks">SMTP Hooks</a>
            </li>
                  <li class="none">
                          <a href="feature-performance.html" title="Performance">Performance</a>
            </li>
                  <li class="none">
                          <a href="feature-security.html" title="Security">Security</a>
            </li>
          </ul>
                       <h5>User Manual</h5>
                  <ul>
                  <li class="none">
                          <a href="quick-start.html" title="1. Quick Start">1. Quick Start</a>
            </li>
                  <li class="none">
                          <a href="install.html" title="2. Install James">2. Install James</a>
            </li>
                                                                                                                                                                                                                                                                                                                                <li class="collapsed">
                          <a href="config.html" title="3. Configure James">3. Configure James</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="manage.html" title="4. Manage">4. Manage</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="monitor.html" title="5. Monitor">5. Monitor</a>
                  </li>
                                                                                      <li class="collapsed">
                          <a href="upgrade.html" title="6. Upgrade">6. Upgrade</a>
                  </li>
          </ul>
                       <h5>Developers Corner</h5>
                  <ul>
                  <li class="none">
                          <a href="dev.html" title="Architecture">Architecture</a>
            </li>
                  <li class="none">
            <strong>Build from source</strong>
          </li>
                  <li class="none">
                          <a href="dev-database-schema.html" title="Database Schema">Database Schema</a>
            </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-extend.html" title="Develop Extensions">Develop Extensions</a>
                  </li>
                                                                                                        <li class="collapsed">
                          <a href="dev-provided.html" title="Provided Extensions">Provided Extensions</a>
                  </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/apache-james/" title="Nightly builds">Nightly builds</a>
            </li>
          </ul>
                       <h5>References</h5>
                  <ul>
                  <li class="none">
                          <a href="apidocs/index.html" title="Javadoc">Javadoc</a>
            </li>
                  <li class="none">
                          <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
          </ul>
                       <h5>About James</h5>
                  <ul>
                  <li class="none">
                          <a href="../../index.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="../../newsarchive.html" title="News">News</a>
            </li>
                  <li class="none">
                          <a href="../../mail.html" title="Mailing Lists">Mailing Lists</a>
            </li>
                  <li class="none">
                          <a href="../../contribute.html" title="Contributing">Contributing</a>
            </li>
                  <li class="none">
                          <a href="../../guidelines.html" title="Guidelines">Guidelines</a>
            </li>
                  <li class="none">
                          <a href="http://wiki.apache.org/james" title="Wiki">Wiki</a>
            </li>
                  <li class="none">
                          <a href="../../team-list.html" title="Who We Are">Who We Are</a>
            </li>
                  <li class="none">
                          <a href="../../license.html" title="License">License</a>
            </li>
          </ul>
                       <h5>Download</h5>
                  <ul>
                  <li class="none">
                          <a href="../../download.cgi" title="Releases">Releases</a>
            </li>
                  <li class="none">
                          <a href="https://repository.apache.org/content/repositories/snapshots/org/apache/james/" title=""></a>
            </li>
          </ul>
        <h5>Apache Software Foundation</h5>
  <ul>
    <li>
      <strong>
        <a title="ASF" href="http://www.apache.org/">ASF</a>
      </strong>
    </li>
    <li>
      <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
    </li>
    <li>
      <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a>
    </li>
    <li>
      <a title="License" href="http://www.apache.org/licenses/" >License</a>
    </li>
    <li>
      <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
    </li>
    <li>
      <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
    </li>
    <li>
      <a title="Security" href="http://www.apache.org/security/">Security</a>
    </li>
  </ul>
                       <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
      </a>
                   
                
            </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        <!-- 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>Why Build from Source?<a name="Why_Build_from_Source"></a></h2>

    <p>This step is not necessary to use the standard out of the box version of James.  A
       pre-built binary version of James is available from the James download directory.</p>

     <p>But if you wish to customize the James source code, it will be necessary for you to
        build the distribution yourself.</p>

     <p>You can read on this page how to build from the command line and from eclipse IDE.</p>

  </div>

  <div class="section"><h2>Get Source Code<a name="Get_Source_Code"></a></h2>

    <p>There are two ways to get the James source code.</p>

    <ol style="list-style-type: decimal">
      <li>Download the source distribution - the source is available from the
          <a class="externalLink" href="http://james.apache.org/download.cgi">James release mirrors</a>.
          Simply choose the version of James you'd like to download, and pick the source
          distribution appropriate for your platform.</li>
      <li>Get the source code using SVN - this method gives you access to the cutting edge code
          base.  Instructions on how to use SVN to get the James source code
          can be found <a class="externalLink" href="http://www.apache.org/dev/version-control.html">here</a>.
          Apache James Server beta4 repository is <a class="externalLink" href="http://svn.apache.org/repos/asf/james/server/tags/james-server-3.0-beta4/">http://svn.apache.org/repos/asf/james/server/tags/james-server-3.0-beta4/</a>.</li>
      <li>For information, you can download all Apache James sources (server, mailbox, imap, mailet...) if you check out <a class="externalLink" href="http://svn.apache.org/repos/asf/james/current">http://svn.apache.org/repos/asf/james/current/</a>.
         Watch out!: you will get a release, but what we call a &quot;trunk&quot;, that is on constant development and debugging.</li>
    </ol>

    <p>We consider in this document that you have checked-out James source code in JAMES_SRC_HOME directory.</p>

    <p>Consult the <a href="dev.html">architecture</a> page if you want to learn
    more on the internal source structure.</p>

  </div>

  <div class="section"><h2>Required Tools<a name="Required_Tools"></a></h2>

    <p>To run the build you need two third-party tools.</p>
    <ol style="list-style-type: decimal">
      <li>Java Development Kit - You must have a JDK of Java version 1.6 or higher installed to build the
          James distribution.  The exact JDKs available depend on the platform.  A JDK must be downloaded and
          installed before the build can run.</li>
      <li>Maven 3.0.2 - This is a Java-tailored, XML-configured, extensible build or make system. You need maven (3.0.2+) in order
          to build James. You can get maven 3.0.2 from <a class="externalLink" href="http://maven.apache.org/download.html">here</a>.
          Installation instructions for maven are also available on the same page <a class="externalLink" href="http://maven.apache.org/download.html">http://maven.apache.org/download.html</a>.</li>
    </ol>
    <p>Set (on windows) or export (on Unix) MAVEN_OPTS to tune the memory needed by maven with &quot;MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=128m&quot;</p>

  </div>

  <div class="section"><h2>Build James Source from Command Line<a name="Build_James_Source_from_Command_Line"></a></h2>

    <p>In the JAMES_SRC_HOME top level directory (where the parent pom.xml resides), invoke maven with 'mvn' with any of the following command line arguments:
    </p><ul>
      <li>clean - deletes the target directory, making the system ready for a clean build.</li>
      <li>compile - compiles the source code.</li>
      <li>test - run unit tests for James.</li>
      <li><b>package - generates all the James distributions, packed.
      From the root directory, cd to 'container-spring/target' to have the build distribution.
      Notice, for the latest trunk(revision 1430655+), a specific profile argument need to be set: '-Pwith-assembly'.
      The location of final distributions is also changed to 'JAMES_SRC_HOME/server/app/target'.</b></li>
      <li>javadocs:javadocs - builds the James javadocs.</li>
      <li>site - builds the entirety of the James website.</li>
    </ul>
    
    <p>For example, invoke <tt>mvn package</tt> to get a zip/tar of James distribution.</p>
    <p>All built products are output in the <tt>container-spring/target</tt>
      subdirectory of the James source directory.
      This directory will be deleted if you run build with the clean argument.</p>
    <p><b>Warning!</b> Any changes you've made in the 'dist' directory
      will be lost after a recompilation. If you are running James for this directory
      we recommend you backup to avoid losing work. </p>
    <p>You can also invoke the command line from a shell. Go to the server project cli folder and type mvn exec:java -Dexec.args=&quot;-h localhost -p 9999 help&quot;</p>

  </div>

  <div class="section"><h2>Build James Source from Eclipse<a name="Build_James_Source_from_Eclipse"></a></h2>

    <div class="section"><h3>Import projects in Eclipse with m2eclipse<a name="Import_projects_in_Eclipse_with_m2eclipse"></a></h3>

      <p>You should have Eclipse IDE with <a class="externalLink" href="http://m2eclipse.sonatype.org">m2eclipse</a> plugin installed.</p>
      <p>You now need to import the maven projects in the Eclipse workspace.</p>
      <p>Therefore, click on the <tt>File</tt> menu and select <tt>Import</tt>.
      Choose <tt>Existing Maven Project</tt> and click on <tt>Next</tt> button.</p>
      <img src="./images/eclipse/eclipse-import-maven-view-1.gif" alt="" />

    </div>

    <div class="section"><h3>Select Projects to Import<a name="Select_Projects_to_Import"></a></h3>

      <p>Select the JAMES_SRC_HOME directory where you have checked out the source code.</p>
      <p>Eclipse should present you with the list of James server modules.</p>
      <p>Select the modules you want to import (by default, all) and click on <tt>Finish</tt>
        to execute the import.</p>

      <img src="./images/eclipse/eclipse-import-maven-view-2.gif" alt="" />

      <p>You can also import other projects from
         <a class="externalLink" href="http://james.apache.org/imap/source-code.html">imap</a>,
         <a class="externalLink" href="http://james.apache.org/mailbox/source-code.html">mailbox</a>
         and <a class="externalLink" href="http://james.apache.org/protocols/source-code.html">protocols</a> to have a
         more complete view on the used sources code.</p>

    </div>

    <div class="section"><h3>Enable Workspace Resolution<a name="Enable_Workspace_Resolution"></a></h3>

      <p>Check that 'Workspace resolution' is enable in m2eclipse plugin.</p>
      <p>Your changes in code will be directly taken into account.</p>
      <img src="./images/eclipse/eclipse-m2eclipse-project-dependencies.gif" alt="" />

    </div>

    <div class="section"><h3>Prepare projects<a name="Prepare_projects"></a></h3>

      <p>Now you have James projects in Eclipse workspace.</p>
      <p>You still have to prepare the following to be able to run from Eclipse:</p>
      <ol style="list-style-type: decimal">
        <li>Copy the <tt>context</tt> folder, <tt>log4j.properties</tt>
            and <tt>META-INF</tt> folder from <tt>container-spring\src\main\config\james</tt>
             directory to a source folder of <tt>container-spring</tt> project (you can use for example a
             new folder called <tt>stage</tt> as Eclipse source folder).</li>
        <li>Copy all files (except context folder log4j.properties and META-INF/persistence.xml)
            from <tt>container-spring\src\main\config\james</tt> folder to a <tt>conf</tt> folder
            (<tt>conf</tt> folder must be a sub-folder of the JAMES_SRC_HOME directory where you made the check-out).
            As non-root privilege user, you may need to change the SMTP/IMAP/POP3 ports to values higher than 1024.</li>
         <li>For ease, you can also create 2 new eclipse projects to edit the files and visualize the created mails/store/...:
             james-server-container-spring-conf and james-server-container-spring-var.</li>
     </ol>
     <img src="./images/eclipse/eclipse-m2eclipse-projects.gif" alt="" />

    </div>

    <div class="section"><h3>Run James from Eclipse<a name="Run_James_from_Eclipse"></a></h3>

      <p>That's it. Run or Debug James in Eclipse (right-click on the Main class) and Have Fun!.</p>
      <img src="./images/eclipse/eclipse-run-james.gif" alt="" />

      <p>If you change a JPA Entity class, your will need to run 'mvn package'
          or add the following option to the VM argument of your run configuration
          '-javaagent:my_home_folder/.m2/repository/org/apache/openjpa/openjpa/2.0.1/openjpa-2.0.1.jar'
      </p>

    </div>

  </div>

  <div class="section"><h2>Build James from NetBeans<a name="Build_James_from_NetBeans"></a></h2>

      <p>This was done using NetBeans 7, which comes bundeled with Maven 3, needed to build James 3.
      Older versions of NetBeans should be able to build James fine, provided that you configure them to use an instance of Maven 3, if they do not have it.
      I used james 3.0-beta1 release and it builded in 7:40 min on my notebook running Debian Squeeze.
      </p>

      <div class="section"><h3>Getting the sources from the repository<a name="Getting_the_sources_from_the_repository"></a></h3>
          <p>Building James with NetBeans is very easy as it comes with Subersion and Maven support already build in.
          Maven is bundeled with the IDE, but Subverion is not, so you will have to install Subversion yourself and NetBeans will be able to use it.
          You can get more details on how to install and where to get Subversion from the NetBeans Help menu by clicking on <b>Help Contents</b> and from there go to the <b>IDE Basics-&gt;Version Control and File Hierarchy-&gt;Subversion</b> topic.
          </p>
          <p>For Linux users, Subversion is probably packaged by your distribution so use your distribution tools to install it (aptitude, yum, etc.)</p>
          <p>Once you have Subversion, go to <b>Team-&gt;Subversion-&gt;Checkout</b> menu entry. <br />
          You will see an dialog window used to enter the information about the Subversion repository you are going to use. It looks like this:</p>
          <img src="./images/netbeans/netbeans-svn-checkout1.png" alt="" />
          <p>In the <tt>Repository URL</tt> field enter the location for James repository and click <tt>Next</tt>.
          You can use the following URL to get the trunk or development version:
          <a class="externalLink" href="http://svn.apache.org/repos/asf/james/server/trunk">http://svn.apache.org/repos/asf/james/server/trunk</a>.<br />
          After this you will be presented with another dialog window where you can configure which folders to check out and where to save them on your machine.</p>
          <img src="./images/netbeans/netbeans-svn-checkout2.png" alt="" />
          <p>If you supplied the above URL you can click <tt>Finish</tt> to get trunk version and start hacking.
          You can choose another folder by clicking <tt>Browse</tt>. A new dialog window will open and from there you can browse
          the whole subversion repository. I wanted to build James 3.0beta so I choosed <tt>james-serve-3.0-beta1</tt> under james/server/tags/ folder. <br /></p>
          <img src="./images/netbeans/netbeans-svn-checkout-browse.png" alt="" />

          <p>After you click <tt>Finish</tt> NetBeans will checkout the sources. It will detect the Maven project and ask you if you wish to open the project.
          If you open the project you will see in the Projects Window (<tt>CTRL+1</tt> if not visible) something similar to the next image:<br /></p>
          <img src="./images/netbeans/netbeans-james-project.png" alt="" />

      </div>

      <div class="section"><h3>Building the project <a name="Building_the_project"></a></h3>
        <p> Building the project does not require too much work. Just go to <tt>Run-&gt;Build Project</tt> menu option.
        Make sure that James is the main project (if you have other projects open) or NetBeans will build that project instead of James.
        Once the build is finished you will find the binary distribution in <tt>container-spring/target</tt> directory. <br /></p>
        <img src="./images/netbeans/james-build-dir.png" alt="" />
      </div>

  </div>

  <div class="section"><h2>Build James from IntelliJ IDEA<a name="Build_James_from_IntelliJ_IDEA"></a></h2>

      <p>This section has been created using IntelliJ IDEA 12 and Maven 3. And downloading the trunk version of the server
          from <tt>http://svn.apache.org/repos/asf/james/server/trunk/</tt>.
      </p>

      <div class="section"><h3>Getting the sources from the repository<a name="Getting_the_sources_from_the_repository"></a></h3>
          <p>To download the source code, you can use the Subversion support that comes with IntelliJ IDEA following the next steps:</p>

          <p>First, in the Welcome page, click on <b>Check out from Version Control</b> and select <b>Subversion</b>.</p>
          <img src="./images/intellij-idea/intellij-new-project.png" alt="" />
          <p>In the pop-up window, press the <b>+</b> button to add the James code repository in the next pop-up.</p>
          <img src="./images/intellij-idea/intellij-svn-repo.png" alt="" />            <br />
          <img src="./images/intellij-idea/intellij-svn-repo-add-repo.png" alt="" />        <br />
          <p>Then, choose the location for the project.</p>
          <img src="./images/intellij-idea/intellij-svn-repo-checkout-choose-folder.png" alt="" />

          <p>When this process is done, the project should look like this. <br /></p>
          <img src="./images/intellij-idea/intellij-james-project.png" alt="" />

      </div>

    <div class="section"><h3>Building the project<a name="Building_the_project"></a></h3>
        <p> To build the project, you must open the <b>Maven Projects</b> panel. Then double click on the install goal to run this goal.<br /></p>
        <img src="./images/intellij-idea/intellij-mvn.png" alt="" />
        <p>Then you will find the James server zip in the <b>app/target</b> folder.<br /></p>
        <img src="./images/intellij-idea/intellij-james-zip.png" alt="" />
    </div>
  </div>


    <div class="section"><h2>Build James Source from other IDEs<a name="Build_James_Source_from_other_IDEs"></a></h2>

    <p>We will be happy to include on this page any other tutorial you could send
       use about developing James with your favorite Integrated Development Environment.</p>

  </div>




      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2002-2014
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
