﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Samuel Learn,Samuel Say-文章分类-15 敏捷开发</title><link>http://www.blogjava.net/nobody_am/category/2025.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 04 Jun 2007 06:14:34 GMT</lastBuildDate><pubDate>Mon, 04 Jun 2007 06:14:34 GMT</pubDate><ttl>60</ttl><item><title>Maven2的Plugin一览表</title><link>http://www.blogjava.net/nobody_am/articles/121671.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sun, 03 Jun 2007 10:55:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121671.html</guid><description><![CDATA[<h2>Available Plugins</h2>
<p>Maven is - at its heart - a plugin
execution framework; all work is done by plugins. Looking for a
specific goal to execute? This page lists the core plugins and others.</p>
<p>To see the most up-to-date list browse the Maven repository at <a href="http://repo1.maven.org/maven2/" class="externalLink">http://repo1.maven.org/maven2/</a>, specifically the <a href="http://repo1.maven.org/maven2/org/apache/maven/plugins/" class="externalLink">
<tt>org/apache/maven/plugins</tt></a> subfolder. <em>(Plugins are organized according to a directory structure that resembles the standard Java package naming convention)</em></p>
<table boder="1" bgcolor="#ffffff" border="1">
    <tbody>
        <tr class="a">
            <td align="left"><strong>Plugin</strong></td>
            <td align="left"><strong>Version</strong></td>
            <td align="left"><strong>Description</strong></td>
        </tr>
        <tr id="" class="b" align="left" valign="middle">
            <td align="left"><strong>core plugins</strong></td>
            <td align="left"><br></td>
            <td align="left"><em>Plugins corresponding to default core phases (ie. clean, compile). They may have muliple goals as well.</em></td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-clean-plugin/">
            <tt>clean</tt></a></td>
            <td align="left">2.1.1</td>
            <td align="left">Clean up after the build.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-compiler-plugin/">
            <tt>compiler</tt></a></td>
            <td align="left">2.0.2</td>
            <td align="left">Compiles Java sources.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-deploy-plugin/">
            <tt>deploy</tt></a></td>
            <td align="left">2.3</td>
            <td align="left">Deploy the built artifact to the remote repository.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-install-plugin/">
            <tt>install</tt></a></td>
            <td align="left">2.1</td>
            <td align="left">Install the built artifact into the local repository.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-resources-plugin/">
            <tt>resources</tt></a></td>
            <td align="left">2.2</td>
            <td align="left">Copy the resources to the output directory for including in the JAR.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-site-plugin/">
            <tt>site</tt></a></td>
            <td align="left">2.0-beta-5</td>
            <td align="left">Generate a site for the current project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-surefire-plugin/">
            <tt>surefire</tt></a></td>
            <td align="left">2.3</td>
            <td align="left">Run the Junit tests in an isolated classloader.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-verifier-plugin/">
            <tt>verifier</tt></a></td>
            <td align="left">1.0-beta-1</td>
            <td align="left">Useful for integration tests - verifies the existence of certain conditions.</td>
        </tr>
        <tr class="a">
            <td align="left"><strong>packaging types / tools</strong></td>
            <td align="left"><br></td>
            <td align="left"><em>These plugins relate to packaging respective artifact types.</em></td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-ear-plugin/">
            <tt>ear</tt></a></td>
            <td align="left">2.3</td>
            <td align="left">Generate an EAR from the current project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-ejb-plugin/">
            <tt>ejb</tt></a></td>
            <td align="left">2.1</td>
            <td align="left">Build an EJB (and optional client) from the current project.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-jar-plugin/">
            <tt>jar</tt></a></td>
            <td align="left">2.1</td>
            <td align="left">Build a JAR from the current project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-rar-plugin/">
            <tt>rar</tt></a></td>
            <td align="left">2.2</td>
            <td align="left">Build a RAR from the current project.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-war-plugin/">
            <tt>war</tt></a></td>
            <td align="left">2.0.2</td>
            <td align="left">Build a WAR from the current project.</td>
        </tr>
        <tr class="a">
            <td align="left"><strong>reporting</strong></td>
            <td align="left"><br></td>
            <td align="left"><em>Plugins which generate reports, are configured as reports in the POM and run under the site generation lifecycle.</em></td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-changelog-plugin/">
            <tt>changelog</tt></a></td>
            <td align="left">2.0</td>
            <td align="left">Generate a list of recent changes from your SCM.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-changes-plugin/">
            <tt>changes</tt></a></td>
            <td align="left">2.0-beta-2</td>
            <td align="left">Generate a report from issue tracking or a change document.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-checkstyle-plugin/">
            <tt>checkstyle</tt></a></td>
            <td align="left">2.1</td>
            <td align="left">Generate a checkstyle report.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-clover-plugin/">
            <tt>clover</tt></a></td>
            <td align="left">2.3</td>
            <td align="left">Generate a Clover report.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-doap-plugin/">
            <tt>doap</tt></a></td>
            <td align="left">1.0-beta-1</td>
            <td align="left">Generate a Description of a Project (DOAP) file from a POM.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-docck-plugin/">
            <tt>docck</tt></a></td>
            <td align="left">1.0-beta-1</td>
            <td align="left">Documentation checker plugin.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-javadoc-plugin/">
            <tt>javadoc</tt></a></td>
            <td id="" class="" align="left" valign="middle">2.2</td>
            <td align="left">Generate Javadoc for the project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-jxr-plugin/">
            <tt>jxr</tt></a></td>
            <td align="left">2.1</td>
            <td align="left">Generate a source cross reference.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-pmd-plugin/">
            <tt>pmd</tt></a></td>
            <td align="left">2.2</td>
            <td align="left">Generate a PMD report.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-project-info-reports-plugin/">
            <tt>project-info-reports</tt></a></td>
            <td align="left">2.0.1</td>
            <td align="left">Generate a standard project reports.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-surefire-report-plugin/">
            <tt>surefire-report</tt></a></td>
            <td align="left">2.3</td>
            <td align="left">Generate a report based on the results of unit tests.</td>
        </tr>
        <tr class="a">
            <td align="left"><strong>tools</strong></td>
            <td align="left"><br></td>
            <td align="left"><em>These are miscellaneous tools available through Maven by default.</em></td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-ant-plugin/">
            <tt>ant</tt></a></td>
            <td align="left">2.0-beta-1</td>
            <td align="left">Generate an Ant build file for the project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-antlr-plugin/">
            <tt>antlr</tt> </a></td>
            <td align="left">2.0-beta-1</td>
            <td align="left">Generate sources from an Antlr grammar.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-antrun-plugin/">
            <tt>antrun</tt></a></td>
            <td align="left">1.1</td>
            <td align="left">Run a set of ant tasks from a phase of the build.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-archetype-plugin/">
            <tt>archetype</tt></a></td>
            <td align="left">1.0-alpha-4</td>
            <td align="left">Generate a skeleton project structure from an archetype.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-assembly-plugin/">
            <tt>assembly</tt></a></td>
            <td align="left">2.2-beta-1</td>
            <td align="left">Build an assembly (distribution) of sources and/or binaries.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-dependency-plugin/">
            <tt>dependency</tt></a></td>
            <td align="left">2.0-alpha-4</td>
            <td align="left">Dependency manipulation (copy, unpack) and analysis.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-enforcer-plugin/">
            <tt>enforcer</tt></a></td>
            <td align="left">1.0-alpha-1</td>
            <td align="left">Environmental constraint checking (Maven Version, JDK etc).</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-gpg-plugin/">
            <tt>gpg</tt></a></td>
            <td align="left">1.0-alpha-3</td>
            <td align="left">Create signatures for the artifacts and poms</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-help-plugin/">
            <tt>help</tt></a></td>
            <td align="left">2.0.1</td>
            <td align="left">Get information about the working environment for the project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-invoker-plugin/">
            <tt>invoker</tt></a></td>
            <td align="left">1.0</td>
            <td align="left">Run a set of Maven projects and verify the output</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-one-plugin/">
            <tt>one</tt></a></td>
            <td align="left">1.0</td>
            <td align="left">A plugin for interacting with legacy Maven 1.x repositories and builds.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-plugin-plugin/">
            <tt>plugin</tt></a></td>
            <td align="left">2.2</td>
            <td align="left">Create a Maven plugin descriptor for any Mojo's found in the source tree, to include in the JAR.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-release-plugin/">
            <tt>release</tt></a></td>
            <td align="left">2.0-beta-4</td>
            <td align="left">Release the current project - updating the POM and tagging in the SCM.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-remote-resources-plugin/">
            <tt>remote-resources</tt></a></td>
            <td align="left">1.0-alpha-4</td>
            <td align="left">Copy remote resources to the output directory for inclusion in the artifact.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-repository-plugin/">
            <tt>repository</tt></a></td>
            <td align="left">2.0</td>
            <td align="left">Plugin to help with repository-based tasks.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/scm/plugins/">
            <tt>scm</tt></a></td>
            <td align="left">1.0-beta-4</td>
            <td align="left">Generate a SCM for the current project.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-source-plugin/">
            <tt>source</tt></a></td>
            <td align="left">2.0.2</td>
            <td align="left">Build a JAR of sources for use in IDEs and distribution to the repository.</td>
        </tr>
        <tr class="a">
            <td align="left"><strong>IDEs</strong></td>
            <td align="left"><br></td>
            <td align="left"><em>Plugins that simplify integration with integrated developer environments.</em></td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-eclipse-plugin/">
            <tt>eclipse</tt></a></td>
            <td align="left">2.3</td>
            <td align="left">Generate an Eclipse project file for the current project.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://maven.apache.org/plugins/maven-idea-plugin/">
            <tt>idea</tt></a></td>
            <td align="left">2.0</td>
            <td align="left">Create/update an IDEA workspace for the current project (individual modules are created as IDEA modules)</td>
        </tr>
    </tbody>
