<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at May 28, 2013
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20130528" />
    <meta http-equiv="Content-Language" content="en" />
    <title>maven-axis-server-plugin - 
    axis-server:start-server</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />

      
    <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>

    
            </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                <div id="bannerLeft">
                <h2>maven-axis-server-plugin</h2>
                </div>
                      </div>
        <div class="pull-right">                                <a href="../.." id="bannerRight">
                                                                                                <img src="../../images/axis-small.png"  alt="Apache Axis"/>
                </a>
      </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                              <li class="">
                    <a href="http://www.apache.org/" class="externalLink" title="Apache">
        Apache</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../../../../" title="Axis">
        Axis</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../../../" title="Axis 1.x">
        Axis 1.x</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../../" title="Java">
        Java</a>
        </li>
      <li class="divider ">/</li>
            <li class="">
                    <a href="../" title="Maven plugins">
        Maven plugins</a>
        </li>
      <li class="divider ">/</li>
                <li class="">
                    <a href="./" title="maven-axis-server-plugin">
        maven-axis-server-plugin</a>
        </li>
      <li class="divider ">/</li>
        <li class="">
    axis-server:start-server</li>
        
                
                    
                  <li id="publishDate" class="pull-right">Last Published: 2013-05-28</li> <li class="divider pull-right">|</li>
              <li id="projectVersion" class="pull-right">Version: 1.4.1-SNAPSHOT</li>
            
                            </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Overview</li>
                                
      <li>
    
                          <a href="index.html" title="Introduction">
          <i class="none"></i>
        Introduction</a>
            </li>
                  
      <li>
    
                          <a href="plugin-info.html" title="Goals">
          <i class="none"></i>
        Goals</a>
            </li>
                  
      <li>
    
                          <a href="usage.html" title="Usage">
          <i class="none"></i>
        Usage</a>
            </li>
                              <li class="nav-header">Apache</li>
                                
      <li>
    
                          <a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License">
          <i class="none"></i>
        License</a>
            </li>
                  
      <li>
    
                          <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">
          <i class="none"></i>
        Sponsorship</a>
            </li>
                  
      <li>
    
                          <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">
          <i class="none"></i>
        Thanks</a>
            </li>
                  
      <li>
    
                          <a href="http://www.apache.org/security/" class="externalLink" title="Security">
          <i class="none"></i>
        Security</a>
            </li>
            </ul>
                
                    
                            <form id="search-form" action="http://www.google.com/search" method="get" >
    
  <input value="ws.apache.org/axis/java" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=search-form"></script>
          
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                             <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>
                  </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            
  
    <div class="section"><h2>axis-server:start-server<a name="axis-server:start-server"></a></h2>
      <p><b>Full name</b>:</p>
      <p>org.apache.axis:maven-axis-server-plugin:1.4.1-SNAPSHOT:start-server</p>
      <p><b>Description</b>:</p>
      <div>Start a <tt>StandaloneAxisServer</tt> instance in a separate
JVM.</div>
      <p><b>Attributes</b>:</p>
      <ul>
        <li>Requires a Maven project to be executed.</li>
        <li>Requires dependency resolution of artifacts in scope: <tt>test</tt>.</li>
        <li>Binds by default to the lifecycle phase: <tt>pre-integration-test</tt>.</li>
      </ul>
      <div class="section"><h3>Required Parameters<a name="Required_Parameters"></a></h3>
        <table class="table table-striped" border="0">
          <tr class="a">
            <th>Name</th>
            <th>Type</th>
            <th>Since</th>
            <th>Description</th>
          </tr>
          <tr class="b">
            <td><b><a href="#port">port</a></b></td>
            <td><tt>int</tt></td>
            <td><tt>-</tt></td>
            <td>The port of the Axis server.<br /><b>Default value is</b>: <tt>8080</tt>.</td>
          </tr>
        </table>
      </div>
      <div class="section"><h3>Optional Parameters<a name="Optional_Parameters"></a></h3>
        <table class="table table-striped" border="0">
          <tr class="a">
            <th>Name</th>
            <th>Type</th>
            <th>Since</th>
            <th>Description</th>
          </tr>
          <tr class="b">
            <td><b><a href="#argLine">argLine</a></b></td>
            <td><tt>String</tt></td>
            <td><tt>-</tt></td>
            <td>Arbitrary JVM options to set on the command line. Note that this
parameter uses the same expression as the Surefire and Failsafe
plugins. By setting the <tt>argLine</tt> property, it is
therefore possible to easily pass a common set of JVM options to
all processes involved in the tests. Since the JaCoCo Maven plugin
also sets this property, code coverage generated on the server-side
will be automatically included in the analysis.<br /></td>
          </tr>
          <tr class="a">
            <td><b><a href="#configs">configs</a></b></td>
            <td><tt>FileSet[]</tt></td>
            <td><tt>-</tt></td>
            <td>A set of config files to copy to the <tt>WEB-INF</tt> dir. An
