<!--
  ~ 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">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta name="generator" content=
                "HTML Tidy for Windows (vers 14 June 2007), see www.w3.org"/>
        <title>Quick Guide to Maven for Axis 2.0</title>
        <meta http-equiv="content-type" content=
                "text/html; charset=us-ascii"/>
        <link href="css/axis-docs.css" rel="stylesheet" type="text/css"
              media="all"/>
    </head>
    <body lang="en" xml:lang="en">
        <h1 align="center">Quick Guide to Maven for Axis 2.0</h1>
        <h2 align="left">Introduction</h2>
        <p align="left">
            <a href="http://maven.apache.org">Maven 2</a>
            is used
            as the build environment for Axis2. This document will provide a quick
            guide on how to use Maven with our project.
        </p>
        <h2 align="left">Commands</h2>
        <table border="1" align="center">
            <tbody>
                <tr>
                    <th scope="col">
                        <div align="left">Command</div>
                    </th>
                    <th scope="col">
                        <div align="left">Description</div>
                    </th>
                </tr>
                <tr>
                    <td>mvn clean</td>
                    <td>Cleans all the content built so far in the target/ folder. This
                        will not delete jars from your local repository.
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn install</div>
                    </td>
                    <td>
                        <div align="left">Run a full build.</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn test</div>
                    </td>
                    <td>
                        <div align="left">Runs our basic test suite.</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn clean test</div>
                    </td>
                    <td>
                        <div align="left">Cleans up, rebuilds everything from scratch, and then runs the basic test
                            suite.
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn -Dtest=MyTest install</div>
                    </td>
                    <td>
                        <div align="left">run a single test (cd to the specific module say kernel before running this
                            and don't use the package name of the class, just the class name).
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn dependency:resolve</div>
                    </td>
                    <td>
                        <div align="left">print dependencies under any module</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn site</div>
                    </td>
                    <td>
                        <div align="left">Generates the website in target/site/</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn idea:idea</div>
                    </td>
                    <td>
                        <div align="left">Generates IDEA .ipr, .iml and .iws project
                            files.
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn -Dtest=false</div>
                    </td>
                    <td>
                        <div align="left"></div>
                        Builds Axis2 and skips all the tests.
                    </td>
                </tr>
                <tr>
                    <td>
                        <div align="left">mvn -U -Drelease clean install</div>
                    </td>
                    <td>
                        <div align="left"></div>
                        Generate release artifacts.
                    </td>
                </tr>
            </tbody>
        </table>
        <h4>Notes:</h4>
        <ul>
            <li>The "-U" ensures that you fetch the latest snapshots</li>
            <li>The "-Drelease" runs the pom.xml under modules/distribution. The zip's are created under
                modules/distribution/target
            </li>
            <li>To skip tests use "-Dtest=false"</li>
            <li>If you run into an exception, switch on printing of full exception using "-e"</li>
            <li>If you want to see the versbose output, use "-X"</li>
        </ul>
        <h3>Ant helper for the m2 build</h3>
        <p>If you prefer to use Ant, we have a build.xml. Please note that there are 2 maven2 plugins that need to be
            built first when you update version # for Axis2. the ant build.xml takes care of that automatically. It
            builds
            axis2-aar-maven-plugin and axis2-mar-maven-plugin before it runs the main build.
        </p>
        <table border="1" align="center">
            <tbody>
                <tr>
                    <th scope="col">
                        <div align="left">Command</div>
                    </th>
                    <th scope="col">
                        <div align="left">Description</div>
                    </th>
                </tr>
                <tr>
                    <td>ant clean"</td>
                    <td>cleans up</td>
                </tr>
                <tr>
                    <td>ant install"</td>
                    <td>runs the build</td>
                </tr>
                <tr>
                    <td>ant deploy"</td>
                    <td>deploys artifacts in apache m2 snapshots repo</td>
                </tr>
                <tr>
                    <td>ant -Doffline=true clean"</td>
                    <td>offline clean up</td>
                </tr>
                <tr>
                    <td>ant -Doffline=true install"</td>
                    <td>offline build</td>
                </tr>
                <tr>
                    <td>ant -Dskip=true install"</td>
                    <td>run the build, but skip the tests</td>
                </tr>
                <tr>
                    <td>ant -Dskip=true install"</td>
                    <td>run the build, but skip the tests</td>
                </tr>
                <tr>
                    <td>ant -Dskip=true deploy"</td>
                    <td>deploys artifacts, but skip the tests</td>
                </tr>
                <tr>
                    <td>ant -Doffline=true -Dskip=true install"</td>
                    <td>run the build in the offline and skips the tests</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
