<!DOCTYPE html>
<html lang="en">
  <head>

    <meta charset="UTF-8">
      <title>TomEE Maven Plugin</title>
    <meta name="description" content="Apache TomEE">
    <meta name="author" content="Apache TomEE">
    <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <link href="./../resources/css/bootstrap.css" rel="stylesheet">
    <link href="./../resources/css/prettify.css" rel="stylesheet">
    <!--link href="./../resources/css/bootstrap-mods.css" rel="stylesheet"-->
    <link href="./../resources/css/main.css" rel="stylesheet">
    <link href="./../resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">

    <script type="text/javascript">
        var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,""));
        var u = encodeURIComponent(""+document.URL);
    
      function fbshare () {
          window.open(
                  "http://www.facebook.com/sharer/sharer.php?u="+u,
                  'Share on Facebook',
                  'width=640,height=426');
      };
      function gpshare () {
          window.open(
                  "https://plus.google.com/share?url="+u,
                  'Share on Google+',
                  'width=584,height=385');
      };
      function twshare () {
          window.open(
                  "https://twitter.com/intent/tweet?url="+u+"&text="+t,
                  'Share on Twitter',
                  'width=800,height=526');
      };
      function pinshare () {
          window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t,
                  'Share on Pinterest',
                  'width=800,height=526');
      };
    </script>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="./../favicon.ico">
    <link rel="apple-touch-icon" href="./../resources/images/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="72x72" href="./../resources/images/apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="114x114" href="./../resources/images/apple-touch-icon-114x114.png">

    <script src="./../resources/js/prettify.js" type="text/javascript"></script>
    <script src="./../resources/js/jquery-latest.js"></script>
    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
    <script src="./../resources/js/common.js"></script>
    <script src="./../resources/js/prettyprint.js"></script>
    <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//-->
    
    <script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2717626-1']);
      _gaq.push(['_setDomainName', 'apache.org']);
      _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')[0]; s.parentNode.insertBefore(ga, s);
      })();

    </script>
  </head>

  <body>

    <div class="topbar" data-dropdown="dropdown">
      <div class="fill">
        <div class="container">
          <a class="brand" href="./../index.html">Apache TomEE</a>
          <ul class="nav">
              <li class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                  Apache
                      <b class="caret"></b>
                  </a>
                  <ul class="dropdown-menu">
                     <!-- <li><a href="./../misc/whoweare.html">Who we are?</a></li> -->
                     <!-- <li><a href="./../misc/heritage.html">Heritage</a></li> -->
                     <li><a href="http://www.apache.org">Apache Home</a></li>
                     <!-- <li><a href="./../misc/resources.html">Resources</a></li> -->
                     <li><a href="./../misc/contact.html">Contact</a></li>
                     <li><a href="./../misc/legal.html">Legal</a></li>
                     <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                     <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                     <li class="divider"/>
                     <li><a href="http://www.apache.org/security">Security</a></li>
                  </ul>
              </li>
              <li><a href="./../index.html">Home</a></li>
              <li><a href="./../downloads.html">Downloads</a></li>
              <li><a href="./../documentation.html">Documentation</a></li>
              <li><a href="./../examples-trunk/index.html">Examples</a></li>
              <li><a href="./../support.html">Support</a></li>
              <li><a href="./../contribute.html">Contribute</a></li>
              <li><a href="./../security/index.html">Security</a></li>
          </ul>

            <!-- Google CSE Search Box Begins  -->
            <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search">
            </FORM>
            <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>-->
            <!-- Google CSE Search Box Ends -->
        </div>
      </div>
    </div>

    <div class="container">
    

<div class="page-header">
    <small><a href="./../index.html">Home</a>&nbsp;&raquo&nbsp;<a href="./../maven/">Maven</a></small><br>
    <h1>TomEE Maven Plugin

        <div style="float: right; position: relative; bottom: -10px; ">
            <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a>
            <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a>
            <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a>
            <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a>
            <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a>
        </div>
    </h1>
</div>