</table>
<p>There are also many plug-ins available at the <a href="http://mojo.codehaus.org/" class="externalLink"> Mojo</a> project at Codehaus. To see the most up-to-date list browse the Codehaus repository at <a href="http://repository.codehaus.org/" class="externalLink">http://repository.codehaus.org/</a>, specifically the <a href="http://repository.codehaus.org/org/codehaus/mojo/" class="externalLink">
<tt>org/codehaus/mojo</tt></a> subfolder. Here are a few common ones:</p>
<table class="bodyTable" border="1">
    <tbody>
        <tr class="b">
            <td align="left"><strong>Plugin</strong></td>
            <td align="left"><strong>Version</strong></td>
            <td align="left"><strong>Description</strong></td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://mojo.codehaus.org/build-helper-maven-plugin/" class="externalLink">
            <tt>build-helper</tt></a></td>
            <td align="left">1.0</td>
            <td align="left">Attach extra artifacts and source folders to build.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://mojo.codehaus.org/castor-maven-plugin/" class="externalLink">
            <tt>castor</tt></a></td>
            <td align="left">1.0</td>
            <td align="left">Generate sources from an XSD using Castor.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://mojo.codehaus.org/javacc-maven-plugin/" class="externalLink">
            <tt>javacc</tt></a></td>
            <td align="left">2.1</td>
            <td align="left">Generate sources from a JavaCC grammer.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://mojo.codehaus.org/jdepend-maven-plugin/" class="externalLink">
            <tt>jdepend</tt></a></td>
            <td align="left">2.0-beta-1</td>
            <td align="left">Generate a report on code metrics using JDepend.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://mojo.codehaus.org/maven-native/native-maven-plugin/" class="externalLink">
            <tt>native</tt></a></td>
            <td align="left">1.0-alpha-2</td>
            <td align="left">Compiles C and C++ code with native compilers.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://mojo.codehaus.org/sql-maven-plugin/" class="externalLink">
            <tt>sql</tt></a></td>
            <td align="left">1.0</td>
            <td align="left">Executes SQL scripts from files or inline.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://mojo.codehaus.org/taglist-maven-plugin/" class="externalLink">
            <tt>taglist</tt></a></td>
            <td align="left">2.0</td>
            <td align="left">Generate a list of tasks based on tags in your code.</td>
        </tr>
    </tbody>
</table>
<p>A number of other projects provide their own Maven2 plugins. This includes:</p>
<table class="bodyTable" border="1">
    <tbody>
        <tr class="b">
            <td align="left"><strong>Plugin</strong></td>
            <td align="left"><strong>Description</strong></td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://cargo.codehaus.org/Maven2+plugin" class="externalLink">
            <tt>cargo</tt></a></td>
            <td align="left">Start/stop/configure J2EE containers and deploy to them.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://ws.apache.org/jaxme/mp/" class="externalLink">
            <tt>jaxme</tt></a></td>
            <td align="left">Use the JaxMe JAXB implementation to generate Java sources from XML schema.</td>
        </tr>
        <tr class="a">
            <td align="left"><a href="http://jetty.mortbay.org/maven-plugin/howto.html" class="externalLink">
            <tt>jetty</tt></a></td>
            <td align="left">Run a Jetty container for rapid webapp development.</td>
        </tr>
        <tr class="b">
            <td align="left"><a href="http://www.triemax.com/products/jalopy/manual/plugin-maven.html" class="externalLink">
            <tt>jalopy</tt></a></td>
            <td align="left">Use Jalopy to format your source code</td>
        </tr>
    </tbody>
