title: Maven Release Patterns
body: <p>I'm new to maven, and trying to understand how to release my project.  I have the following project setup in svn:</p>
  
  <pre><code>trunk
    |-deployer
    |    |-pom.xml
    |-webapp
    |    |-pom.xml
    |-utils      
         |-pom.xml
  </code></pre>
  
  <p>While developing <strong>webapp</strong>, I always want to develop against the latest snapshot version of utils, so I declare the dependency on utils in webapp/pom.xml via:</p>
  
  <p>
      
        com.company
        utils
        1.0-SNAPSHOT
      </p>
  
  <p>Webapp itself is also currently versioned at version 1.0-SNAPSHOT.  It's pom.xml has the declaration:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;artifactId&gt;webapp&lt;/artifactId&gt;
  &lt;packaging&gt;war&lt;/packaging&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;Sample Webapp&lt;/name&gt;
  </code></pre>
  
  <p>So everything is working great, but now I want to release my software.  In deployer, I have the following in pom.xml:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  
    &lt;groupId&gt;com.company&lt;/groupId&gt;
    &lt;artifactId&gt;deployer&lt;/artifactId&gt;
    &lt;packaging&gt;pom&lt;/packaging&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;Project Release&lt;/name&gt;
  
    &lt;modules&gt;
      &lt;module&gt;externals/webapp&lt;/module&gt;
    &lt;/modules&gt;
  
    &lt;properties&gt;
      &lt;url.svn&gt;http://&lt;my-server&gt;/&lt;project&gt;/trunk&lt;/url.svn&gt;
    &lt;/properties&gt;
    &lt;scm&gt;
      &lt;connection&gt;scm:svn:${url.svn}&lt;/connection&gt;
    &lt;/scm&gt;
  
    &lt;build&gt;
      &lt;plugins&gt;
        &lt;plugin&gt;
          &lt;artifactId&gt;maven-release-plugin&lt;/artifactId&gt;
          &lt;version&gt;2.3&lt;/version&gt;
          &lt;configuration&gt;
            &lt;tagBase&gt;
              http://&lt;my-server&gt;/&lt;project&gt;/tags
            &lt;/tagBase&gt;
          &lt;/configuration&gt;
        &lt;/plugin&gt;
  
      &lt;/plugins&gt;
    &lt;/build&gt;
  
    &lt;distributionManagement&gt;
      &lt;repository&gt;
        &lt;id&gt;Releases&lt;/id&gt;
        &lt;name&gt;Releases&lt;/name&gt;
        &lt;url&gt;http://&lt;nexus-server&gt;/nexus/content/repositories/releases&lt;/url&gt;
      &lt;/repository&gt;
      &lt;snapshotRepository&gt;
        &lt;id&gt;Snapshots&lt;/id&gt;
        &lt;name&gt;Snapshots&lt;/name&gt;
        &lt;url&gt;http://&lt;nexus-server&gt;/nexus/content/repositories/snapshots&lt;/url&gt;
      &lt;/snapshotRepository&gt;
    &lt;/distributionManagement&gt;
  
  &lt;/project&gt;
  </code></pre>
  
  <p>Within the deployer folder itself I have a folder called "externals" which has an svn-externals set to check out my webapp project (I added this because maven complained about not being able to find it), so my modules path should be correct.</p>
  
  <p><strong>Questions</strong></p>
  
  <p>1.)  I want to release a version of my web app, but when I run a <code>mvn release:prepare</code> and <code>mvn release:perform</code> in my deployer project, my only tangible output is my trunk tagged in svn and a pom uploaded to my nexus repository.  This makes sense in that my deployer artifact packaging is type "pom", but it also doesn't get the job done of getting me a war of my webapp (I should note here that if a do a release in the webapp project by itself though, that I will get the war).  I need to release multiple modules, and so I thought I could use maven aggregation from the deployer project to accomplish this, but it doesn't seem to be working.</p>
  
  <p>2.)  Is there a better way to achieve what I am trying to do?  </p>
  
  <p>Thank you for any insights you can provide.</p>