<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adam Sherman &#187; J2EE</title>
	<atom:link href="http://www.sherman.ca/archives/category/software/j2ee/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sherman.ca</link>
	<description>Mostly random thoughts on software, gear and the great outdoors.</description>
	<lastBuildDate>Wed, 04 Apr 2012 17:18:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Automated Releases with Maven and Google App Engine</title>
		<link>http://www.sherman.ca/archives/2012/02/15/releases-with-maven-and-gae/</link>
		<comments>http://www.sherman.ca/archives/2012/02/15/releases-with-maven-and-gae/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 16:09:36 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[J2EE]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/?p=306</guid>
		<description><![CDATA[Versature has been building our applications using Java and deploying them on Google App Engine for some time. It has been a very effective solution for us. Recently, I wanted to improve our release process by making it more formal &#8230; <a href="http://www.sherman.ca/archives/2012/02/15/releases-with-maven-and-gae/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sherman.ca/wp-content/uploads/2012/02/appengine_lowres.png"><img class="alignleft size-full wp-image-309" title="Google App Engine" src="http://www.sherman.ca/wp-content/uploads/2012/02/appengine_lowres.png" alt="Google App Engine Logo" width="142" height="109" /></a><a title="Versature Corp." href="http://www.versature.com/" target="_blank">Versature</a> has been building our applications using <a title="Java" href="http://www.java.com/" target="_blank">Java</a> and deploying them on <a title="App Engine" href="http://code.google.com/appengine/" target="_blank">Google App Engine</a> for some time. It has been a very effective solution for us.</p>

<p>Recently, I wanted to improve our release process by making it more formal and automated. After the usual battle with <a title="Apache Maven" href="http://maven.apache.org" target="_blank">Maven</a>, I managed to win. <img src='http://www.sherman.ca/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>Our current build automates the following:</p>

<ul>
    <li>Remove the trailing <code>-SNAPSHOT</code> from the version number in the POM</li>
    <li>Tag the release in Subversion</li>
    <li>Filter the <code>appengine-web.xml</code> to contain the version number</li>
    <li>Build and deploy to GAE</li>
    <li>Increment version number in the POM and add the trailing <code>-SNAPSHOT</code></li>
</ul>

<p>All of the above is achieved with two Maven commands: <code>release:prepare</code> and <code>release:perform</code>.</p>

<p>Here is the POM with most of the irrelevant parts removed:</p>


<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://maven.apache.org/POM/4.0.0&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;modelVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>4.0.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/modelVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0-9-0-SNAPSHOT<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>war<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Versature Dashboard<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;scm<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;connection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>scm:svn:https://REMOVED/trunk<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/connection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/scm<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;repositories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>google-maven-repo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Maven Google App Engine Repository<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>http://maven-gae-plugin.googlecode.com/svn/repository/<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>codehaus<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>codehaus<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>http://repository.codehaus.org/org/codehaus/groovy/<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/repositories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pluginRepositories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pluginRepository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-gae-plugin-repo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Maven Google App Engine Repository<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>http://maven-gae-plugin.googlecode.com/svn/repository/<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/pluginRepository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/pluginRepositories<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        REMOVED
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;testOutputDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>target/test-classes<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/testOutputDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;outputDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${webappDirectory}/WEB-INF/classes<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/outputDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;testSourceDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>src/test/java<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/testSourceDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-war-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.1.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>exploded<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;webResources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resource<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;directory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>src/main/webapp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/directory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filtering<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/filtering<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;includes<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>**/appengine-web.xml<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/include<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/includes<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resource<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/webResources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;webappDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${webappDirectory}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/webappDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.codehaus.mojo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>gwt-maven-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${gwt-plugin.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;logLevel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>INFO<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/logLevel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;port<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${gae.port}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/port<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.google.appengine.tools.development.gwt.AppEngineLauncher<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;runTarget<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/REMOVED<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/runTarget<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;style<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>OBF<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/style<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;extraJvmArgs<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>-Xmx1024m -Xms512m<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/extraJvmArgs<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;module<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.versature.dashboard.Dashboard<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/module<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>net.kindleit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-gae-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0.9.2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;unpackVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${gae.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/unpackVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;serverId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>appengine.google.com<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/serverId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>net.kindleit<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>gae-runtime<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${gae.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;type<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>pom<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/type<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-release-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.2.2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;scmCommentPrefix<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>[RELEASE] <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/scmCommentPrefix<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>gae:deploy<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.codehaus.gmaven<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>gmaven-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${gmaven.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>sources<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>generateStubs<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>generateTestStubs<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>testCompile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>properties<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>validate<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>execute<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                                project.properties[&quot;gae-application.version&quot;] = project.version.toLowerCase()
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #808080; font-style: italic;">&lt;!-- Specify hard-coded project properties here --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;gmaven.version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/gmaven.version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;gae.version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6.2.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/gae.version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;gae.port<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>9090<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/gae.port<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;webappDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${project.build.directory}/${project.build.finalName}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/webappDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;profiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;profile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>release-build<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;activation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>performRelease<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/activation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;gwt.style<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>OBF<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/gwt.style<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/profile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/profiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.versature.dashboard<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>dashboard<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>


<p>If you run into an error similar to this one:</p>

<p><pre>
com.google.appengine.tools.admin.AdminException: Unable to update app: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=versature-dashboardhr&amp;version=0-8-1-SNAPSHOT&amp;
400 Bad Request
Error when loading application configuration:
Unable to assign value '0-8-1-SNAPSHOT' to attribute 'version':
Value '0-8-1-SNAPSHOT' for version does not match expression '^(?!-)[a-z\d&#45;]{1,100}$'
</pre></p>

<p>It is because GAE only accepts lowercase letters, digits and hyphens in version names. (Because those version names become URLs.) I solved this by using a snippet of <a href="http://groovy.codehaus.org/" title="Goovy" target="_blank">Groovy</a> (Using the GMaven plugin.) code to automatically create a property with all lowercase letters before filtering it into the <code>appengine-web.xml</code>. So version <code>0-8-0-SNAPSHOT</code> becomes <code>0-8-0-snapshot</code>:</p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;">project.<span style="color: #006600;">properties</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;gae-application.version&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> project.<span style="color: #006600;">version</span>.<span style="color: #006600;">toLowerCase</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>


<p>And that&#8217;s it, it Just Works&trade;. Gotta love Maven!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2012/02/15/releases-with-maven-and-gae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developer Position Open at Versature</title>
		<link>http://www.sherman.ca/archives/2011/12/05/developer-position-open-at-versature/</link>
		<comments>http://www.sherman.ca/archives/2011/12/05/developer-position-open-at-versature/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 21:11:03 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[careers]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/?p=301</guid>
		<description><![CDATA[Versature is hiring again. <a href="http://www.sherman.ca/archives/2011/12/05/developer-position-open-at-versature/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re hiring again at Versature, take a look:</p>

<p><a href="http://inside.versature.com/2011/12/developer-position-open/">Developer Position Open</a></p>

<p>It&#8217;s a software developer position that gets you working directly with me. Make sure to spread the word!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2011/12/05/developer-position-open-at-versature/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get sources and Javadocs</title>
		<link>http://www.sherman.ca/archives/2011/08/01/get-sources-and-javadocs/</link>
		<comments>http://www.sherman.ca/archives/2011/08/01/get-sources-and-javadocs/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 15:12:46 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/?p=282</guid>
		<description><![CDATA[How to tell Maven to download all Javadoc for your project&#8217;s dependencies: mvn dependency:resolve -Dclassifier=javadoc via Maven Micro-Tip: Get sources and Javadocs &#124; Ted Wise.]]></description>
			<content:encoded><![CDATA[<p>How to tell Maven to download all Javadoc for your project&#8217;s dependencies:</p>

<blockquote>
<pre>mvn dependency:resolve -Dclassifier=javadoc</pre>
</blockquote>

<p>via <a href="http://tedwise.com/2010/01/27/maven-micro-tip-get-sources-and-javadocs/">Maven Micro-Tip: Get sources and Javadocs | Ted Wise</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2011/08/01/get-sources-and-javadocs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DrunkenBlog: Behind the Red Shed, with Jonathan &#8216;The Wolf&#8217; Rentzsch</title>
		<link>http://www.sherman.ca/archives/2005/03/28/drunkenblog-behind-the-red-shed-with-jonathan-the-wolf-rentzsch/</link>
		<comments>http://www.sherman.ca/archives/2005/03/28/drunkenblog-behind-the-red-shed-with-jonathan-the-wolf-rentzsch/#comments</comments>
		<pubDate>Mon, 28 Mar 2005 12:06:03 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2005/03/28/drunkenblog-behind-the-red-shed-with-jonathan-the-wolf-rentzsch/</guid>
		<description><![CDATA[In this post on DrunkenBlog, Jonathan Rentzsch gives a terrific interview. Notably, he discusses Apple&#8217;s enterprise software development gem, WebObjects, which I&#8217;ve always wanted to know more about. Anyone know if there is a downloadable developer&#8217;s version somewhere? Update: Yes, &#8230; <a href="http://www.sherman.ca/archives/2005/03/28/drunkenblog-behind-the-red-shed-with-jonathan-the-wolf-rentzsch/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In this <a href="http://www.drunkenblog.com/drunkenblog-archives/000513.html" title="DrunkenBlog: Behind the Red Shed, with Jonathan 'The Wolf' Rentzsch">post</a> on <a href="http://www.drunkenblog.com/">DrunkenBlog</a>, Jonathan Rentzsch gives a terrific interview. Notably, he discusses Apple&#8217;s enterprise software development gem, WebObjects, which I&#8217;ve always wanted to know more about.</p>

<p>Anyone know if there is a downloadable developer&#8217;s version somewhere?</p>

<p><strong>Update:</strong> Yes, you can download a 1 month evaluation copy from <a href="http://connect.apple.com/">http://connect.apple.com/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2005/03/28/drunkenblog-behind-the-red-shed-with-jonathan-the-wolf-rentzsch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JINI and JXTA</title>
		<link>http://www.sherman.ca/archives/2005/03/14/jini-and-jxta/</link>
		<comments>http://www.sherman.ca/archives/2005/03/14/jini-and-jxta/#comments</comments>
		<pubDate>Mon, 14 Mar 2005 16:28:48 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2005/03/14/jini-and-jxta/</guid>
		<description><![CDATA[Some days I wish I had way more energy in order to explore all the technology I&#8217;m interested in. How does JXTA figure in relation to JINI? Dan Creswell&#8217;s post about JINI not being RMI brought JINI back to the &#8230; <a href="http://www.sherman.ca/archives/2005/03/14/jini-and-jxta/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Some days I wish I had way more energy in order to explore all the technology I&#8217;m interested in.</p>

<p>How does <a href="http://www.jxta.org/">JXTA</a> figure in relation to <a href="http://www.sun.com/software/jini/">JINI</a>?</p>

<p>Dan Creswell&#8217;s <a href="http://www.jroller.com/page/dancres/20050314#jini_rmi">post</a> about <a href="http://www.sun.com/software/jini/">JINI</a> not being RMI brought <a href="http://www.sun.com/software/jini/">JINI</a> back to the forefront of my <em>technology todo list</em>. This stuff is cool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2005/03/14/jini-and-jxta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JAM&#8217;ing with Maven and Ant</title>
		<link>http://www.sherman.ca/archives/2005/02/28/jaming-with-maven-and-ant/</link>
		<comments>http://www.sherman.ca/archives/2005/02/28/jaming-with-maven-and-ant/#comments</comments>
		<pubDate>Mon, 28 Feb 2005 22:07:44 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[J2EE]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2005/02/28/jaming-with-maven-and-ant/</guid>
		<description><![CDATA[Now I really don&#8217;t get this project. At first glance, JAM seems to provide some of the Maven functionality in a nice, structured, way using Ant. The part I don&#8217;t grok is that JAM depends on Maven. Huh? Since I &#8230; <a href="http://www.sherman.ca/archives/2005/02/28/jaming-with-maven-and-ant/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Now I really don&#8217;t get <a href="http://www.javagen.com/jam/">this project</a>. At first glance, <a href="http://www.javagen.com/jam/">JAM</a> seems to provide some of the <a href="http://maven.apache.org/">Maven</a> functionality in a nice, structured, way using <a href="http://ant.apache.org/">Ant</a>. The part I don&#8217;t grok is that <a href="http://www.javagen.com/jam/">JAM</a> depends on <a href="http://maven.apache.org/">Maven</a>. Huh?</p>

<p>Since I am sure to be missing something and am <strong>very</strong> interested in build tools, please comment if anyone can do a good job of explaining where <a href="http://www.javagen.com/jam/">JAM</a> fits.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2005/02/28/jaming-with-maven-and-ant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trails Makes Tapestry Smell Good</title>
		<link>http://www.sherman.ca/archives/2005/02/22/trails-makes-tapestry-smell-good/</link>
		<comments>http://www.sherman.ca/archives/2005/02/22/trails-makes-tapestry-smell-good/#comments</comments>
		<pubDate>Tue, 22 Feb 2005 21:30:03 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[J2EE]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2005/02/22/trails-makes-tapestry-smell-good/</guid>
		<description><![CDATA[I should now say something witty about Kool-Aid here&#8230; I&#8217;m in the process of reading the Trails tutorial by this guy (Trails&#8217; creator) and I am very enthused about the idea: I&#8217;ve always felt that code-generation is being overly used &#8230; <a href="http://www.sherman.ca/archives/2005/02/22/trails-makes-tapestry-smell-good/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I should now say something witty about <a href="http://jroller.com/page/ccnelson/20050221#david_geary_ain_t_drinkin">Kool-Aid</a> here&#8230;</p>

<p>I&#8217;m in the process of reading the <a href="http://trails.dev.java.net/">Trails</a> <a href="http://trails.dev.java.net/tutorial/">tutorial</a> by <a href="http://jroller.com/page/ccnelson">this guy</a> (<a href="http://trails.dev.java.net/">Trails&#8217;</a> creator) and I am very enthused about the idea: I&#8217;ve always felt that code-generation is being overly used in J2EE development. I believe, as do others, that if you can generate it, you should be able to handle it at runtime. (There are exceptions to this rule, of course.) Java has an <em>exceptional</em> reflection API, we should use it. Also, <a href="http://www.springframework.org">Spring</a> allows much of the work to be done via AOP. But I&#8217;m rambling a little here.</p>

<p>The major exception to my dislike of code generation has always been page templates. These are just dumb pieces of text, so you either need to build them by hand or generate them. I&#8217;ve never really understood what <a href="http://jakarta.apache.org/tapestry">Tapestry</a> was about until I started reading about <a href="http://trails.dev.java.net/">Trails</a> and realized that it was allowing us to push <em>object oriented design</em> all the way into the template layer of our applications.</p>

<p>They features of <a href="http://trails.dev.java.net/">Trails</a>, like allowing us to override the presentation of a <em>specific field</em> without building a template for the entire form and lack of code generation, are really exciting and will provide some great ideas for my current side project.</p>

<p>Those familiar with <a href="http://www.plone.org/">Plone</a> development will see some similarities here.</p>

<p>A.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2005/02/22/trails-makes-tapestry-smell-good/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top Ten Technology Predictions</title>
		<link>http://www.sherman.ca/archives/2005/02/20/top-ten-technology-predictions/</link>
		<comments>http://www.sherman.ca/archives/2005/02/20/top-ten-technology-predictions/#comments</comments>
		<pubDate>Mon, 21 Feb 2005 02:23:54 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[J2EE]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2005/02/20/top-ten-technology-predictions/</guid>
		<description><![CDATA[I try hard not to link blog, but this post on Cameron Purdy&#8217;s blog, /dev/null, is great. I&#8217;ll save you the anxiety: And a drum roll, please .. 1 &#8211; At the 2005 TSS Symposium, Rod Johnson will not be &#8230; <a href="http://www.sherman.ca/archives/2005/02/20/top-ten-technology-predictions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I try hard not to link blog, but this <a href="http://jroller.com/page/cpurdy/20050105#top_ten_technology_predictions" title="Top Ten Technology Predictions">post</a> on Cameron Purdy&#8217;s blog, <a href="http://jroller.com/page/cpurdy">/dev/null</a>, is great. I&#8217;ll save you the anxiety:</p>

<blockquote>
  <p><em>And a drum roll, please ..</em></p>
  
  <p><strong>1</strong> &#8211; At the 2005 TSS Symposium, Rod Johnson will not be able to resist saying the word &#8220;Spring.&#8221; Yup, it&#8217;s like trying not to think of pink elephants &#8212; impossible once you get that in your head. Spring, spring, spring, spring. La tee dah, spring spring spring. Take that, Linda. Spring-diddy-spring spring. Spring.</p>
</blockquote>

<p><em>grin</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2005/02/20/top-ten-technology-predictions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven vs Ant Reloaded</title>
		<link>http://www.sherman.ca/archives/2005/02/20/maven-vs-ant-reloaded/</link>
		<comments>http://www.sherman.ca/archives/2005/02/20/maven-vs-ant-reloaded/#comments</comments>
		<pubDate>Mon, 21 Feb 2005 01:59:55 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[J2EE]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2005/02/20/maven-vs-ant-reloaded/</guid>
		<description><![CDATA[Some time ago, I posted a short entry on Maven vs Ant. Since then, I have continued to use Ant while periodically taking yet another look at Maven. This week, I came across this post on Otaku talking about keeping &#8230; <a href="http://www.sherman.ca/archives/2005/02/20/maven-vs-ant-reloaded/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Some time ago, I <a href="http://www.sherman.ca/archives/2004/07/04/maven-vs-ant/">posted a short entry</a> on <a href="http://maven.apache.org/">Maven</a> vs <a href="http://ant.apache.org/">Ant</a>. Since then, I have continued to use <a href="http://ant.apache.org/">Ant</a> while periodically taking yet another look at <a href="http://maven.apache.org/">Maven</a>.</p>

<p>This week, I came across this <a href="http://beust.com/weblog/archives/000244.html">post</a> on Otaku talking about keeping your <a href="http://ant.apache.org/">Ant</a> builds maintainable using <code>&lt;import&gt;</code> and <code>&lt;macrodef&gt;</code>. Greater maintainability seems to be one of the reasons <a href="http://maven.apache.org/">Maven</a> was created: allowing you to avoid creating build target spaghetti by describing the project and applying standard <em>goals</em>. These new <a href="http://ant.apache.org/">Ant</a> features can provide this maintainability, while keeping all the flexibility we&#8217;ve grown accustomed to.</p>

<p>Cedric&#8217;s post then led me to this <a href="http://www.almaer.com/blog/archives/000707.html">comment thread</a> on techno.blog(&#8220;Dion&#8221;) where a good discussion is taking place.</p>

<p>Finally, I can no longer remember how I got there, but dependancy management tools for <a href="http://ant.apache.org/">Ant</a> came up. TSS has an <a href="http://www.theserverside.com/articles/content/Savant/article.html</macrodef>article</a> on Savant, part of <a href="http://www.inversoft.com/">Inversoft</a>&#8216;s <a href="https://verge.dev.java.net/">Verge</a> project and a <a href="http://www.mallim.per.sg/archives/2005/02/20/ant-dependency-resolver/">post on Mallim Ink</a> pointed me to Jayasoft&#8217;s <a href="http://www.jayasoft.fr/org/modules/ivy/overview.php">Ivy</a> project. Both projects look very interesting; I think I will try out <a href="http://www.jayasoft.fr/org/modules/ivy/overview.php">Ivy</a> shortly.</p>

<p><strong>Update:</strong> Colin <a href="http://blog.exis.com/colin/archives/2005/03/10/ivy-is-everything-maven-should-havecould-have-been-25-years-ago/">writes</a> about <a href="http://www.jayasoft.fr/org/modules/ivy/overview.php">Ivy</a> and seems very positive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2005/02/20/maven-vs-ant-reloaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NailGun Released</title>
		<link>http://www.sherman.ca/archives/2004/11/21/nailgun-released/</link>
		<comments>http://www.sherman.ca/archives/2004/11/21/nailgun-released/#comments</comments>
		<pubDate>Sun, 21 Nov 2004 19:59:46 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false">http://www.sherman.ca/2004/11/21/nailgun-released/</guid>
		<description><![CDATA[Martian Software was talking about NailGun way back in January of 2003 when I emailed them asking about it. I received a message today from Marty Lamb: If you are receiving this, you have expressed an interest at some point &#8230; <a href="http://www.sherman.ca/archives/2004/11/21/nailgun-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Martian Software was talking about <a href="http://www.martiansoftware.com/nailgun">NailGun</a> way back in January of 2003 when I emailed them asking about it. I received a message today from Marty Lamb:</p>

<pre><code>If you are receiving this, you have expressed an interest at some point
in a notification when NailGun is available.

Well, it's available.

If it's been so long that you don't remember what it is, NailGun is a
client, server, and protocol for running Java programs within a
persistent JVM, eliminating the JVM startup time.  I appreciate your
patience with the project as I have been swamped with other priorities
for some time now.

Although there are no known issues, there is still some work to be
done.  Most importantly, I need to compile Windows and OSX binaries for
the client.  If you can provide any assistance with this I'd be most
grateful.

More information, a quick start manual, javadocs, and downloads are
available from http://www.martiansoftware.com/nailgun.  There's also
information for joining the NailGun mailing list.  The fact that you are
receiving this message does NOT mean you have been added to the list.

This is a one-time mailing.  If it's unwelcome, you have my sincere
apologies.

- Marty

--
Marty Lamb
Martian Software, Inc.
mlamb at martiansoftware dot com
</code></pre>

<p>I&#8217;m quite excited about <a href="http://www.martiansoftware.com/nailgun">NailGun</a> for use in writing trivial command-line Unix scripts in Java. Going to download it and build a <a href="http://www.apple.com/macosx/">Mac OS X</a> binary while I&#8217;m at it too.</p>

<p><strong>Update:</strong> Runs nicely on my system, now to explore a bit.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sherman.ca/archives/2004/11/21/nailgun-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