</table>
<br>    <img src ="http://www.blogjava.net/nobody_am/aggbug/121671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 18:55 <a href="http://www.blogjava.net/nobody_am/articles/121671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant把一个目录下的某些文件按结构复制到另一个目录下</title><link>http://www.blogjava.net/nobody_am/articles/121660.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sun, 03 Jun 2007 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121660.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&nbsp;把src/main/java目录和子目录下的xml和properties<br>文件按照原目录的结构复制导${maven.build.output}标识的目录里&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">patternset&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="meta.files"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">include&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="**/*.xml"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">include&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="**/*.properties"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">patternset</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="copymetafiles"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">copy&nbsp;</span><span style="color: #ff0000;">todir</span><span style="color: #0000ff;">="${maven.build.output}"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">dir</span><span style="color: #0000ff;">="src/main/java"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">patternset&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="meta.files"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fileset</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">copy</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span></div>
<br><img src ="http://www.blogjava.net/nobody_am/aggbug/121660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 17:51 <a href="http://www.blogjava.net/nobody_am/articles/121660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Archetype of maven是哪路神仙？</title><link>http://www.blogjava.net/nobody_am/articles/121656.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sun, 03 Jun 2007 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121656.html</guid><description><![CDATA[Archetype is a Maven project templating toolkit. An archetype is defined as <em> an original pattern or model from which all other things of the same kind are made</em> . <br><br>
<p>Creating an archetype is a pretty straight forward process. An
archetype is a very simple plugin, that contains the project prototype
you wish to create. An archetype is made up of: </p>
<ul>
    <li>an archetype descriptor (
    <tt>archetype.xml</tt> in directory:
    <tt>src/main/resources/META-INF/</tt>).
    It lists all the files that will be contained in the archetype and
    categorizes them so they can be processed correctly by the archetype
    generation mechanism.</li>
    <li>the prototype files that are copied by the archetype (directory:
    <tt>src/main/resources/archetype-resources/</tt>)</li>
    <li>the prototpye pom (
    <tt>pom.xml</tt> in:
    <tt>src/main/resources/archetype-resources</tt>)</li>
    <li>a pom for the archetype (
    <tt>pom.xml</tt> in the archetype's root directory).</li>
</ul>
<p>To create an archetype follow these steps:</p>
<div class="section">
<h3>1. Create a new project and pom.xml for the archetype plugin</h3>
<p>An example
<tt>pom.xml</tt> for an archetype plugin looks as follows: </p>
<div class="source">
<pre>&lt;project&gt;<br>  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>  &lt;groupId&gt;my.groupId&lt;/groupId&gt;<br>  &lt;artifactId&gt;my-archetype-id&lt;/artifactId&gt;<br>  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br>  &lt;packaging&gt;maven-plugin&lt;/packaging&gt;<br>&lt;/project&gt;<br><br></pre>
</div>
<p>All you need to specify is a
<tt>groupId</tt>,
<tt>artifactId</tt> and
<tt>version</tt>. These three parameters will be needed later for invoking the archetype via
<tt>archetype:create</tt> from the commandline. </p>
</div>
<div class="section">
<h3>2. Create the archetype descriptor</h3>
<p>The archetype descriptor is a file called
<tt>archetype.xml</tt> which must be located in
<tt>src/main/resources/META-INF/</tt> An example for an archetype descriptor can be found in the quickstart archetype: </p>
<div class="source">
<pre>&lt;archetype&gt;<br>  &lt;id&gt;quickstart&lt;/id&gt;<br>  &lt;sources&gt;<br>    &lt;source&gt;src/main/java/App.java&lt;/source&gt;<br>  &lt;/sources&gt;<br>  &lt;testSources&gt;<br>    &lt;source&gt;src/test/java/AppTest.java&lt;/source&gt;<br>  &lt;/testSources&gt;<br>&lt;/archetype&gt;<br><br></pre>
</div>
<p>The
<tt>&lt;id&gt;</tt> tag should be the same as the
<tt>artifactId</tt> in the archetype
<tt>pom.xml</tt>. </p>
<p>An optional
<tt>&lt;allowPartial&gt;true&lt;/allowPartial&gt;</tt> tag makes it possible to run the
<tt>archetype:create</tt> even on existing projects. </p>
<p>The
<tt>&lt;sources&gt;</tt>,
<tt>&lt;resources&gt;</tt>,
<tt>&lt;testResources&gt;</tt> and
<tt>&lt;siteResources&gt;</tt> tags represent the different sections of the project: </p>
<ul>
    <li>
    <tt>&lt;sources&gt;</tt> =
    <tt>src/main/java</tt></li>
    <li>
    <tt>&lt;resources&gt;</tt> =
    <tt>src/main/resources</tt></li>
    <li>
    <tt>&lt;testSources&gt;</tt> =
    <tt>src/test/java</tt></li>
    <li>
    <tt>&lt;testResources&gt;</tt> =
    <tt>src/test/resources</tt></li>
    <li>
    <tt>&lt;siteResources&gt;</tt> =
    <tt>src/site</tt> </li>
</ul>
<p>
<tt>&lt;sources&gt;</tt> and
<tt>&lt;testSources&gt;</tt> can contain
<tt>&lt;source&gt;</tt> elements that specify a source file. </p>
<p>
<tt>&lt;testResources&gt;</tt> and
<tt>&lt;siteResources&gt;</tt> can contain
<tt>&lt;resource&gt;</tt> elements that specify a resource file. </p>
<p>Place other resources such as the ones in the
<tt>src/main/webapp</tt> directory inside the
<tt>&lt;resources&gt;</tt> tag.</p>
<p>At this point one can only specify individual files to be created but not empty directories. </p>
<p>Thus the quickstart archetype shown above defines the following directory structure: </p>
<div class="source">
<pre>archetype<br>|-- pom.xml<br>`-- src<br>    `-- main<br>        `-- resources<br>            |-- META-INF<br>            |   `-- archetype.xml<br>            `-- archetype-resources<br>                |-- pom.xml<br>                `-- src<br>                    |-- main<br>                    |   `-- java<br>                    |       `-- App.java<br>                    `-- test<br>                        `-- java<br>                            `-- AppTest.java<br><br></pre>
</div>
</div>
<div class="section">
<h3>3. Create the prototype files and the prototype pom.xml</h3>
<p>The next component of the archetype to be created is the prototype
<tt>pom.xml</tt>. Any
<tt>pom.xml</tt> will do, just don't forget to the set
<tt>artifactId</tt> and
<tt>groupId</tt> as variables (
<tt>${artifactId}</tt> /
<tt>${groupId}</tt> ). Both variables will be initialized from the commandline when calling
<tt>archetype:create</tt>. </p>
<p>An example for a prototype
<tt>pom.xml</tt> is: </p>
<div class="source">
<pre>&lt;project&gt;<br>  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>  &lt;groupId&gt;${groupId}&lt;/groupId&gt;<br>  &lt;artifactId&gt;${artifactId}&lt;/artifactId&gt;<br>  &lt;packaging&gt;jar&lt;/packaging&gt;<br>  &lt;version&gt;${version}&lt;/version&gt;<br>  &lt;name&gt;A custom project&lt;/name&gt;<br>  &lt;url&gt;http://www.myorganization.org&lt;/url&gt;<br>  &lt;dependencies&gt;<br>    &lt;dependency&gt;<br>      &lt;groupId&gt;junit&lt;/groupId&gt;<br>      &lt;artifactId&gt;junit&lt;/artifactId&gt;<br>      &lt;version&gt;3.8.1&lt;/version&gt;<br>      &lt;scope&gt;test&lt;/scope&gt;<br>    &lt;/dependency&gt;<br>  &lt;/dependencies&gt;<br>&lt;/project&gt;<br><br></pre>
</div>
</div>
<div class="section">
<h3>4. Install and run the archetype</h3>
<p>Now you are ready to install the archetype: </p>
<div class="source">
<pre>mvn install <br><br></pre>
</div>
<p>Now that you have created an archetype you can try it on
your local system by using the following command. In this command, you
need to specify the full information about the archetype you want to
use (its
<tt>groupId</tt>, its
<tt>artifactId</tt>, its
<tt>version</tt>) and the information about the new project you want to create (
<tt>artifactId</tt> and
<tt>groupId</tt>).
Don't forget to include the version of your archetype (if you don't
include the version, you archetype creation may fail with a message
that version:RELEASE was not found) </p>
<div class="source">
<pre>mvn archetype:create                                    \<br>  -DarchetypeGroupId=&lt;archetype-groupId&gt;                \<br>  -DarchetypeArtifactId=&lt;archetype-artifactId&gt;          \ <br>  -DarchetypeVersion=&lt;archetype-version&gt;                \<br>  -DgroupId=&lt;my.groupid&gt;                                \<br>  -DartifactId=&lt;my-artifactId&gt;   <br><br></pre>
</div>
<p>Once you are happy with the state of your archetype you
can deploy (or submit it to ibiblio) it as any other artifact and the
archetype will then be available to any user of Maven.</p>
</div>
<div class="section">
<h3>Alternative way to start creating your Archetype</h3>
<p>Instead of manually creating the directory structure needed for an archetype, simply use </p>
<div class="source">
<pre>mvn archetype:create <br>  -DgroupId=[your project's group id]<br>  -DartifactId=[your project's artifact id]<br>  -DarchetypeArtifactId=maven-archetype-archetype<br></pre>
</div>
<p>Afterwhich, you can now customize the contents of the
<tt>archetype-resources</tt> directory, and
<tt>archetype.xml</tt>, then, proceed to Step#4 (Install and run the archetype plugin).</p>
</div>
<br><img src ="http://www.blogjava.net/nobody_am/aggbug/121656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 17:43 <a href="http://www.blogjava.net/nobody_am/articles/121656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Building Web Applications with Maven 2</title><link>http://www.blogjava.net/nobody_am/articles/121655.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sun, 03 Jun 2007 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121655.html</guid><description><![CDATA[<h2>
Building Web Applications with Maven 2</h2>
by <a href="http://today.java.net/pub/au/13">Will Iverson</a><br>
03/01/2007<br>
<ul>
    <li><strong>  Contents</strong>  </li>
    <li><a href="http://today.java.net/lpt/a/355#getting-started">Getting Started</a></li>
    <li><a href="http://today.java.net/lpt/a/355#maven-2-commands">Maven 2 Commands</a></li>
    <li><a href="http://today.java.net/lpt/a/355#maven-2-versus-ant">Maven 2 Versus Ant?</a></li>
    <li><a href="http://today.java.net/lpt/a/355#adding-some-business-logic">Adding Some Business Logic</a></li>
    <li><a href="http://today.java.net/lpt/a/355#creating-the-war-file">Creating the WAR file</a></li>
    <li><a href="http://today.java.net/lpt/a/355#tying-together-the-logic-and-web-application">Tying Together the Logic and Web Application</a></li>
    <li><a href="http://today.java.net/lpt/a/355#repositories">Repositories</a></li>
    <li><a href="http://today.java.net/lpt/a/355#summary">Summary</a></li>
    <li><a href="http://today.java.net/lpt/a/355#resources">Resources</a></li>
</ul>
<p>You may have heard of Maven 2--it's often touted by
technologists as a replacement for Ant. You may have even taken
some time to browse around on the <a href="http://maven.apache.org/">Maven 2 site</a>, but
maybe the documentation has left you a little bit unclear on where and
how to go about getting started.</p>
<p>In this article, we will take a look at using Maven 2 to help
build a simple web application (a bit of business logic in a JAR
and a JSP-based web application). By the end of this article, you
should feel comfortable working with Maven 2, and ready to start
using it as a much more satisfactory tool than Ant (or even your
IDE).</p>
<h3 id="getting-started">Getting Started</h3>
<p>These instructions assume that you have installed <a href="http://java.sun.com/">Java 5</a> and <a href="http://maven.apache.org/download.html">Maven
2</a>. The following two commands shown should work at your command
line:</p>
<pre><code>C:\&gt;java -version<br> java version "1.5.0_06"<br> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)<br> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)<br><br>C:\&gt;mvn -v<br>Maven version: 2.0.5</code></pre>
<p>Everything else required for this project will be downloaded for
you automatically by Maven 2 (obviously, a working internet
connection is also required). I used my Windows system to write
this article, but everything here should work fine on Mac OS X,
Linux, Solaris, etc.</p>
<p>From a high level, the project will be organized into two
subprojects (one for the JAR and one for the WAR). Let's start by
creating the base directory for the project. This directory serves
as the base for the other folders.</p>
<pre><code>C:\&gt;mkdir maven2example<br>C:\&gt;cd maven2example<br>C:\maven2example&gt;</code></pre>
<p>Now, let's create the two subprojects. Maven 2 supports the
notion of creating a complete project template with a simple
command. The project templates (called &#8220;archetypes&#8221; in
Maven) shown below are a subset of the <a href="http://maven.apache.org/plugins/maven-archetype-plugin/">full list of archetypes</a> built in to Maven 2.</p>
<table summary="Maven archetypes" border="1" cellpadding="10" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top" width="223">
            <p><strong> Project Template (Archetype)</strong> </p>
            </td>
            <td valign="top" width="367">
            <p><strong> Purpose</strong> </p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="223">
            <p>maven-archetype-archetype</p>
            </td>
            <td valign="top" width="367">
            <p>Create your own project template (archetype).</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="223">
            <p>maven-archetype-j2ee-simple</p>
            </td>
            <td valign="top" width="367">
            <p>Creates a J2EE project (EAR), with directories and subprojects
            for the EJBs, servlets, etc.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="223">
            <p>maven-archetype-mojo</p>
            </td>
            <td valign="top" width="367">
            <p>Create your own Maven 2 plugins.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="223">
            <p>maven-archetype-quickstart</p>
            </td>
            <td valign="top" width="367">
            <p>Simple Java project, suitable for JAR generation. Maven 2
            default.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="223">
            <p>maven-archetype-site</p>
            </td>
            <td valign="top" width="367">
            <p>Documentation-only site, with examples in several formats. You
            can run this archetype on top of an existing Maven 2 project to add
            integrated documentation.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="223">
            <p>maven-archetype-webapp</p>
            </td>
            <td valign="top" width="367">
            <p>Creates a web application project (WAR), with a simple Hello
            World JSP.</p>
            </td>
        </tr>
    </tbody>
</table>
<p>These archetypes are analogous to the sample projects you might
find in your IDE as defaults for standard "New
Project&#8230;" options.</p>
<p>To create a simple Java project, you simply execute the command
as shown.</p>
<pre><code>mvn archetype:create<br>   -DgroupId=[your project's group id]<br>   -DartifactId=[your project's artifact id]</code></pre>
<p>The <code>mvn</code> command invokes the Maven 2 system, in this
case a request to run the <code>archetype</code> plugin with the
<code>create</code> command. The <code>-D</code> commands are simply setting
Java system properties, thereby passing configuration information
to Maven 2. Per the Maven 2 FAQ, the <code>groupID</code> should
follow the package name (reversed DNS of your website), and can
contain subgroups as appropriate. For example, the sample code for
my books might use <code>com.cascadetg.hibernate</code> or
<code>com.cascadetg.macosx</code>. In this case, let's use the
<code>com.attainware.maven2example</code>.</p>
<p>The <code>artifactID</code> is specific to each artifact and by
convention should be the filename, excluding extension. In this
case, we would like to create two artifacts, a JAR file containing
the logic and a WAR file containing the web application. First,
let's create the JAR file using the command as shown below. Maven 2
tends to be quite verbose, and so I have trimmed the output shown
here and and many of the other listings in this article to focus on
the elements of interest.</p>
<pre><code><strong> C:\maven2example&gt;mvn archetype:create<br>       -DgroupId=com.attainware.maven2example<br>     -DartifactId=maven2example_logic<br><br></strong> [INFO]   Scanning for projects...<br>[INFO] Searching repository for plugin with prefix: 'archetype'.<br>[INFO]   -----------------------------------------------------<br>[INFO] Building Maven Default Project<br>   <em> &lt;snip&gt;<br></em> [INFO] Archetype created in dir:   <br>                        C:\maven2example\maven2example_logic<br>[INFO]   -----------------------------------------------------<br>[INFO] BUILD SUCCESSFUL<br>[INFO]   -----------------------------------------------------<br>[INFO] Total time: 1 second<br>[INFO] Finished at: Sun Feb 04 10:42:33 PST 2007<br>[INFO] Final Memory: 4M/8M<br>[INFO]   -----------------------------------------------------<br><br>C:\maven2example&gt;</code></pre>
<p>Looking at the resulting file structure, we can see that Maven 2
has done several things for us. It's created a fairly complete
directory structure, following many best practices for organizing
code. The source code is broken into two directories, one for the
code itself and one for the test cases. The package structure is
taken from the <code>groupId</code>, and is mirrored in both the
main code and the test case directory structure.</p>
<p><img src="http://today.java.net/images/2007/03/image002.jpg" alt="Source for jar project layout" height="246" width="416"><br>
<em> Figure 1. Source for JAR project layout</em> </p>
<p>Clicking through the results, you will see folders and two Java
source files--so far, nothing surprising.</p>
<p>In the root folder, however, we notice a file called <em> pom.xml</em> .</p>
<p><img src="http://today.java.net/images/2007/03/image004.jpg" alt="Maven 2 project file for jar project" height="246" width="432"><br>
<em> Figure 2. Maven 2 project file for JAR project</em> </p>
<p>This file is essentially analogous to an IDE project file: it
contains all of the information about a project, and is the file
that Maven 2 uses to act upon to execute commands. The contents of
<em> pom.xml</em> :</p>
<pre><code>&lt;project xmlns= http://maven.apache.org/POM/4.0.0<br>      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br>        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0   <br>       http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br>     &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>     &lt;groupId&gt;com.attainware.maven2example&lt;/groupId&gt;<br>        &lt;artifactId&gt;maven2example_logic&lt;/artifactId&gt;<br>     &lt;packaging&gt;jar&lt;/packaging&gt;<br>     &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br>     &lt;name&gt;maven2example_logic&lt;/name&gt;<br>     &lt;url&gt;http://maven.apache.org&lt;/url&gt;<br>     &lt;dependencies&gt;<br>       &lt;dependency&gt;<br>         &lt;groupId&gt;junit&lt;/groupId&gt;<br>         &lt;artifactId&gt;junit&lt;/artifactId&gt;<br>           &lt;version&gt;3.8.1&lt;/version&gt;<br>         &lt;scope&gt;test&lt;/scope&gt;<br>       &lt;/dependency&gt;<br>     &lt;/dependencies&gt;<br> &lt;/project&gt;</code></pre>
<p>There really isn't a lot in the standard <em> pom.xml</em>  file. We
can see the <code>groupId</code> and <code>artifactId</code>, that
the project is intended to build a JAR, and that the current
version is to 1.0-SNAPSHOT. The project uses JUnit 3.8.1 for unit
tests. We could change the URL to point to our company or project
website and/or update the version number to something more
appropriate, but for now this is fine. If you are curious, you can
review <a href="http://maven.apache.org/maven-v4_0_0.xsd">the schema for Maven <em> pom.xml</em> </a> files.</p>
<p>Maven 2 makes heavy use of standard directory layouts to reduce
clutter. It assumes that the source code and test code will be
found in the directory created by the project template. By
specifying <a href="http://cvs.peopleware.be/training/maven/maven2/standardDirLayout.html">standard directory layouts</a>, it easier to immediately start work on a project with spending a lot of time relearning the build
process. While it is possible to reconfigure Maven 2 to use custom
directory layouts, I have found that it's generally less work to
simply use the Maven 2 layout. I have converted several projects of
small to medium size from Ant to Maven 2, and found that the size
and complexity of my build files (from custom Ant <em> build.xml</em>
files to Maven 2 <em> pom.xml</em>  files) dropped by an order of magnitude.
By using Maven 2 templates (archetypes) and simply copying source
files into the proper locations, I found that I wound up with much
more comprehensible project structures than the slowly accreted,
custom Ant <em> build.xml</em>  projects. While it is possible to force Maven
2 to fit into arbitrary directory structures, that's probably not
the place to start.</p>
<h3 id="maven-2-commands">Maven 2 Commands</h3>
<p>Maven 2 supports two kinds of commands that can be run on
projects (<em> pom.xml</em>  files). The first type of command is a
<em> plugin</em>  command. Plugin commands include things like "copy a
set of files," "compile a source tree," etc. The other type of
command is a <em> lifecycle</em>  command. A lifecycle command is a
series of plugin commands strung together. For example, the test
lifecycle command might include several plugin commands in a
series.</p>
<p>Let's execute the lifecycle command <code>mvn</code>
<code>test</code> on our <em> pom.xml</em>  file. As can
be seen in the following listing, this command executes several
plugins (additional output omitted for readability).</p>
<pre><code>C:\maven2example\maven2example_logic&gt;mvn test<br><br>[INFO] Scanning for projects...<br>[INFO]   -------------------------------------------------------<br>[INFO] Building maven2example_logic<br>[INFO]    task-segment: [test]<br>[INFO]   -------------------------------------------------------<br><strong> [INFO] [resources:resources]<br>[INFO] [compiler:compile]<br>[INFO] [resources:testResources]<br>[INFO] [compiler:testCompile]<br>[INFO] [surefire:test]<br></strong> [INFO]   ------------------------------------------------------<br>[INFO] BUILD SUCCESSFUL<br><br>C:\maven2example\maven2example_logic&gt;</code></pre>
<p>What we can see is that the <code>mvn test</code> lifecycle
command is bound to several plugins, including
<code>resources</code>, <code>compiler</code>, and
<code>surefire</code>. These plugins in turn are called with
different goals, such as <code>compile</code> or
<code>testCompile</code>. So, by simply calling <code>mvn</code>
with a single lifecycle command, we execute a number of plugins--no additional configuration necessary. If you want to specify a
plugin directly, that's fine. For example:</p>
<pre><code>C:\maven2example\maven2example_logic&gt;mvn compiler:compile<br><br>[INFO] Scanning for projects...<br>[INFO] Searching repository for plugin with prefix: 'compiler'.<br>[INFO] --------------------------------------------------------<br>[INFO] Building maven2example_logic<br>[INFO]    task-segment: [compiler:compile]<br>[INFO] --------------------------------------------------------<br>[INFO] [compiler:compile]<br>[INFO] Nothing to compile - all classes are up to date<br>[INFO] --------------------------------------------------------<br>[INFO] BUILD SUCCESSFUL<br>[INFO] --------------------------------------------------------<br><br>C:\maven2example\maven2example_logic&gt;</code></pre>
<p>Now that we have seen both lifecycle commands and plugin
commands in action, let's look at some of the typical lifecycle
commands.</p>
<table summary="Lifecycle commands" border="1" cellpadding="10" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top" width="163">
            <p>mvn clean</p>
            </td>
            <td valign="top" width="427">
            <p>Cleans out all Maven-2-generated files.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="163">
            <p>mvn compile</p>
            </td>
            <td valign="top" width="427">
            <p>Compiles Java sources.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="163">
            <p>mvn test-compile</p>
            </td>
            <td valign="top" width="427">
            <p>Compiles JUnit test classes.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="163">
            <p>mvn test</p>
            </td>
            <td valign="top" width="427">
            <p>Runs all JUnit tests in the project.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="163">
            <p>mvn package</p>
            </td>
            <td valign="top" width="427">
            <p>Builds the JAR or WAR file for the project.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="163">
            <p>mvn install</p>
            </td>
            <td valign="top" width="427">
            <p>Installs the JAR or WAR file in the local Maven repository (use
            this if you have multiple interdependent local projects).</p>
            </td>
        </tr>
    </tbody>
</table>
<p>A <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html">complete list of lifecycle commands</a> can be found at on the Maven 2 site.</p>
<p>Similarly, here is a list of some of the more popular plugin
commands, analogous to the popular tasks in Ant or commands in an
IDE. Note that a lifecycle command name is a single word, whereas
a plugin command name is broken into a plugin and a specific goal
with a colon:</p>
<table summary="Plugin commands" border="1" cellpadding="10" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top" width="175">
            <p>clean:clean</p>
            </td>
            <td valign="top" width="415">
            <p>Cleans up after the build.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="175">
            <p>compiler:compile</p>
            </td>
            <td valign="top" width="415">
            <p>Compiles Java sources.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="175">
            <p>surefire:test</p>
            </td>
            <td valign="top" width="415">
            <p>Runs the JUnit tests in an isolated classloader.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="175">
            <p>jar:jar</p>
            </td>
            <td valign="top" width="415">
            <p>Creates a JAR file.</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="175">
            <p>eclipse:eclipse</p>
            </td>
            <td valign="top" width="415">
            <p>Generates an Eclipse project file from the <em> pom.xml</em>  file.</p>
            </td>
        </tr>
    </tbody>
</table>
<p>You may want to take some time perusing the <a href="http://maven.apache.org/plugins/index.html">list of plugins</a>
that are available to Maven 2 by default. It is possible to add
additional plugins by either writing them yourself or by grabbing
them from a repository (repositories are discussed later in this
article).</p>
<p>You can configure plugins on a per-project basis by updating
your <em> pom.xml</em>  file. For example, if you wish to force compilation
on Java 5, simply pass in the following option under the build
configuration in the <em> pom.xml</em>  file:</p>
<pre><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" <br>xmlns:xsi=  "http://www.w3.org/2001/XMLSchema-instance" <br>xsi:schemaLocation=  "http://maven.apache.org/POM/4.0.0   <br>http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br>       &lt;build&gt;<br>         &lt;plugins&gt;<br>           &lt;plugin&gt;<br>              &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br>              &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br>              &lt;configuration&gt;<br>                   &lt;source&gt;1.5&lt;/source&gt;<br>                   &lt;target&gt;1.5&lt;/target&gt;<br>              &lt;/configuration&gt;<br>           &lt;/plugin&gt;<br>         &lt;/plugins&gt;<br>       &lt;/build&gt;<br> &lt;/project&gt;</code></pre>
<p>Each <a href="http://maven.apache.org/plugins/index.html">plugin listed on the Maven 2 site</a> includes documentation on the various configuration options available.</p>
<h3 id="maven-2-versus-ant">Maven 2 Versus Ant?</h3>
<p>If you are familiar with Ant, you may be wondering why
lifecycles and plugins are an improvement over targets and tasks.
While you can cleanly separate your Ant targets from the various
directories and artifacts, it's surprisingly difficult to do. For
example, let's say that you have several directories, with several
artifacts (multiple JAR files, which get combined into a WAR, for
example). Every command that you write for each Ant target will
require properties for the source, and various dependencies,
typically passed around via a combination of Ant variables.
Dependencies in particular require a lot of custom handholding,
with JAR files downloaded and managed by hand.</p>
<p>Maven 2, on the other hand, assumes that given a <em> pom.xml</em>  file, you
are probably always going to be doing the same general kind of
things with your code. You are probably going to want to build a
JAR file from that lump of code over <em> there</em> . You are probably
going to want to build a WAR file from that set of files over
<em> there</em> . So those actions (or goals) are written in Java as
reusable chunks of code (plugins). Instead of complicated lumps of
thousands of lines of custom <em> build.xml</em>  files, you just call a
plugin with a specific goal.</p>
<p>There are several advantages to this approach. For one, the
Maven 2 Java-based plugins are a lot smarter than the lower-level
commands found in Ant tasks. You don't have to write custom tasks
that handle compilation, and then have to worry about keeping your
clean task in sync with your compile and packaging tasks; Maven 2
just takes care of this stuff for you.</p>
<p>Another advantage of this model is that it encourages reuse of
plugins in a much more robust way than Ant tasks. Later in this
article, we will show how simply adding a few lines to a <em> pom.xml</em>
file will automatically download and launch <a href="http://mortbay.org/">Jetty</a> (a lightweight
servlet/JSP container), seamlessly installing and running the WAR
file.</p>
<h3 id="adding-some-business-logic">Adding Some Business Logic</h3>
<p>Let's add a tiny bit of pseudo-business logic to our
application. First, we write a simple test cast that looks for a
String, updating <em> C:\maven2example\maven2example_logic\src\test\java\com\attainware\maven2example\AppTest.java</em> .</p>
<pre><code> package com.attainware.maven2example;<br> import junit.framework.Test;<br> import junit.framework.TestCase;<br> import junit.framework.TestSuite;<br> import com.attainware.maven2example.App;<br> <br> public class AppTest extends TestCase<br> {<br>       public void testApp()  <br>       {<br>           assertTrue( App.now().length() &gt; 0 );<br>       }<br> }</code></pre>
<p>Opening the file
<em> C:\maven2example\maven2example_logic\src\main\java\com\attainware\maven2example\App.java</em> ,
we update the contents to:</p>
<pre><code>package com.attainware.maven2example;<br><br>public class App<br>{<br>       public static String now()<br>       {<br>            return new java.util.Date().toString();  <br>       }<br> }</code></pre>
<p>Running the command <code>mvn install</code>, as shown below,
causes several plugins to run (status messages omitted for
readability).</p>
<pre><code> C:\maven2example\maven2example_logic&gt;mvn install<br><br> [INFO] [resources:resources]<br> [INFO] [compiler:compile]<br> [INFO] [resources:testResources]<br> [INFO] [compiler:testCompile]<br> [INFO] [surefire:test]<br> [INFO] [jar:jar]<br> [INFO] [install:install]<br> [INFO] BUILD SUCCESSFUL<br><br> C:\maven2example\maven2example_logic&gt;</code></pre>
<p>By running the <code>mvn install</code> lifecycle command, Maven
2 finishes by installing the JAR file into the local repository,
making this resulting JAR file available to other projects on this
system. This allows this JAR file to be available for inclusion in
our WAR file.</p>
<h3 id="creating-the-war-file">Creating the WAR file</h3>
<p>Now that we have created our JAR file, creating the WAR file is
straightforward--we just pass in a different archetype ID.</p>
<pre><code>C:\maven2example&gt;<strong> mvn archetype:create<br>   -DgroupId=com.attainware.maven2example<br>   -DartifactId=maven2example_webapp<br>   -DarchetypeArtifactId=maven-archetype-webapp</strong> <br><br>[INFO] Scanning for projects...<br>[INFO] Searching repository for plugin with prefix: 'archetype'.<br>[INFO] ---------------------------------------------------------<br>[INFO] Building Maven Default Project<br>[INFO] [archetype:create]<br>[INFO] Archetype created in dir: <br>                        C:\maven2example\maven2example_webapp<br>[INFO] ---------------------------------------------------------<br>[INFO] BUILD SUCCESSFUL<br>[INFO] ---------------------------------------------------------<br><br>C:\maven2example&gt;</code></pre>
<p>As shown in Figure 3, we now have a directory structure you
would expect to see for a WAR. Note that the JAR file is
automatically pulled into the WAR file from the local
repository.</p>
<p><img src="http://today.java.net/images/2007/03/image006.jpg" alt="WAR project directory structure" height="163" width="426"><br>
<em> Figure 3. WAR project directory structure</em> </p>
<p>Simply executing the command <code>mvn package</code> creates
our WAR file (again, omitting most of the status messages besides
the plugin list).</p>
<p>In this case, the <code>mvn package</code> command builds the
WAR file but does not install it into the local repository
(repositories will be discussed later). As you build larger, more
sophisticated projects with more complex dependencies, you may wish
to be more deliberate about using the <code>mvn package</code> and
<code>mvn install</code> commands to control inter-project
dependencies. Because the WAR file is the final artifact we are
creating, we can save a few compute cycles merely by packaging the
WAR file in the local target directory.</p>
<pre><code> C:\maven2example\maven2example_webapp&gt;mvn package<br><br> [INFO] Scanning for projects...<br> [INFO] --------------------------------------------------------<br> [INFO] Building maven2example_webapp Maven Webapp<br> [INFO]    task-segment: [package]<br> [INFO] --------------------------------------------------------<br> [INFO] [resources:resources]<br> [INFO] [compiler:compile]<br> [INFO] [resources:testResources]<br> [INFO] [compiler:testCompile]<br> [INFO] [surefire:test]<br> [INFO] [war:war]<br> [INFO] Building war: <br>         C:\maven2example\maven2example_webapp\<br>             target\maven2example_webapp.war<br> [INFO] -------------------------------------------------------<br> [INFO] BUILD SUCCESSFUL<br> [INFO] -------------------------------------------------------<br><br> C:\maven2example\maven2example_webapp&gt;</code></pre>
<p>As we can see in Figure 4, we now have a WAR file.</p>
<p><img src="http://today.java.net/images/2007/03/image008.jpg" alt="Resulting war file" height="246" width="433"><br>
<em> Figure 4. Resulting WAR file</em> </p>
<p>Now that we have a WAR file, we would like to be able to run the
application. To do this, we simply add the Jetty plugin to the
<em> pom.xml</em>  for this web application as shown:</p>
<pre><code>&lt;project xmlns=  "http://maven.apache.org/POM/4.0.0"<br>   xmlns:xsi=  "http://www.w3.org/2001/XMLSchema-instance"<br>  xsi:schemaLocation=  "http://maven.apache.org/POM/4.0.0   <br>  http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br>     &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>     &lt;groupId&gt;com.attainware.maven2example&lt;/groupId&gt;<br>     &lt;artifactId&gt;maven2example_webapp&lt;/artifactId&gt;<br>     &lt;packaging&gt;war&lt;/packaging&gt;<br>     &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br>     &lt;name&gt;maven2example_webapp   Maven Webapp&lt;/name&gt;<br>     &lt;url&gt;http://maven.apache.org&lt;/url&gt;<br>     &lt;dependencies&gt;<br>       &lt;dependency&gt;<br>         &lt;groupId&gt;junit&lt;/groupId&gt;<br>         &lt;artifactId&gt;junit&lt;/artifactId&gt;<br>           &lt;version&gt;3.8.1&lt;/version&gt;<br>         &lt;scope&gt;test&lt;/scope&gt;<br>       &lt;/dependency&gt;<br>     &lt;/dependencies&gt;<br>     &lt;build&gt;<br>       &lt;finalName&gt;maven2example_webapp&lt;/finalName&gt;<br>         <strong> &lt;plugins&gt;<br>             &lt;plugin&gt;<br>                  &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;<br>                  &lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;<br>             &lt;/plugin&gt;<br>         &lt;/plugins&gt;<br></strong>    &lt;/build&gt;<br> &lt;/project&gt;</code></pre>
<p>By adding the plugins entry with the Jetty information, we can
now run our web application by simply typing the command as shown
below.</p>
<pre><code> C:\maven2example\maven2example_webapp&gt;<strong> mvn jetty:run<br></strong> <br> [INFO] Scanning for projects...<br> [INFO] Searching repository for plugin with prefix: 'jetty'.<br> [INFO]   ----------------------------------------------------<br> [INFO] Building maven2example_webapp Maven Webapp<br> [INFO]    task-segment:   [jetty:run]<br> [INFO]   ----------------------------------------------------<br> [INFO] Preparing jetty:run<br> [INFO] [resources:resources]<br> [INFO] [compiler:compile]<br> [INFO] [jetty:run]<br> [INFO] Starting jetty 6.1.0pre0   ...<br> [INFO] Classpath =   <br>   [file:/C:/maven2example/maven2example_webapp/target/classes/]<br>   2007-02-04 12:41:24.015::INFO:<br>    Started SelectChannelConnector @   0.0.0.0:8080<br> [INFO] Started Jetty Server</code></pre>
<p>We can now open our web browser to <a href="http://localhost:8080/maven2example_webapp/">localhost:8080/maven2example_webapp</a>
to see our web application (as shown in Figure 5). Type
<code>Ctrl</code>-<code>C</code> in the console window to shut down the
server. Note that we didn't have to download and install Jetty
separately--Maven 2 automatically downloads and configures
Jetty.</p>
<p><img src="http://today.java.net/images/2007/03/image010.jpg" alt="Hello world web application" height="183" width="367"><br>
<em> Figure 5. Hello World Web Application</em> </p>
<h3 id="tying-together-the-logic-and-web-application">Tying Together the Logic and Web Application</h3>
<p>Now, we simply have to tie together the logic in our JAR file
and the web application. First, we want to set up a dependency
between our JAR and the web application. This will tell Maven 2
that we want to use this JAR file in our WAR, which will cause
Maven 2 to automatically copy the JAR file when we package our WAR
file.</p>
<p>First, we add the dependency on this other JAR file to our
<em> pom.xml</em>  for the web application as shown below.</p>
<pre><code>&lt;project xmlns=  "http://maven.apache.org/POM/4.0.0"<br> xmlns:xsi=  "http://www.w3.org/2001/XMLSchema-instance" <br> xsi:schemaLocation=  "http://maven.apache.org/POM/4.0.0   <br> http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br>     &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>     &lt;groupId&gt;com.attainware.maven2example&lt;/groupId&gt;<br>     &lt;artifactId&gt;maven2example_webapp&lt;/artifactId&gt;<br>     &lt;packaging&gt;war&lt;/packaging&gt;<br>     &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br>     &lt;name&gt;maven2example_webapp   Maven Webapp&lt;/name&gt;<br>     &lt;url&gt;http://maven.apache.org&lt;/url&gt;<br>     &lt;dependencies&gt;<br>       &lt;dependency&gt;<br>         &lt;groupId&gt;junit&lt;/groupId&gt;<br>         &lt;artifactId&gt;junit&lt;/artifactId&gt;<br>           &lt;version&gt;3.8.1&lt;/version&gt;<br>         &lt;scope&gt;test&lt;/scope&gt;<br>       &lt;/dependency&gt;<br>   <strong>     &lt;dependency&gt;<br>           &lt;groupId&gt;com.attainware.maven2example&lt;/groupId&gt;<br>            &lt;artifactId&gt;maven2example_logic&lt;/artifactId&gt;<br>           &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br>       &lt;/dependency&gt;<br></strong>      &lt;/dependencies&gt;<br>     &lt;build&gt;<br>       &lt;finalName&gt;maven2example_webapp&lt;/finalName&gt;<br>         &lt;plugins&gt;<br>              &lt;plugin&gt;<br>                &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;<br>                &lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;<br>              &lt;/plugin&gt;<br>         &lt;/plugins&gt;<br>     &lt;/build&gt;<br> &lt;/project&gt;</code></pre>
<p>We then update our JSP file to use our fancy new business
logic.</p>
<pre><code>&lt;html&gt;<br> &lt;body&gt;<br> &lt;h2&gt;Fancy Clock&lt;/h2&gt;<br> &lt;%= com.attainware.maven2example.App.now() %&gt;<br> &lt;/body&gt;<br>&lt;/html&gt;</code></pre>
<p>Next, we run the command <code>mvn package</code> to rebuild the
WAR file.</p>
<pre><code> C:\maven2example\maven2example_webapp&gt;mvn package<br><br> [INFO] Scanning for projects...<br> [INFO]   ---------------------------------------------------<br> [INFO] Building maven2example_webapp Maven Webapp<br> [INFO]    task-segment:   [package]<br> [INFO]   ---------------------------------------------------<br> [INFO] [resources:resources]<br> [INFO] [compiler:compile]<br> [INFO] [resources:testResources]<br> [INFO] [compiler:testCompile]<br> [INFO] [surefire:test]<br> [INFO] [war:war]<br> [INFO] Building war:   <br>     C:\maven2example\maven2example_webapp\<br>          target\maven2example_webapp.war<br> [INFO]   ---------------------------------------------------<br> [INFO] BUILD SUCCESSFUL<br> [INFO] -----------------------------------------------------</code></pre>
<p>Notice that the JAR file is now copied into WAR file, as shown
in Figure 6.</p>
<p><img src="http://today.java.net/images/2007/03/image012.jpg" alt="Verifying the jar copied into the war" height="281" width="444"><br>
<em> Figure 6. Verifying the JAR copied into the WAR</em> </p>
<p>When we execute the <code>mvn jetty:run</code> command and view
the results in our browser, we see the results as shown in Figure
7.</p>
<p><img src="http://today.java.net/images/2007/03/image014.jpg" alt="WAR running with business logic from jar" height="224" width="366"><br>
<em> Figure 7. WAR running with business logic from JAR</em> </p>
<p>To recap, we now have two independent projects running on our
system. When we run <code>mvn install</code> on the logic, the JAR
file installed in the local repository will be updated. When we run
<code>mvn package</code> on the web application, it will pick up
the latest copy installed into the local repository.</p>
<p>We would like to be able to run a single command to update both
the JAR file and the WAR file. To do this, we create another
<em> pom.xml</em>  file that invokes both projects.</p>
<pre><code>&lt;project&gt;<br>     &lt;name&gt;Maven 2 Example&lt;/name&gt;<br>         &lt;url&gt;http://www.attainware.com/&lt;/url&gt;<br>     &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>   <br>     &lt;groupId&gt;com.attainware.maven2example&lt;/groupId&gt;<br>        &lt;version&gt;1.0&lt;/version&gt;<br>     &lt;artifactId&gt;maven2example_package&lt;/artifactId&gt;<br>     &lt;packaging&gt;pom&lt;/packaging&gt;<br>   <br>     &lt;modules&gt;<br>       &lt;module&gt;maven2example_logic&lt;/module&gt;<br>       &lt;module&gt;maven2example_webapp&lt;/module&gt;<br>     &lt;/modules&gt;<br> &lt;/project&gt;</code></pre>
<p>This <em> pom.xml</em>  file lives right above the other projects
and serves as a "master" project file.</p>
<p><img src="http://today.java.net/images/2007/03/image016.jpg" alt="Location of master project file" height="299" width="235"><br>
<em> Figure 8. Location of master project file</em> </p>
<p>Now, we can simply execute a single command, <code>mvn install</code>, and do a full build on both projects.</p>
<pre><code><strong> C:\maven2example&gt;mvn install<br></strong> <br> [INFO] Scanning for   projects...<br> [INFO] Reactor build order:<br> [INFO]   maven2example_logic<br> [INFO]   maven2example_webapp Maven Webapp<br> [INFO]   Maven 2   Example<br> [INFO]   -----------------------------------------------------<br> [INFO] Building maven2example_logic<br> [INFO]    task-segment: [install]<br> [INFO]   -----------------------------------------------------<br> [INFO] [resources:resources]<br> [INFO] [compiler:compile]<br> [INFO] [resources:testResources]<br> [INFO] [compiler:testCompile]<br> [INFO] [surefire:test]<br> [INFO] [jar:jar]<br> [INFO] [install:install]<br> [INFO]   -----------------------------------------------------<br> [INFO] Building maven2example_webapp Maven Webapp<br> [INFO]    task-segment:   [install]<br> [INFO]   -----------------------------------------------------<br> [INFO] [resources:resources]<br> [INFO] [compiler:compile]<br> [INFO] [resources:testResources]<br> [INFO] [compiler:testCompile]<br> [INFO] [surefire:test]<br> [INFO] [war:war]<br> [INFO] [install:install]<br> [INFO] [site:attach-descriptor]<br> [INFO] [install:install]<br> [INFO]   -----------------------------------------------------<br> [INFO] Reactor Summary:<br> [INFO]   -----------------------------------------------------<br> [INFO] maven2example_logic   ................ SUCCESS [2.281s]<br> [INFO] maven2example_webapp Maven Webapp .... SUCCESS [0.563s]<br> [INFO] Maven 2 Example   .................... SUCCESS [1.156s]<br> [INFO]   -----------------------------------------------------<br> [INFO] BUILD SUCCESSFUL<br> [INFO] -------------------------------------------------------</code></pre>
<p>To summarize, we now have a project that now compiles and tests
a JAR, which is then built and installed into a WAR, which is then
in turn installed into a local web server (which is downloaded and
automatically configured). All of this with a few tiny
<em> pom.xml</em>  files.</p>
<h3 id="repositories">Repositories</h3>
<p>You may be wondering about the use of the term
"repository." We have glossed over the use of the term,
but in brief, Maven 2 makes use of two kinds of repository: local
and remote. These repositories serve as locations for Maven 2 to
automatically pull dependencies. For example, our <em> pom.xml</em>
file above makes use the local repository for managing the
dependency on the JAR file, and the default Maven 2 remote
repository for managing the dependencies on JUnit and Jetty.</p>
<p>Generally speaking, dependencies come from either the local
repository or remote repositories. The local repository is used by
Maven 2 to store downloaded artifacts from other repositories. The
default location is based on your system. Figure 9 shows the local
repository on my laptop as of the writing of this article.</p>
<p><img src="http://today.java.net/images/2007/03/image018.jpg" alt="Local repository example" height="372" width="343"><br>
<em> Figure 9. Local repository example</em> </p>
<p>If Maven 2 can't resolve a dependency in the local repository,
it will try to resolve the dependency using a remote
repository.</p>
<p>The default remote repository, known as <a href="http://www.ibiblio.org/maven/">Ibiblio</a>,
includes many of the most popular open source packages. You can browse
the wide range of packages on Ibiblio with the URL above and add
dependencies as needed. For example, let's say that you would like to
use Hibernate in your project. Navigating to <a href="http://www.ibiblio.org/maven/org.hibernate/poms/">www.ibiblio.org/maven/org.hibernate/poms</a>,
we can see there are a wide number of releases of Hibernate
available. Opening up <a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.pom">a sample Hibernate <em> pom</em>  file</a>, we can see that we
simply need to add the appropriate <code>groupId</code>,
<code>artifactId</code>, and <code>version</code> entries to our
business logic <em> pom.xml</em>  file (the scope flag tells Maven 2 which
lifecycle is interested in the dependency).</p>
<pre><code>&lt;dependency&gt;<br>        &lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br>        &lt;artifactId&gt;hibernate&lt;/artifactId&gt;<br>        &lt;version&gt;3.2.1.ga&lt;/version&gt;<br>        &lt;scope&gt;compile&lt;/scope&gt;<br> &lt;/dependency&gt;</code></pre>
<p>Simply adding this dependency to the <em> pom.xml</em>  file will
cause Maven 2 to automatically download Hibernate and make the
appropriate JAR files available to both the business logic JAR file
and the WAR file.</p>
<p>You can set up your own remote repository, and add an entry to
the <em> pom.xml</em>  file to look in that repository for artifacts.
This is extremely useful for enterprises that make use of shared
resources (for example, one group may wish to publish JAR files
that are used to access a particular piece of middleware).</p>
<p>Finally, you may instead wish to install your own JARs into the
local repository. For example, if you have a
<em> Simple.jar</em>  file that someone gave you, use the command
shown below (choosing <code>groupId</code> and
<code>artifactId</code> values that are highly likely to be unique
to avoid a namespace collision).</p>
<pre><code>mvn install:install-file<br>     -Dfile=Sample.jar<br>     -DgroupId=uniquesample<br>     -DartifactId=sample_jar<br>     -Dversion=2.1.3b2<br>     -Dpackaging=jar<br>     -DgeneratePom=true</code></pre>
<h3 id="summary">Summary</h3>
<p>In this article, we looked at how a few commands and some tiny
XML files allow us to create, compile, test, bundle, and manage
project dependencies. We built a simple web application and
deployed it to a web server with just a few commands, and we still
haven't touched on many of the features of Maven 2. For example,
additional commands generate integrated Javadocs across multiple
projects, code coverage reports, or even a complete website with
documentation. With luck, this orientation to Maven 2 has given you
enough information to begin the transition. Eventually, tools such
as Eclipse and NetBeans will almost certainly support Maven 2 (or
something like it) natively. In the meantime, you can dramatically
reduce your use of raw Ant (and spend a lot less time fighting XML
build scripts) by switching even small projects over to Maven
2.</p>
<h3 id="resources">Resources</h3>
<ul>
    <li>Source code shown in this article is available for download from <a href="http://www.cascadetg.com/maven">www.cascadetg.com/maven</a>.</li>
    <li>The main <a href="http://maven.apache.org/">Maven 2 site</a></li>
</ul>
<p><em> <a href="http://today.java.net/pub/au/13">Will Iverson</a> is the practice director, Software Development for SolutionsIQ, a Pacific Northwest service provider. </em> </p>
<br> <img src ="http://www.blogjava.net/nobody_am/aggbug/121655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 17:35 <a href="http://www.blogjava.net/nobody_am/articles/121655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant 启动关闭和管理hsqldb的配置</title><link>http://www.blogjava.net/nobody_am/articles/121583.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sat, 02 Jun 2007 19:11:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121583.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="dbmanager"</span><span style="color: #ff0000;">&nbsp;description</span><span style="color: #0000ff;">="Start&nbsp;HSQLDB&nbsp;Manager"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">java&nbsp;</span><span style="color: #ff0000;">classname</span><span style="color: #0000ff;">="org.hsqldb.util.DatabaseManagerSwing"</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fork</span><span style="color: #0000ff;">="yes"</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classpathref</span><span style="color: #0000ff;">="build.classpath"</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;failonerror</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-url"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="jdbc:hsqldb:hsql://localhost/"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="-driver"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">arg&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="org.hsqldb.jdbcDriver"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">java</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="dbstartup"</span><span style="color: #ff0000;">&nbsp;description</span><span style="color: #0000ff;">="Start&nbsp;the&nbsp;Hsqldb&nbsp;database&nbsp;server"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">java&nbsp;</span><span style="color: #ff0000;">classname</span><span style="color: #0000ff;">="org.hsqldb.Server"</span><span style="color: #ff0000;">&nbsp;fork</span><span style="color: #0000ff;">="yes"</span><span style="color: #ff0000;">&nbsp;classpathref</span><span style="color: #0000ff;">="build.classpath"</span><span style="color: #ff0000;">&nbsp;failonerror</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">taskdef&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="shutdownTask"</span><span style="color: #ff0000;">&nbsp;classname</span><span style="color: #0000ff;">="ShutdownTask"</span><span style="color: #ff0000;">&nbsp;classpathref</span><span style="color: #0000ff;">="build.classpath"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="dbshutdown"</span><span style="color: #ff0000;">&nbsp;description</span><span style="color: #0000ff;">="Stop&nbsp;the&nbsp;Hsqldb&nbsp;database&nbsp;server"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">shutdownTask&nbsp;</span><span style="color: #ff0000;">driver</span><span style="color: #0000ff;">="org.hsqldb.jdbcDriver"</span><span style="color: #ff0000;">&nbsp;url</span><span style="color: #0000ff;">="jdbc:hsqldb:hsql://localhost/"</span><span style="color: #ff0000;">&nbsp;userid</span><span style="color: #0000ff;">="sa"</span><span style="color: #ff0000;">&nbsp;password</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlCommand</span><span style="color: #0000ff;">="SHUTDOWN&nbsp;COMPACT"</span><span style="color: #ff0000;">&nbsp;msg</span><span style="color: #0000ff;">="MyShutdownTask"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span></div>
<br>其中shutdownTask依赖于自定义的Task类，代码如下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">ShutdownTask.java</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.sql.Connection;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.sql.DriverManager;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.sql.SQLException;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.sql.Statement;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.tools.ant.BuildException;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.tools.ant.Task;<br>&nbsp;<br></span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;*ShutdownTask:AntTaskforshutdowntheHsqldbserver.<br>&nbsp;*<br>&nbsp;*@authorYuLimin<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>publicclass&nbsp;ShutdownTask&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;Task<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Defaut&nbsp;Value</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;msg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ShutdownTask</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;driver&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">org.hsqldb.jdbcDriver</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">jdbc:hsqldb:hsql://localhost/</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;userid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">sa</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;password&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;sqlCommand&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">SHUTDOWN</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;ShutdownTask()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*ForTest<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*@paramargv<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*@throwsException<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicstaticvoid&nbsp;main(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String[]&nbsp;argv)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;ShutdownTask&nbsp;shutdownTask&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ShutdownTask();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutdownTask.shutdown();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Themethodexecutingthetask<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;execute()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;BuildException<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(msg&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;Begin<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Driver=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getDriver());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">URL=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getUrl());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Userid=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getUserid());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Password=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getPassword());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">SqlCommand=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getSqlCommand());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutdown();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(msg&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;End<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Shutdownthedatabase<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;shutdown()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;statement&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(getDriver());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DriverManager.getConnection(getUrl(),getUserid(),getPassword());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;connection.createStatement();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement.execute(getSqlCommand());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thrownew&nbsp;RuntimeException(e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">finally</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(statement&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statement.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(SQLException&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thrownew&nbsp;RuntimeException(e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(connection&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(SQLException&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thrownew&nbsp;RuntimeException(e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;More&nbsp;accessor&nbsp;method&nbsp;:&nbsp;setter&nbsp;&amp;&nbsp;getter</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;setMsg(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;msg)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.msg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;msg;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;setDriver(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;driver)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.driver&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;driver;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;setPassword(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;password)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.password&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;password;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;setUrl(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;url)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;url;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;setUserid(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;userid)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.userid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;userid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publicvoid&nbsp;setSqlCommand(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;sqlCommand)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.sqlCommand&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqlCommand;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getDriver()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returndriver;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getPassword()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnpassword;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getUrl()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnurl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getUserid()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnuserid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getSqlCommand()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnsqlCommand;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getMsg()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnmsg;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>调用说明：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Classpath&nbsp;declaration&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pathid</span><span style="color: #0000ff;">="hsqldb.classpath"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">filesetdir</span><span style="color: #0000ff;">="${lib.dir}"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">includename</span><span style="color: #0000ff;">="**/hsqldb.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">includename</span><span style="color: #0000ff;">="**/ShutdownTask.jar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fileset</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">path</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Shutdown&nbsp;the&nbsp;Hsqldb&nbsp;database&nbsp;server&nbsp;via&nbsp;ShutdownTask&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">targetname</span><span style="color: #0000ff;">="dbshutdownTask"</span><span style="color: #ff0000;">description</span><span style="color: #0000ff;">="Shutdown&nbsp;the&nbsp;Hsqldb&nbsp;database&nbsp;server&nbsp;via&nbsp;ShutdownTask"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Define&nbsp;ShutdownTask&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">taskdefname</span><span style="color: #0000ff;">="shutdownTask"</span><span style="color: #ff0000;">classname</span><span style="color: #0000ff;">="ShutdownTask"</span><span style="color: #ff0000;">classpathref</span><span style="color: #0000ff;">="hsqldb.classpath"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Call&nbsp;ShutdownTask&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Default&nbsp;ShutdownTask,&nbsp;only&nbsp;like&nbsp;this&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;shutdownTask/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Sample&nbsp;MyShutdownTask&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;shutdownTask&nbsp;driver="org.hsqldb.jdbcDriver"&nbsp;url="jdbc:hsqldb:hsql://localhost/"<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; userid="sa"&nbsp;password=""&nbsp;sqlCommand="SHUTDOWN"&nbsp;msg="MyShutdownTask"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Sample&nbsp;MyShutdownTask&nbsp;SHUTDOWN&nbsp;COMPACT&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&lt;shutdownTask&nbsp;driver="org.hsqldb.jdbcDriver"&nbsp;url="jdbc:hsqldb:hsql://localhost/" <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; userid="sa"&nbsp;password=""&nbsp;sqlCommand="SHUTDOWN&nbsp;COMPACT"&nbsp;msg="MyShutdownTask"/&gt;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Sample&nbsp;MyShutdownTask&nbsp;SHUTDOWN&nbsp;IMMEDIATELY&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">shutdownTaskdriver</span><span style="color: #0000ff;">="org.hsqldb.jdbcDriver"</span><span style="color: #ff0000;">url</span><span style="color: #0000ff;">="jdbc:hsqldb:hsql://localhost/"</span><span style="color: #ff0000;">userid</span><span style="color: #0000ff;">="sa"</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; password</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;">sqlCommand</span><span style="color: #0000ff;">="SHUTDOWN&nbsp;IMMEDIATELY"</span><span style="color: #ff0000;">msg</span><span style="color: #0000ff;">="MyShutdownTask"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span></div>
<br>如果是命令行上启动了hsqldb，直接Ctl+C就可以结束掉它，几秒钟后就生效。<br><br><br><br><br><br><br>  <img src ="http://www.blogjava.net/nobody_am/aggbug/121583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 03:11 <a href="http://www.blogjava.net/nobody_am/articles/121583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把maven2创建项目的编译器改为java5</title><link>http://www.blogjava.net/nobody_am/articles/121580.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sat, 02 Jun 2007 19:02:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121580.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img src="http://www.blogjava.net/Images/dot.gif"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.apache.maven.plugins</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">maven-compiler-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">2.0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.5</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.5</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img src="http://www.blogjava.net/Images/dot.gif"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span></div>
<br>  <img src ="http://www.blogjava.net/nobody_am/aggbug/121580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 03:02 <a href="http://www.blogjava.net/nobody_am/articles/121580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用maven2创建工程</title><link>http://www.blogjava.net/nobody_am/articles/121578.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sat, 02 Jun 2007 19:00:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121578.html</guid><description><![CDATA[命令类似：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">mvn&nbsp;archetype</span><span style="color: #000000;">:</span><span style="color: #000000;">create<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">DgroupId</span><span style="color: #000000;">=</span><span style="color: #000000;">com</span><span style="color: #000000;">.</span><span style="color: #000000;">attainware</span><span style="color: #000000;">.</span><span style="color: #000000;">maven2example<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">DartifactId</span><span style="color: #000000;">=</span><span style="color: #000000;">maven2example_webapp<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">DarchetypeArtifactId</span><span style="color: #000000;">=</span><span style="color: #000000;">maven</span><span style="color: #000000;">-</span><span style="color: #000000;">archetype</span><span style="color: #000000;">-</span><span style="color: #000000;">webapp</span></div>
<span style="font-size: 10pt;">
其中archetypeArtifactId有以下几种选择：<br>
<table x:str="" style="border-collapse: collapse; width: 671px;" border="1" cellpadding="0" cellspacing="0" width="671">
    <col style="width: 215pt;" width="287">
    <col style="width: 288pt;" width="384">
    <tbody>
        <tr style="height: 15.75pt;" height="21">
            <td class="xl24" style="height: 15.75pt; width: 215pt;" height="21" width="287">Project
            Template (Archetype)</td>
            <td class="xl24" style="width: 288pt;" width="384">Purpose</td>
        </tr>
        <tr style="height: 26.25pt;" height="35">
            <td class="xl25" style="height: 26.25pt; width: 215pt;" height="35" width="287">maven-archetype-archetype</td>
            <td class="xl25" style="width: 288pt; color: red;" width="384">Create
            your own project template (archetype).</td>
        </tr>
        <tr style="height: 30pt;" height="40">
            <td class="xl25" style="height: 30pt; width: 215pt;" height="40" width="287">maven-archetype-j2ee-simple</td>
            <td class="xl25" style="width: 288pt;" width="384">Creates
            a J2EE project (EAR), with directories and subprojects for the EJBs,
            servlets, etc.</td>
        </tr>
        <tr style="height: 15.75pt;" height="21">
            <td class="xl25" style="height: 15.75pt; width: 215pt;" height="21" width="287">maven-archetype-mojo</td>
            <td class="xl25" style="width: 288pt;" width="384">Create
            your own Maven 2 plugins.</td>
        </tr>
        <tr style="height: 30pt;" height="40">
            <td class="xl25" style="height: 30pt; width: 215pt;" height="40" width="287">maven-archetype-quickstart</td>
            <td class="xl25" style="width: 288pt;" width="384">Simple
            Java project, suitable for JAR generation. Maven 2 default.</td>
        </tr>
        <tr style="height: 58.5pt;" height="78">
            <td class="xl25" style="height: 58.5pt; width: 215pt;" height="78" width="287">maven-archetype-site</td>
            <td class="xl25" style="width: 288pt;" width="384">Documentation-only
            site, with examples in several formats. You can run this archetype on top of
            an existing Maven 2 project to add integrated documentation.</td>
        </tr>
        <tr style="height: 30pt;" height="40">
            <td class="xl25" style="height: 30pt; width: 215pt;" height="40" width="287">maven-archetype-webapp</td>
            <td class="xl25" style="width: 288pt;" width="384">Creates
            a web application project (WAR), with a simple Hello World JSP.</td>
        </tr>
    </tbody>
</table>
<br></span><br>     <img src ="http://www.blogjava.net/nobody_am/aggbug/121578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 03:00 <a href="http://www.blogjava.net/nobody_am/articles/121578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把jar加入maven依赖库的命令</title><link>http://www.blogjava.net/nobody_am/articles/121577.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sat, 02 Jun 2007 18:50:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121577.html</guid><description><![CDATA[<pre><code>
</code>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">mvn&nbsp;install</span><span style="color: #000000;">:</span><span style="color: #000000;">install</span><span style="color: #000000;">-</span><span style="color: #000000;">file<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">Dfile</span><span style="color: #000000;">=</span><span style="color: #000000;">Sample</span><span style="color: #000000;">.</span><span style="color: #000000;">jar<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">DgroupId</span><span style="color: #000000;">=</span><span style="color: #000000;">uniquesample<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">DartifactId</span><span style="color: #000000;">=</span><span style="color: #000000;">sample_jar<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">Dversion</span><span style="color: #000000;">=</span><span style="color: #800000;">2.1</span><span style="color: #000000;">.</span><span style="color: #000000;">3b2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">Dpackaging</span><span style="color: #000000;">=</span><span style="color: #000000;">jar<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">DgeneratePom</span><span style="color: #000000;">=</span><span style="color: #000000;">true</span></div>
<br></pre>
<br>  <img src ="http://www.blogjava.net/nobody_am/aggbug/121577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 02:50 <a href="http://www.blogjava.net/nobody_am/articles/121577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搜索Maven2的依赖的方法</title><link>http://www.blogjava.net/nobody_am/articles/121576.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Sat, 02 Jun 2007 18:49:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/121576.html</guid><description><![CDATA[例如：搜索c3p0数据库链接池<br>在google中搜索：：site:www.ibiblio.org maven/c3p0
<br>结果中找到配置需要的信息：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">c3p0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">c3p0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">0.9.1.1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">scope</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">compile</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">scope</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&nbsp;&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span></div>
<br><br> <img src ="http://www.blogjava.net/nobody_am/aggbug/121576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-06-03 02:49 <a href="http://www.blogjava.net/nobody_am/articles/121576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit 4.0 Cookbook</title><link>http://www.blogjava.net/nobody_am/articles/101203.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Wed, 28 Feb 2007 11:18:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/101203.html</guid><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<strong>
<span style="font-size: 24pt; color: #33ff33; font-family: 宋体;" lang="EN-US">J</span>
</strong>
<strong>
<span style="font-size: 24pt; color: #cc0000; font-family: 宋体;" lang="EN-US">U</span>
</strong>
<strong>
<span style="font-size: 24pt; font-family: 宋体;" lang="EN-US">nit Cookbook<o:p></o:p></span>
</strong>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Kent Beck, Erich Gamma<o:p></o:p></span>
</p>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
<hr align="center" size="2" width="100%">
</span>
</div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
<br>Here is a short cookbook showing you the steps you can follow in writing and organizing your own tests using JUnit. <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<strong>
<span style="font-size: 18pt; font-family: 宋体;" lang="EN-US">Simple Test Case<o:p></o:p></span>
</strong>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">How do you write testing code? <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">The simplest way is as an expression in a debugger. You can change debug expressions without recompiling, and you can wait to decide what to write until you have seen the running objects. You can also write test expressions as statements which print to the standard output stream. Both styles of tests are limited because they require human judgment to analyze their results. Also, they don't compose nicely- you can only execute one debug expression at a time and a program with too many print statements causes the dreaded "Scroll Blindness". <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JUnit tests do not require human judgment to interpret, and it is easy to run many of them at the same time. When you need to test something, here is what you do: <o:p></o:p></span>
</p>
<ol type="1">
    <li class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;">
    <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Annotate a method with @org.junit.Test <o:p></o:p></span>
    </li>
    <li class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;">
    <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">When you want to check a value, import org.junit.Assert.* statically, call assertTrue() and pass a boolean that is true if the test succeeds <o:p></o:p></span>
    </li>
</ol>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">For example, to test that the sum of two Moneys with the same currency contains a value which is the sum of the values of the two Moneys, write: <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">@Test public void simpleAdd() {<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; Money m12CHF= new Money(12, "CHF");&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; Money m14CHF= new Money(14, "CHF");&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; Money expected= new Money(26, "CHF");&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; Money result= m12CHF.add(m14CHF);&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; assertTrue(expected.equals(result));<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">}<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">If you want to write a test similar to one you have already written, write a Fixture instead. <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<strong>
<span style="font-size: 18pt; font-family: 宋体;" lang="EN-US">Fixture<o:p></o:p></span>
</strong>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">What if you have two or more tests that operate on the same or similar sets of objects? <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Tests need to run against the background of a known set of objects. This set of objects is called a test fixture. When you are writing tests you will often find that you spend more time writing the code to set up the fixture than you do in actually testing values. <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">To some extent, you can make writing the fixture code easier by paying careful attention to the constructors you write. However, a much bigger savings comes from sharing fixture code. Often, you will be able to use the same fixture for several different tests. Each case will send slightly different messages or parameters to the fixture and will check for different results. <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">When you have a common fixture, here is what you do: <o:p></o:p></span>
</p>
<ol type="1">
    <li class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;">
    <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Add a field for each part of the fixture <o:p></o:p></span>
    </li>
    <li class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;">
    <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Annotate a method with @org.junit.Before and initialize the variables in that method <o:p></o:p></span>
    </li>
    <li class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;">
    <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Annotate a method with @org.junit.After to release any permanent resources you allocated in setUp <o:p></o:p></span>
    </li>
</ol>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">For example, to write several test cases that want to work with different combinations of 12 Swiss Francs, 14 Swiss Francs, and 28 US Dollars, first create a fixture: <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">public class MoneyTest {&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; private Money f12CHF;&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; private Money f14CHF;&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; private Money f28USD;&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; @Before public void setUp() {&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f12CHF= new Money(12, "CHF");&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f14CHF= new Money(14, "CHF");&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f28USD= new Money(28, "USD");&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; }<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">}<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Once you have the Fixture in place, you can write as many Test Cases as you'd like. Add as many test methods (annotated with @Test) as you'd like. <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<strong>
<span style="font-size: 18pt; font-family: 宋体;" lang="EN-US">TestRunner<o:p></o:p></span>
</strong>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">How do you run your tests and collect their results? <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Once you have tests, you'll want to run them. JUnit provides tools to define the suite to be run and to display its results. To run tests and see the results on the console, run: <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">org.junit.runner.TextListener.run(TestClass1.class, ...);&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">You make your JUnit 4 test classes accessible to a TestRunner designed to work with earlier versions of JUnit, declare a static method <em>suite</em> that returns a test. <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">public static junit.framework.Test suite() {&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; return new JUnit4TestAdapter(Example.class);&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">}<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<strong>
<span style="font-size: 18pt; font-family: 宋体;" lang="EN-US">Expected Exceptions<o:p></o:p></span>
</strong>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">How do you verify that code throws exceptions as expected? <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Verifying that code completes normally is only part of programming. Making sure the code behaves as expected in exceptional situations is part of the craft of programming too. For example: <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">new ArrayList&lt;Object&gt;().get(0);&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">This code should throw an IndexOutOfBoundsException. The @Test annotation has an optional parameter "expected" that takes as values subclasses of Throwable. If we wanted to verify that ArrayList throws the correct exception, we would write: <o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">@Test(expected= IndexOutOfBoundsException.class) public void empty() {&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; new ArrayList&lt;Object&gt;().get(0);&nbsp;<o:p></o:p></span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">}<o:p></o:p></span>
</p>
<div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center;" align="center">
<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
<hr align="center" size="2" width="100%">
</span>
</div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p><img src ="http://www.blogjava.net/nobody_am/aggbug/101203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2007-02-28 19:18 <a href="http://www.blogjava.net/nobody_am/articles/101203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVSNT＋WinCVS构建简单的CVS应用</title><link>http://www.blogjava.net/nobody_am/articles/35167.html</link><dc:creator>MingIsMe</dc:creator><author>MingIsMe</author><pubDate>Tue, 14 Mar 2006 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/nobody_am/articles/35167.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CVSNT＋WinCVS构建简单的CVS应用&nbsp;前言：在Windows平台上，如何建立CVS服务器？ 如何用WinCVS管理CVS服务器？如何创建用户和分配权限？如何添加工程？如果你对以上几个问题感兴趣，请阅读本文。&nbsp;第一步： 安装软件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装的软件有三个：分别是CVSNT2.0.51d、W...&nbsp;&nbsp;<a href='http://www.blogjava.net/nobody_am/articles/35167.html'>阅读全文</a><img src ="http://www.blogjava.net/nobody_am/aggbug/35167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nobody_am/" target="_blank">MingIsMe</a> 2006-03-14 09:01 <a href="http://www.blogjava.net/nobody_am/articles/35167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>