<?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.
  -->
<document xmlns="http://maven.apache.org/XDOC/2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
    <properties>
        <title>Developing Apache Axis2</title>
    </properties>
    <body>
        <section name="Introduction">
            <p>
                This document provides information on how to use Git to get a
                GitHub checkout/update, make commits to the repository, etc., in the
                process of contributing to Apache projects (specifically Axis2).
                Instructions on configuring IDEs for development and using Maven to
                build the project is also included here.
            </p>
        </section>
        <section name="Working with GitHub (Git)">
            <p>
                The Axis2 development team uses GitHub (Git) for source
                control.
            </p>
        </section>
        <section name="Checkout Axis2 from Git">
            <p>
                To check out the latest version of Axis2 from the Foundation's
                GitHub repository, you must use the following URL:
            </p>
            <ul>
                <li><b>If you are a committer or not a committer, the link is the same:</b> <a href=
                "https://github.com/apache/axis-axis2-java-core">https://github.com/apache/axis-axis2-java-core</a></li>
            </ul>
            <p>
                Once you have successfully installed Git, you can check
                out Axis2 trunk by following these steps:
            </p>
            <ol type="1">
                <li>Run <strong>git clone &lt;repository URL&gt;</strong> where
                the repository URL from the previous list.</li>
                <li>This step will check out the latest version of the Axis2 Java
                codebase to a directory named "axis-axis2-java-core".</li>
            </ol>
        </section>
        <section name="Installing Maven 3">
            <p>
                Axis2's build is based on Maven 3. 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 3, please see the <a href=
                "http://maven.apache.org">Maven project page</a>.
                To use Maven to build the Axis2 project, Please install
                <a href="http://maven.apache.org/download.html">Maven2</a> and
                follow instructions here -  <a href="maven-help.html">Quick Guide to Maven for Axis 2.0</a>.
            </p>
        </section>
        <section name="Configuring your IDE">
            <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>
            <subsection name="Intellij IDEA">
                <p>
                    Type <strong>mvn idea:idea</strong>. Generates the necessary IDEA .ipr, .iml
                    and .iws project files.
                </p>
            </subsection>
            <subsection name="Eclipse">
                <p>
                    We recommend using <a href="http://maven.apache.org/plugins/maven-eclipse-plugin/">maven-eclipse-plugin</a>
                    to import the Axis2 sources into Eclipse. This works best with the following
                    combinations of versions and settings:
                </p>
                <ul>
                    <li>
                        Early versions of Maven 2 have issues with non standard packagings
                        (<tt>bundle</tt>, <tt>aar</tt> and <tt>mar</tt> in the case of Axis2)
                        in multi-module builds. While this has no impact on the normal Maven
                        build, it prevents the Maven Eclipse plugin from identifying modules
                        with these packagings as Java projects. Therefore it is recommended
                        to use Maven 2.2.x or 3.0.x to execute the Maven Eclipse plugin.
                    </li>
                    <li>
                        By default, the Maven Eclipse plugin only imports generated sources
                        and resources created during the <tt>generate-sources</tt> and
                        <tt>generate-resources</tt> phases, but fails to locate them if they
                        are generated during the <tt>generate-test-sources</tt> and
                        <tt>generate-test-resources</tt> phases. This is due to a limitation in Maven 2 (see
                        <s><a href="http://jira.codehaus.org/browse/MECLIPSE-37">MECLIPSE-37</a></s> <em>(Codehaus JIRA is no longer accessible)</em>
                        for more information). Executing the <tt>eclipse:eclipse</tt> goal after
                        the <tt>process-test-resources</tt> phase is also not enough because of
                        <s><a href="http://jira.codehaus.org/browse/MDEP-259">MDEP-259</a></s> <em>(Codehaus JIRA is no longer accessible)</em>. The
                        best is to execute it after the <tt>install</tt> phase. The <tt>skipTests</tt>
                        property can be used to skip the execution of the unit tests (<tt>maven.test.skip</tt>
                        is not appropriate here because it also skips some of the goals configured
                        in the <tt>generate-test-sources</tt> and <tt>generate-test-resources</tt> phases).
                    </li>
                </ul>
                <p>
                    To summarize, use the following command to prepare the Axis2 sources for
                    import into Eclipse:
                </p>
                <pre>mvn -DskipTests=true install eclipse:eclipse</pre>
                <p>
                    As usual, before importing the projects into Eclipse, check that a Classpath Variable
                    for <tt>M2_REPO</tt> is configured in Eclipse. Then select File &gt; Import &gt; Existing Projects
                    into Workspace &gt; Select root directory. Selecting the root of
                    the Axis source discovers all the modules and allows them to be
                    imported as individual projects at once.
                </p>
            </subsection>
        </section>
    </body>
</document>