<p>Inspired by the Jetty Maven Plugin, the TomEE Maven Plugin is a feature-rich
plugin that allows for:</p>

<ul>
<li>Easy provisioning of a TomEE server</li>
<li>Server start and stop</li>
<li>Application deployment and undeployment</li>
</ul>

<p>Simply add the following to the <plugins>, and optionally the <pluginManagement>), section of your <code>pom.xml</code></p>

<pre><code>&lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.openejb.maven&lt;/groupId&gt;
      &lt;artifactId&gt;tomee-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;1.7.1&lt;/version&gt;
      &lt;configuration&gt;
        &lt;tomeeVersion&gt;1.7.1&lt;/tomeeVersion&gt;
        &lt;tomeeClassifier&gt;plus&lt;/tomeeClassifier&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
&lt;/plugins&gt;
</code></pre>

<h3>Plugin Goals</h3>

<table border="0" class="bodyTable">
<tr class="a">
<th>Goal</th>
<th>Description</th></tr>
<tr class="b">
<td><a href="build-mojo.html">tomee:build</a></td>
<td>Create TomEE, but do not run it.</td></tr>
<tr class="a">
<td><a href="configtest-mojo.html">tomee:configtest</a></td>
<td>Run the Apache Tomcat `configtest` command.</td></tr>
<tr class="b">
<td><a href="debug-mojo.html">tomee:debug</a></td>
<td>Same as `run` but with debug activated on the default or specified port.</td></tr>
<tr class="a">
<td><a href="deploy-mojo.html">tomee:deploy</a></td>
<td>Deploy an application in a running TomEE.</td></tr>
<tr class="b">
<td><a href="exec-mojo.html">tomee:exec</a></td>
<td>Undocumented.</td></tr>
<tr class="a">
<td><a href="help-mojo.html">tomee:help</a></td>
<td>Display help information on the tomee-maven-plugin.<br />
Call <code>mvn tomee:help -Ddetail=true
-Dgoal=&lt;goal-name&gt;</code> to display parameter details.</td></tr>
<tr class="b">
<td><a href="list-mojo.html">tomee:list</a></td>
<td>Largely inspired by the OpenEJB command helper, but with some differences. List deployed EJB's in a running TomEE.</td></tr>
<tr class="a">
<td><a href="run-mojo.html">tomee:run</a></td>
<td>Start and wait for TomEE.</td></tr>
<tr class="b">
<td><a href="start-mojo.html">tomee:start</a></td>
<td>Start TomEE and continue.</td></tr>
<tr class="a">
<td><a href="stop-mojo.html">tomee:stop</a></td>
<td>Stop a TomEE started with start command.</td></tr>
<tr class="b">
<td><a href="undeploy-mojo.html">tomee:undeploy</a></td>
<td>Undeploy an application in a running TomEE</td></tr></table>

<p>Note that for the tomee:deploy and tomee:undeploy goals, the path can either be specified within the <configuration/> section of the <code>pom.xml</code> using the <path> parameter, or it can be passed via the user property tomee-plugin.archive. If a relative path is passed for the deploy path archive, this must be relative to the TomEE server.</p>

<p>Note 2: running tomee maven plugin you can type 'quit' directly in the console to shutdown correctly the
server. 'reload' is also available when internal openejb application is deployed.</p>

<h3>More Tweaks</h3>

<p>The lib tag allows to enrich the container with some additional libraries.</p>

<p>Some interesting patterns in addition to the default maven formats are supported.</p>

<ul>
<li>remove:&lt;some prefix of jar in lib folder&gt;: remove all jar starting with the specified prefix</li>
<li>unzip:&lt;some maven zip&gt;: extract the zip in lib folder</li>
<li>?name=&lt;new-name&gt;: rename the libary once copied in lib folder</li>
</ul>

<p>Note: the name tweak can be used to rename applications too</p>

<h3>Provisioning Example</h3>

<p>This plugin is also usable in projects which are not war. For instance you can use it in a pom
project to setup a TomEE install, add libraries, deploy apps then run the server.</p>