example of a config file would be <tt>users.lst</tt> used by
<tt>SimpleSecurityProvider</tt>.<br /></td>
          </tr>
          <tr class="b">
            <td><b><a href="#debug">debug</a></b></td>
            <td><tt>boolean</tt></td>
            <td><tt>-</tt></td>
            <td>Indicates whether the Java process should be started in debug mode.
This flag should only be set from the command line.<br /><b>Default value is</b>: <tt>false</tt>.</td>
          </tr>
          <tr class="a">
            <td><b><a href="#debugArgs">debugArgs</a></b></td>
            <td><tt>String</tt></td>
            <td><tt>-</tt></td>
            <td>The arguments to pass to the JVM when debug mode is enabled.<br /><b>Default value is</b>: <tt>-Xdebug -Xrunjdwp:transport=dt_socket,address=8899,server=y,suspend=y</tt>.</td>
          </tr>
          <tr class="b">
            <td><b><a href="#foreground">foreground</a></b></td>
            <td><tt>boolean</tt></td>
            <td><tt>-</tt></td>
            <td>If this flag is set to <tt>true</tt>, then the execution of the
goal will block after the server has been started and the services
are deployed. This is useful if one wants to manually test some
services deployed on the server or if one wants to run the
integration tests from an IDE. The flag should only be set using
the command line, but not in the POM.<br /><b>Default value is</b>: <tt>false</tt>.</td>
          </tr>
          <tr class="a">
            <td><b><a href="#foregroundPort">foregroundPort</a></b></td>
            <td><tt>int</tt></td>
            <td><tt>-</tt></td>
            <td>Specifies an alternate port number that will override
<tt>port</tt> if <tt>foreground</tt> is set to
<tt>true</tt>. This parameter should be used if the port number
configured with the <tt>port</tt> parameter is allocated
dynamically. This makes it easier to run integration tests from an
IDE. For more information, see the <a href="usage.html">usage
documentation</a>.<br /></td>
          </tr>
          <tr class="b">
            <td><b><a href="#jmx">jmx</a></b></td>
            <td><tt>boolean</tt></td>
            <td><tt>-</tt></td>
            <td>Indicates whether the Java process should be started with remote
JMX enabled. This flag should only be set from the command line.<br /><b>Default value is</b>: <tt>false</tt>.</td>
          </tr>
          <tr class="a">
            <td><b><a href="#jmxArgs">jmxArgs</a></b></td>
            <td><tt>String</tt></td>
            <td><tt>-</tt></td>
            <td>The arguments to pass to the JVM when JMX is enabled.<br /><b>Default value is</b>: <tt>-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false</tt>.</td>
          </tr>
          <tr class="b">
            <td><b><a href="#jwsDirs">jwsDirs</a></b></td>
            <td><tt>File[]</tt></td>
            <td><tt>-</tt></td>
            <td>A set of directories to look up JWS files from.<br /></td>
          </tr>
          <tr class="a">
            <td><b><a href="#maxSessions">maxSessions</a></b></td>
            <td><tt>int</tt></td>
            <td><tt>-</tt></td>
            <td>The maximum number of concurrently active sessions.<br /><b>Default value is</b>: <tt>100</tt>.</td>
          </tr>
          <tr class="b">
            <td><b><a href="#skipTests">skipTests</a></b></td>
            <td><tt>boolean</tt></td>
            <td><tt>-</tt></td>
            <td>Set this to <tt>true</tt> to skip running tests, but still
compile them. This is the same flag that is also used by the
Surefire and Failsafe plugins.<br /><b>Default value is</b>: <tt>false</tt>.</td>
          </tr>
          <tr class="a">
            <td><b><a href="#wsdds">wsdds</a></b></td>
            <td><tt>FileSet[]</tt></td>
            <td><tt>-</tt></td>
            <td>A set of WSDD files for services to deploy.<br /></td>
          </tr>
        </table>
      </div>
      <div class="section"><h3>Parameter Details<a name="Parameter_Details"></a></h3>
        <p><b><a name="argLine">argLine</a>:</b></p>
        <div>Arbitrary JVM options to set on the command line. Note that this
parameter uses the same expression as the Surefire and Failsafe
plugins. By setting the <tt>argLine</tt> property, it is
therefore possible to easily pass a common set of JVM options to
all processes involved in the tests. Since the JaCoCo Maven plugin
also sets this property, code coverage generated on the server-side
will be automatically included in the analysis.</div>
        <ul>
          <li><b>Type</b>: <tt>java.lang.String</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Expression</b>: <tt>${argLine}</tt></li>
        </ul><hr /><p><b><a name="configs">configs</a>:</b></p>
        <div>A set of config files to copy to the <tt>WEB-INF</tt> dir. An
