<h1>Developing Apache Axis2</h1>

<h2>Working with Subversion</h2>

<p>The Axis2 development team uses Subversion for source control.  Subversion is a
compelling replacement for CVS developed under the auspices of the Tigris community
and is licensed under an Apache compatible license.  To learn more about Subversion
or to download the latest distribution, visit the 
<a href="http:///subversion.tigris.org">Subversion project site</a>.  If you are
looking for guidance on setting up and installing Subversion, please read the ASF
<a href="http://www.apache.org/dev/version-control.html">Source Code Repositories 
page</a>. 

<h2>Checkout Axis2 from Subversion</h2>

<p>
When checking out the latest version of Axis from the Foundation's Subversion
repository you must use one of the following URLs depending on your level of
access to the Axis2 source code:

<ul>
  <li><b>If you are not a committer:</b> Use <a href="http://svn.apache.org/repos/asf/webservices/axis2/trunk/java">http://svn.apache.org/repos/asf/webservices/axis2/trunk/java</a></li>
  <li><b>If you are a committer:</b> Use <a href="https://svn.apache.org/repos/asf/webservices/axis2/trunk/java">https://svn.apache.org/repos/asf/webservices/axis2/trunk/java</a></li>
</ul>

If you are a committer, make sure that you have selected an svnpasswd.  To do this
you must log into svn.apache.org.  For more information, please read the ASF
<a href="http://www.apache.org/dev/version-control.html">Source Code Repositories
page</a>.
</p>

<p>
Once you have successfully installed Subversion, you can check out Axis2 trunk by 
following these steps:

<ol type="1">
  <li>Run <strong>svn co &lt;repository URL&gt; axis2</strong> where repository URL is one 
      of the URLs from the previous list.</li>
  <li>This step will check out the latest version of the Axis2 Java codebase to a
      directory named "axis2".  The second parameter to the svn co selects a directory
      to create on your local machine.  If you want to checkout Axis2 to a different
      directory, feel free to change axis2 to any other directory name.
  </li>
  <li>To update your working copy to the latest version from the repository.  
      Execute the <strong>svn update</strong> command.
  </li>
  <li>If you would like to submit a patch, you can execute <strong>svn diff</strong>
      to create a unified diff for submission to the Axis JIRA issue tracker.</li>
</ol>

<h2>Installing Maven 1</h2>

<p>
Axis2's build is based on Maven 1.  Maven is a build system that allows for the 
reuse of common build projects across multiple projects.  For information about 
obtaining, installing, and configuring Maven 1, please see the 
<a href="http://maven.apache.org">Maven project page</a>.  To use Maven to build 
the Axis2 project, follow these simple steps:
</p>

<ol type="1">
  <li>Install <a href="http://maven.apache.org/">Maven</a>. See <a href="http://maven.apache.org/start/install.html">here</a> for instructions.
    <ul>
      <li>Create a MAVEN_HOME environment variable.</li>
      <li>Add MAVEN_HOME/bin to your PATH</li>
    </ul>
  </li>
  <li>Go to the axis2 folder in the command prompt and type <strong>maven<strong>.
  </li>
  <li>Maven will then automatically download all the jars, compile, test and 
      build the Axis2 deliverables. </li>
</ol>

<h2>Configuring your IDE</h2>

<p>
The Axis2 development team uses a variety of development tools from vi to emacs to
Eclipse to Intellij/IDEA.  The following section is not an endorsement of a specific
set of tools, it is simply meant as a pointer to ease the process of getting
started with Axis2 development.
</p>

<ul>
  <li>If you are useing <strong>Intellij IDEA </strong>: type <strong>maven idea:multiproject</strong>.  
      This will generate the necessary IDEA .ipr, .iml and .iws project files</li>
  <li>If you are using <strong>Eclipse</strong>: The Maven eclipse plugin does
      not support Maven multiprojects.  You will need to execute 
	  <strong>maven eclipse</strong> from each of the module directories.
  </li>
</ul>