<pre><code>  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.openejb.maven&lt;/groupId&gt;
    &lt;artifactId&gt;tomee-maven-plugin&lt;/artifactId&gt;
    &lt;version&gt;1.7.1&lt;/version&gt;
    &lt;configuration&gt;
      &lt;tomeeVersion&gt;1.7.1&lt;/tomeeVersion&gt;
      &lt;tomeeClassifier&gt;plus&lt;/tomeeClassifier&gt;
      &lt;debug&gt;false&lt;/debug&gt;
      &lt;debugPort&gt;5005&lt;/debugPort&gt;
      &lt;args&gt;-Dfoo=bar&lt;/args&gt;
      &lt;config&gt;${project.basedir}/src/test/tomee/conf&lt;/config&gt;
      &lt;libs&gt;
        &lt;lib&gt;mysql:mysql-connector-java:5.1.20&lt;/lib&gt;
      &lt;/libs&gt;
      &lt;webapps&gt;
         &lt;webapp&gt;org.superbiz:myapp:4.3?name=ROOT&lt;/webapp&gt;
         &lt;webapp&gt;org.superbiz:api:1.1&lt;/webapp&gt;
      &lt;/webapps&gt;
      &lt;apps&gt;
          &lt;app&gt;org.superbiz:mybugapp:3.2:ear&lt;/app&gt;
      &lt;/apps&gt;
      &lt;libs&gt;
          &lt;lib&gt;mysql:mysql-connector-java:5.1.21&lt;/lib&gt;
          &lt;lib&gt;unzip:org.superbiz:hibernate-bundle:4.1.0.Final:zip&lt;/lib&gt;
          &lt;lib&gt;remove:openjpa-&lt;/lib&gt;
      &lt;/libs&gt;
    &lt;/configuration&gt;
  &lt;/plugin&gt;
</code></pre>

<h3>Auto Reloading Example</h3>

<pre><code>&lt;plugin&gt;
  &lt;groupId&gt;org.apache.openejb.maven&lt;/groupId&gt;
  &lt;artifactId&gt;tomee-maven-plugin&lt;/artifactId&gt;
  &lt;version&gt;1.7.1&lt;/version&gt;
  &lt;configuration&gt;
    &lt;synchronization&gt;
      &lt;extensions&gt;
        &lt;extension&gt;.class&lt;/extension&gt; &lt;!-- if you want to update each time you build with mvn compile --&gt;
      &lt;/extensions&gt;
    &lt;/synchronization&gt;
    &lt;reloadOnUpdate&gt;true&lt;/reloadOnUpdate&gt;
  &lt;/configuration&gt;
&lt;/plugin&gt;
</code></pre>

<p>The Synchronization block supports the following configuration options:</p>

<ul>
<li>resourcesDir (default src/main/webapp)</li>
<li>binariesDir (default target/classes)</li>
<li>targetBinariesDir (default tomee/webapps/finalName/WEB-INF/classes)</li>
<li>targetResourcesDir (default tomee/webapps/finalName)</li>
<li>updateInterval (default 5 - in second)</li>
<li>extensions (default html, xhtml, js and css)</li>
<li>regex: a regex should match files to take into account when updating</li>
</ul>

<p>reloadOnUpdate means to reload the entire context (webapp). This means undeploying/redeploying the application.</p>




        <div id="edit" class="modal hide fade in" style="display: none; ">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">x</a>

                <h3>Thank you for contributing to the documentation!</h3>
            </div>
            <div class="modal-body">
                <h4>Any help with the documentation is greatly appreciated.</h4>
                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
                <!--[if gt IE 6]>
                <h4>Internet Explorer Users</h4>
                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
                <![endif]-->

            </div>
            <div class="modal-footer">
                Do you have an Apache ID?
                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
            </div>
        </div>
        <script src="./../resources/js/bootstrap-modal.js"></script>

        <footer>
            <p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
                Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation.
                All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
        </footer>

    </div> <!-- /container -->

    <!-- Javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="./../resources/js/bootstrap-dropdown.js"></script>

  </body>
</html>