example of a config file would be <tt>users.lst</tt> used by
<tt>SimpleSecurityProvider</tt>.</div>
        <ul>
          <li><b>Type</b>: <tt>org.apache.axis.tools.maven.server.FileSet[]</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
        </ul><hr /><p><b><a name="debug">debug</a>:</b></p>
        <div>Indicates whether the Java process should be started in debug mode.
This flag should only be set from the command line.</div>
        <ul>
          <li><b>Type</b>: <tt>boolean</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Expression</b>: <tt>${axis.server.debug}</tt></li>
          <li><b>Default</b>: <tt>false</tt></li>
        </ul><hr /><p><b><a name="debugArgs">debugArgs</a>:</b></p>
        <div>The arguments to pass to the JVM when debug mode is enabled.</div>
        <ul>
          <li><b>Type</b>: <tt>java.lang.String</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Default</b>: <tt>-Xdebug -Xrunjdwp:transport=dt_socket,address=8899,server=y,suspend=y</tt></li>
        </ul><hr /><p><b><a name="foreground">foreground</a>:</b></p>
        <div>If this flag is set to <tt>true</tt>, then the execution of the
goal will block after the server has been started and the services
are deployed. This is useful if one wants to manually test some
services deployed on the server or if one wants to run the
integration tests from an IDE. The flag should only be set using
the command line, but not in the POM.</div>
        <ul>
          <li><b>Type</b>: <tt>boolean</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Expression</b>: <tt>${axis.server.foreground}</tt></li>
          <li><b>Default</b>: <tt>false</tt></li>
        </ul><hr /><p><b><a name="foregroundPort">foregroundPort</a>:</b></p>
        <div>Specifies an alternate port number that will override
<tt>port</tt> if <tt>foreground</tt> is set to
<tt>true</tt>. This parameter should be used if the port number
configured with the <tt>port</tt> parameter is allocated
dynamically. This makes it easier to run integration tests from an
IDE. For more information, see the <a href="usage.html">usage
documentation</a>.</div>
        <ul>
          <li><b>Type</b>: <tt>int</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
        </ul><hr /><p><b><a name="jmx">jmx</a>:</b></p>
        <div>Indicates whether the Java process should be started with remote
JMX enabled. This flag should only be set from the command line.</div>
        <ul>
          <li><b>Type</b>: <tt>boolean</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Expression</b>: <tt>${axis.server.jmx}</tt></li>
          <li><b>Default</b>: <tt>false</tt></li>
        </ul><hr /><p><b><a name="jmxArgs">jmxArgs</a>:</b></p>
        <div>The arguments to pass to the JVM when JMX is enabled.</div>
        <ul>
          <li><b>Type</b>: <tt>java.lang.String</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Default</b>: <tt>-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false</tt></li>
        </ul><hr /><p><b><a name="jwsDirs">jwsDirs</a>:</b></p>
        <div>A set of directories to look up JWS files from.</div>
        <ul>
          <li><b>Type</b>: <tt>java.io.File[]</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
        </ul><hr /><p><b><a name="maxSessions">maxSessions</a>:</b></p>
        <div>The maximum number of concurrently active sessions.</div>
        <ul>
          <li><b>Type</b>: <tt>int</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Default</b>: <tt>100</tt></li>
        </ul><hr /><p><b><a name="port">port</a>:</b></p>
        <div>The port of the Axis server.</div>
        <ul>
          <li><b>Type</b>: <tt>int</tt></li>
          <li><b>Required</b>: <tt>Yes</tt></li>
          <li><b>Default</b>: <tt>8080</tt></li>
        </ul><hr /><p><b><a name="skipTests">skipTests</a>:</b></p>
        <div>Set this to <tt>true</tt> to skip running tests, but still
compile them. This is the same flag that is also used by the
Surefire and Failsafe plugins.</div>
        <ul>
          <li><b>Type</b>: <tt>boolean</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
          <li><b>Expression</b>: <tt>${skipTests}</tt></li>
          <li><b>Default</b>: <tt>false</tt></li>
        </ul><hr /><p><b><a name="wsdds">wsdds</a>:</b></p>
        <div>A set of WSDD files for services to deploy.</div>
        <ul>
          <li><b>Type</b>: <tt>org.apache.axis.tools.maven.server.FileSet[]</tt></li>
          <li><b>Required</b>: <tt>No</tt></li>
        </ul>
      </div>
    </div>
  

                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2000-2013
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

        
        
                </div>
    </footer>
  </body>
</html>