﻿<?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-Sealyu-随笔分类-Maven</title><link>http://www.blogjava.net/sealyu/category/43349.html</link><description>--- The devil's in the Details</description><language>zh-cn</language><lastBuildDate>Mon, 08 Feb 2010 23:45:17 GMT</lastBuildDate><pubDate>Mon, 08 Feb 2010 23:45:17 GMT</pubDate><ttl>60</ttl><item><title>激活Maven profile的几种方式(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/02/08/312320.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 08 Feb 2010 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/02/08/312320.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/312320.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/02/08/312320.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/312320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/312320.html</trackback:ping><description><![CDATA[<div>
<p>首先简单介绍下 Maven 的 profile 是什么。对于人来说，profile 是指人的肖像，轮廓，比如论坛里每个人注册了帐号后，可以设置自己的 profile，放上照片，介绍等等。对于 Maven 来说又是怎样呢？整个项目定义好了项目对象模型（POM），就像论坛为每个人提供了默认的行为功能，如果我想改变我机器上的 POM 呢？这时就可以使用 profile。下面举个例子：</p>
<div>
<div>
<div>Xml代码 <embed src="http://juvenshun.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%20%20%3Cprofiles%3E%0A%20%20%20%20%3Cprofile%3E%0A%20%20%20%20%20%20%3Cid%3Ejdk16%3C%2Fid%3E%0A%20%20%20%20%20%20%3Cactivation%3E%0A%20%20%20%20%20%20%20%20%3Cjdk%3E1.6%3C%2Fjdk%3E%0A%20%20%20%20%20%20%3C%2Factivation%3E%0A%20%20%20%20%20%20%3Cmodules%3E%0A%20%20%20%20%20%20%20%20%3Cmodule%3Esimple-script%3C%2Fmodule%3E%0A%20%20%20%20%20%20%3C%2Fmodules%3E%0A%20%20%20%20%3C%2Fprofile%3E%0A%20%20%3C%2Fprofiles%3E%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;profiles&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;profile&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;jdk16&lt;/id&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;activation&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;jdk&gt;1.6&lt;/jdk&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/activation&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;modules&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;module&gt;simple-script&lt;/module&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/modules&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/profile&gt;&nbsp;&nbsp;</li>
    <li>&lt;/profiles&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">  &lt;profiles&gt;
&lt;profile&gt;
&lt;id&gt;jdk16&lt;/id&gt;
&lt;activation&gt;
&lt;jdk&gt;1.6&lt;/jdk&gt;
&lt;/activation&gt;
&lt;modules&gt;
&lt;module&gt;simple-script&lt;/module&gt;
&lt;/modules&gt;
&lt;/profile&gt;
&lt;/profiles&gt;
</pre>
<p>这个 profile 的意思是，当机器上的 JDK 为1.6的时候，构建 simple-script 这个子模块，如果是1.5或者1.4，那就不构建，这个 profile 是由环境自动激活的。</p>
<p>我们需要在合适的地方使用合适的 profile ，并且在合适的时候用合适的方式将其激活，你不能在构建服务器上激活非公共的 profile，你也不能要求开发人员写很复杂的命令来使用常规的 profile。因此这里介绍一下几种 profile 的激活方式。</p>
<p>1. 根据环境自动激活。</p>
<p>如前一个例子，当 JDK 为1.6的时候，Maven 就会自动构建 simple-script 模块。除了 JDK 之外，我们还可以根据操作系统参数和 Maven 属性等来自动激活 profile，如：</p>
<div>
<div>
<div>Xml代码 <embed src="http://juvenshun.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%20%20%20%20%3Cprofile%3E%0A%20%20%20%20%20%20%3Cid%3Edev%3C%2Fid%3E%0A%20%20%20%20%20%20%3Cactivation%3E%0A%20%20%20%20%20%20%20%20%3CactiveByDefault%3Efalse%3C%2FactiveByDefault%3E%0A%20%20%20%20%20%20%20%20%3Cjdk%3E1.5%3C%2Fjdk%3E%0A%20%20%20%20%20%20%20%20%3Cos%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cname%3EWindows%20XP%3C%2Fname%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cfamily%3EWindows%3C%2Ffamily%3E%0A%20%20%20%20%20%20%20%20%20%20%3Carch%3Ex86%3C%2Farch%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cversion%3E5.1.2600%3C%2Fversion%3E%0A%20%20%20%20%20%20%20%20%3C%2Fos%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cname%3EmavenVersion%3C%2Fname%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cvalue%3E2.0.5%3C%2Fvalue%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%20%20%20%20%3Cfile%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cexists%3Efile2.properties%3C%2Fexists%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cmissing%3Efile1.properties%3C%2Fmissing%3E%0A%20%20%20%20%20%20%20%20%3C%2Ffile%3E%0A%20%20%20%20%20%20%3C%2Factivation%3E%0A%20%20%20%20%20%20...%0A%20%20%20%20%3C%2Fprofile%3E%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;profile&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;id&gt;dev&lt;/id&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;activation&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeByDefault&gt;false&lt;/activeByDefault&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;jdk&gt;1.5&lt;/jdk&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;os&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;Windows&nbsp;XP&lt;/name&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;family&gt;Windows&lt;/family&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arch&gt;x86&lt;/arch&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;5.1.2600&lt;/version&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/os&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;mavenVersion&lt;/name&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;2.0.5&lt;/value&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;file&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exists&gt;file2.properties&lt;/exists&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;missing&gt;file1.properties&lt;/missing&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/file&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/activation&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;...&nbsp;&nbsp;</li>
    <li>&lt;/profile&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">    &lt;profile&gt;
&lt;id&gt;dev&lt;/id&gt;
&lt;activation&gt;
&lt;activeByDefault&gt;false&lt;/activeByDefault&gt;
&lt;jdk&gt;1.5&lt;/jdk&gt;
&lt;os&gt;
&lt;name&gt;Windows XP&lt;/name&gt;
&lt;family&gt;Windows&lt;/family&gt;
&lt;arch&gt;x86&lt;/arch&gt;
&lt;version&gt;5.1.2600&lt;/version&gt;
&lt;/os&gt;
&lt;property&gt;
&lt;name&gt;mavenVersion&lt;/name&gt;
&lt;value&gt;2.0.5&lt;/value&gt;
&lt;/property&gt;
&lt;file&gt;
&lt;exists&gt;file2.properties&lt;/exists&gt;
&lt;missing&gt;file1.properties&lt;/missing&gt;
&lt;/file&gt;
&lt;/activation&gt;
...
&lt;/profile&gt;
</pre>
<p>2. 通过命令行参数激活。</p>
<p>这是最直接和最简单的方式，比如你定义了一个名为 myProfile 的 profile，你只需要在命令行输入 <strong>mvn clean install -Pmyprofile</strong>
就能将其激活，这种方式的好处很明显，但是有一个很大的弊端，当 profile 比较多的时候，在命令行输入这写 -P 参数会让人觉得厌烦，所以，如果你一直用这种方式，觉得厌烦了，可以考虑使用其它自动激活的方式。</p>
<p>3. 配置默认自动激活。</p>
<p>方法很简单，在配置 profile 的时候加上一条属性就可以了，如：</p>
<div>
<div>
<div>Xml代码 <embed src="http://juvenshun.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%20%20%20%20%3Cprofile%3E%0A%20%20%20%20%20%20%3Cid%3Edev%3C%2Fid%3E%0A%20%20%20%20%20%20%3Cactivation%3E%0A%20%20%20%20%20%20%20%20%3CactiveByDefault%3Etrue%3C%2FactiveByDefault%3E%0A%20%20%20%20%20%20%3C%2Factivation%3E%0A%20%20%20%20%20%20...%0A%20%20%20%20%3C%2Fprofile%3E" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;profile&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;id&gt;dev&lt;/id&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;activation&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeByDefault&gt;true&lt;/activeByDefault&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/activation&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;...&nbsp;&nbsp;</li>
    <li>&lt;/profile&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">    &lt;profile&gt;
&lt;id&gt;dev&lt;/id&gt;
&lt;activation&gt;
&lt;activeByDefault&gt;true&lt;/activeByDefault&gt;
&lt;/activation&gt;
...
&lt;/profile&gt;</pre>
<p>在一个特殊的环境下，配置默认自动激活的 profile 覆盖默认的 POM 配置，非常简单有效。</p>
<p>4. 配置 settings.xml 文件 profile 激活。</p>
<p>settings.xml 文件可以在 ~/.m2 目录下，为某个用户的自定义行为服务，也可以在 M2_HOME/conf 目录下，为整台机器的所有用户服务。而前者的配置会覆盖后者。同理，由 settings.xml 激活的 profile 意在为用户或者整个机器提供特定环境配置，比如，你可以在某台机器上配置一个指向本地数据库 URL 的 profile，然后使用该机器的 settings.xml 激活它。激活方式如下：</p>
<div>
<div>
<div>Xml代码 <embed src="http://juvenshun.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3Csettings%3E%0A%20%20...%0A%20%20%3CactiveProfiles%3E%0A%20%20%20%20%3CactiveProfile%3Elocal_db%3C%2FactiveProfile%3E%0A%20%20%3C%2FactiveProfiles%3E%0A%3C%2Fsettings%3E%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>&lt;settings&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;...&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;activeProfiles&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeProfile&gt;local_db&lt;/activeProfile&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/activeProfiles&gt;&nbsp;&nbsp;</li>
    <li>&lt;/settings&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">&lt;settings&gt;
...
&lt;activeProfiles&gt;
&lt;activeProfile&gt;local_db&lt;/activeProfile&gt;
&lt;/activeProfiles&gt;
&lt;/settings&gt;
</pre>
<p>Maven 提供的 profile 功能非常强大和灵活，用得好的话，可以有效的隔离很多特殊的配置，使得整个项目能在不同环境中顺利的构建。但是，强大和灵活带来得问题是相对难掌握，希望本文能对 Maven 使用者有帮助。</p>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/312320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-02-08 13:58 <a href="http://www.blogjava.net/sealyu/archive/2010/02/08/312320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven 中引用外部properties文件</title><link>http://www.blogjava.net/sealyu/archive/2010/02/08/312298.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 08 Feb 2010 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/02/08/312298.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/312298.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/02/08/312298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/312298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/312298.html</trackback:ping><description><![CDATA[如果在maven的pom.xml文件中，想像ant那样引用外部的properties配置文件，可以通过两种方式解决：<br />
1.<a name="sec7" id="sec7">如果需要引用外部propertiest文件中的属性值，需要在pom.xml中添加对外部文件的引用。例如，创建一个外部资源文件pom.properties：</a>
<pre><a name="sec7" id="sec7"># filter.properties<br />
my.filter.value=hello!<br />
</a></pre>
<p>
<a name="sec7" id="sec7">将对它的引用添加到pom.xml中：
</a></p>
<pre><a name="sec7" id="sec7">&lt;build&gt;<br />
&lt;filters&gt;<br />
&lt;filter&gt;${baseDir}/pom.properties&lt;/filter&gt;<br />
&lt;/filters&gt;<br />
&lt;/build&gt;<br />
不过这种方式要启动资源过滤，并设置好对应的文件夹才行，相对较麻烦。
2.使用插件：<br />
maven-properties-plugin &nbsp;使用方法可以看插件的官方地址：http://haroon.sis.utoronto.ca/zarar/properties-maven-plugin/index.html</a></pre>
<br />
properties-maven-plugin &nbsp;使用方法可以看插件的官方地址：http://mojo.codehaus.org/properties-maven-plugin/
<div style="margin: 5px; background: yellow none repeat scroll 0% 0%; position: absolute; left: 0pt; top: 0pt; z-index: 1000; font-family: arial; font-size: 13px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px; -moz-border-radius-bottomleft: 5px; opacity: 0.9; display: none;" id="dictdiv"></div>
<div id="dictaudio"></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/312298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-02-08 10:42 <a href="http://www.blogjava.net/sealyu/archive/2010/02/08/312298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MavenPropertiesGuide</title><link>http://www.blogjava.net/sealyu/archive/2010/02/08/312293.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 08 Feb 2010 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/02/08/312293.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/312293.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/02/08/312293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/312293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/312293.html</trackback:ping><description><![CDATA[<h3>Intro</h3>
<p>Because I couldn't find a clear overview of which properties are
availabe in maven2 I started this page. It is a collection of things
found in the offcial maven documentation and postings to the maven user
mailing list.</p>
<p><strong>Note: In Maven 3.0, all <tt>pom.*</tt> properties are deprecated. Use <tt>project.*</tt> instead!</strong></p>
<h3>Build in properties</h3>
<ul>
    <li><tt>${basedir</tt>} represents the directory containing pom.xml</li>
    <li><tt>${version</tt>} equivalent to <tt>${project.version</tt>} or <tt>${pom.version</tt>}</li>
</ul>
<h3>Pom/Project properties</h3>
<p>All elements in the pom.xml, can be referenced with the <tt>project.</tt> prefix or using <tt>pom.</tt> as prefix. This list is just an example of some commonly used elements.</p>
<ul>
    <li><tt>${project.build.directory</tt>} results in the path to your "target" dir, this is the same as <tt>${pom.project.build.directory</tt>}</li>
    <li><tt>${project.build.</tt><tt>outputD</tt><tt>irectory</tt><tt>}</tt> results in the path to your "target/classes" dir</li>
    <li><tt>${project.name</tt>} or <tt>${pom.name</tt>} refers to the name of the project.</li>
    <li><tt>${project.version</tt>} or <tt>${pom.version</tt>} refers to the version of the project.</li>
    <li><tt>${project.build.finalName</tt>} refers to the final name of the file created when the built project is packaged</li>
</ul>
<h3>Local user settings</h3>
<p>Similarly, values in the user's settings.xml can be referenced using property names with <tt>settings.</tt> prefix.</p>
<ul>
    <li><tt>${settings.localRepository</tt>} refers to the path of the user's local repository.</li>
    <li><tt>${maven.repo.local</tt>} also works for backward compatibility with maven1 ??</li>
</ul>
<h3>Environment variables</h3>
<p>Environment variables can be referenced using the <tt>env</tt> prefix</p>
<ul>
    <li><tt>${env.M2_HOME</tt>} returns the Maven2 installation path.</li>
    <li><tt>${java.home</tt>} specifies the path to the current JRE_HOME environment use with relative paths to get for example:<br />
    <tt>&lt;jvm&gt;${java.home}../bin/java.exe&lt;/jvm&gt;</tt></li>
</ul>
<h3>Java system properties</h3>
<p>All Java System Properties defined by the JVM.</p>
<h3>Custom properties in the POM</h3>
<p>User defined properties in the pom.xml.</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<pre>&lt;project&gt;<br />
...<br />
&lt;properties&gt;<br />
&lt;my.filter.value&gt;hello&lt;/my.filter.value&gt;<br />
&lt;/properties&gt;<br />
...<br />
&lt;/project&gt;<br />
</pre>
</div>
</div>
<ul>
    <li><tt>${my.filter.value</tt>} will result in <tt>hello</tt> if you inserted the above XML fragment in your pom.xml</li>
</ul>
<h3>Parent Project variables</h3>
<p>How can parent project variables be accessed?</p>
<p>You can use the prefix: <tt>${project.parent</tt>}.</p>
<p>A good way to determine possible variables is to have a look
directly at the API. I'm currently using Maven 2.2.1, and to access the
Parent you can use <tt>${project.parent</tt>}. This will return an <a href="http://maven.apache.org/ref/2.0.4/maven-project/apidocs/org/apache/maven/project/MavenProject.html" class="external-link" rel="nofollow">org.apache.maven.project.MavenProject</a> instance. </p>
<p>To access the parent version: <tt>${parent.version</tt>}.</p>
<h3>Reflection Properties</h3>
<p>The pattern <tt>${someX.someY.someZ</tt>} can simply sometimes mean <tt>getSomeX().getSomeY().getSomeZ()</tt>. Thus, properties such as <tt>${project.build.directory</tt>} is translated to <tt>getProject().getBuild().getDirectory()</tt>.</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/312293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-02-08 10:12 <a href="http://www.blogjava.net/sealyu/archive/2010/02/08/312293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PermGen space exceptions with Maven due to memory leak</title><link>http://www.blogjava.net/sealyu/archive/2010/01/22/310500.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 22 Jan 2010 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/22/310500.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/310500.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/22/310500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/310500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/310500.html</trackback:ping><description><![CDATA[<p>Maybe you know the situation: you are developing a web application
using the Maven build system along with an application server like
Tomcat or Jetty and a corresponding plugin (e.g. the all famous <a href="http://mojo.codehaus.org/jetty-maven-plugin/usage.html" target="_blank">jetty-maven-plugin</a>).</p>
<p>One of the coolest features of these containers is the hot-deployment.</p>
<p>However, every second time a hot deployment is executed, it crashes due to a <strong>PermGen space Exception</strong> or a similar <strong>OutOfMemoryException</strong>.</p>
<p>The cause for this behaviour is a memory leak with the classloaded
of these containers. If you are interested in the details, you may read
<a href="http://opensource.atlassian.com/confluence/spring/pages/viewpage.action?pageId=2669" target="_blank">this article on the Classloader Memory Leaks</a>.</p>
<p>Actually, you can&#8217;t fix this bug. But there is a way to prevent it
from beeing so painful. And it&#8217;s pretty easy: simply assign more memory
to your JVM!</p>
<p>In order to do so, create a new environment variable named <code>MAVEN_OPTS</code>. Maybe you already defined this variable. What you have to do now is to adjust the <code>MaxPermSize</code>  (and the other parameters, too) to a proper value according to your machine&#8217;s memory.<br />
For instance, set the <code>MAVEN_OPTS</code> like this:</p>
<p><code>-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m</code></p>
<p>Having 2 GB of RAM, these values are a good start.</p>
<p>Now you should be rid of the nasty PermGen space exceptions.</p>
<br />
<br />
Related:<br />
<a href="http://codingclues.eu/2008/catching-exceptions-with-an-uncaughtexceptionhandler-in-java/" rel="bookmark" title="Permanent Link: Catching Exceptions with an UncaughtExceptionHandler in Java">Catching Exceptions with an UncaughtExceptionHandler in Java</a><br />
<a href="http://codingclues.eu/2008/assertions-in-eclipse/" rel="bookmark" title="Permanent Link: Problems with Assertions in JUnit tests using Eclipse">Problems with Assertions in JUnit tests using Eclipse</a><br />
<a href="http://codingclues.eu/2009/net-color-constants/" rel="bookmark" title="Permanent Link: .NET Color Constants">.NET Color Constants</a>
<img src ="http://www.blogjava.net/sealyu/aggbug/310500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-22 11:43 <a href="http://www.blogjava.net/sealyu/archive/2010/01/22/310500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Maven中OutOfMemory错误(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/01/19/310030.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 19 Jan 2010 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/19/310030.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/310030.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/19/310030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/310030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/310030.html</trackback:ping><description><![CDATA[<p>当Maven项目很大，或者你运行诸如 mvn site 这样的命令的时候，maven运行需要很大的内存，在默认配置下，就可能遇到java的堆溢出。如：</p>
<div>[INFO] Building jar:
/home/dl9pf/svn/mindquarry/mindquarry-jcr/mindquarry-jcr-changes/target/mindquarry-migration-with-dependencies.jar<br />
[INFO] ------------------------------------------------------------------------<br />
[ERROR] FATAL ERROR<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Java heap space<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Trace<br />
java.lang.OutOfMemoryError: Java heap space<br />
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:99)<br />
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:518)<br />
...<br />
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)<br />
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)<br />
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)<br />
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Total time: 7 minutes 14 seconds<br />
[INFO] Finished at: Wed Sep 05 07:44:55 CEST 2007<br />
[INFO] Final Memory: 37M/63M<br />
[INFO] ------------------------------------------------------------------------
</div>
<p>解决的方法是调整java的堆大小的值。</p>
<h2><span style="font-size: small;"><strong>Windows环境中
</strong>
</span>
</h2>
<p>
<strong> 找到文件<em>%M2_HOME%"bin"mvn.bat</em>
，这就是启动Maven的脚本文件，在该文件中你能看到有一行注释为：</strong></p>
<p><strong>&nbsp; @REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...</strong></p>
<p><strong>它的意思是你可以设置一些Maven参数，我们就在注释下面加入一行：</strong></p>
<div><strong>set MAVEN_OPTS= -Xms128m -Xmx512m</strong></div>
<p><strong>之后，当你运行Maven命令如 mvn -version 的时候，你会看到如下的输出：</strong></p>
<div><strong>E:"test&gt;mvn -version<br />
<br />
E:"test&gt;set MAVEN_OPTS= -Xms128m -Xmx512m<br />
Maven version: 2.0.9<br />
Java version: 1.6.0_07<br />
OS name: "windows 2003" version: "5.2" arch: "x86" Family: "windows"</strong></div>
<p><strong>我们看到，配置的Maven选项生效了，OutOfMemoryError也能得以相应的解决。</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<h2><span style="font-size: small;"><strong><strong>Linux环境中
</strong>
</strong></span>
</h2>
<p>
<strong><strong>也可以通过设置环境变量解决该问题， 如，编辑文件<em> /etc/profile</em>
如下</strong></strong></p>
<div><strong><strong>MAVEN_OPTS=-Xmx512m<br />
export JAVA_HOME MAVEN_HOME MAVEN_OPTS JAVA_BIN PATH CLASSPATH</strong></strong></div>
<p><strong><strong>&nbsp;</strong></strong></p>
<p><strong><strong>&nbsp;</strong></strong></p>
<h2><strong><strong><strong><span style="font-size: small;">如果你使用Hudson</span>
</strong>
</strong></strong></h2>
<p><strong><strong>用 Hudson + Maven做持续集成，并不幸也遇到了类似的错误，那么上述两种方式都将不再起作用了，因为Hudson使用自己的maven-agent来启动Maven，不会去调用Maven的脚本，自然相应的配置也就无效了。</strong></strong></p>
<p><strong><strong>好在Hudson也给为我们提供了配置点，在Hudson的项目配置页面中，有一块Build区域，这里我们已经
设置了Root
Pom和Goals。注意该区域的右下角有一个"Advanced..."按钮，点击会看到MAVEN_OPTS输入框，这里输入"-Xmx512m"就
OK了。</strong></strong></p>
<p><strong><strong>&nbsp;</strong></strong></p>
<h2><strong><strong>m2eclipse中</strong></strong></h2>
<p><strong><strong>类似以上的方法都会失效，所幸m2eclipse提供了配置点。步骤如下：</strong></strong></p>
<p><strong><strong>项目上右击 -&gt; Run As -&gt; Run Configurations -&gt; Maven Build 上右击 -&gt; New</strong></strong></p>
<p><strong><strong>这时会看到一个maven运行配置对话框，这里面其它的配置我不多解释了，为了解决内存溢出的问题，我们可以选择第二个TAB: JRE，然后在VM arguments中输入配置如：-Xms128m -Xmx512m。</strong></strong></p>
<p><strong><strong>&nbsp;</strong></strong></p>
<p><br />
<strong><strong></strong></strong></p>
<p><strong><strong>还有一种说法：</strong></strong></p>
<p>编辑maven"bin中的mvn文件：
</p>
<ul>
    <li>在exec "$JAVACMD" "之后加上 -Xmx256m "即可。 </li>
    <li>形式如：<br />
    <blockquote>
    <p>&nbsp; exec "$JAVACMD" "<br />
    <br />
    -Xmx256m "</p>
    </blockquote>
    </li>
</ul>
<img src ="http://www.blogjava.net/sealyu/aggbug/310030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-19 08:55 <a href="http://www.blogjava.net/sealyu/archive/2010/01/19/310030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven-resources-plugin的编码问题</title><link>http://www.blogjava.net/sealyu/archive/2010/01/11/309023.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 11 Jan 2010 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/11/309023.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/309023.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/11/309023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/309023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/309023.html</trackback:ping><description><![CDATA[今天突然在项目构建时发现有一条警告信息：<br />
Using platform encoding (GBK actually) to copy filtered resources<br />
<br />
由于项目中统一使用UTF-8编码，所以这个地方是个潜在的问题，看了文档发现，如果不显式设置，maven会使用平台的默认编码，中文系统就是GBK了。<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: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;"><br />
&nbsp;&nbsp;&nbsp; &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;">&nbsp;&nbsp;<br />
&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-resources-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&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;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">encoding</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">UTF-8</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">encoding</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&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;">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp; <br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/309023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-11 14:55 <a href="http://www.blogjava.net/sealyu/archive/2010/01/11/309023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How do I include tools.jar in my dependencies?</title><link>http://www.blogjava.net/sealyu/archive/2010/01/10/308902.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sun, 10 Jan 2010 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/10/308902.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/308902.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/10/308902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/308902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/308902.html</trackback:ping><description><![CDATA[<p>
The following code includes <code>tools.jar</code> for JDKs on Windows, Linux and Solaris (it is already
included in the runtime for Mac OS X and some free JDKs).
</p>
<div>
<pre>...<br />
&lt;profiles&gt;<br />
&lt;profile&gt;<br />
&lt;id&gt;default-tools.jar&lt;/id&gt;<br />
&lt;activation&gt;<br />
&lt;property&gt;<br />
&lt;name&gt;java.vendor&lt;/name&gt;<br />
&lt;value&gt;Sun Microsystems Inc.&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/activation&gt;<br />
&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;com.sun&lt;/groupId&gt;<br />
&lt;artifactId&gt;tools&lt;/artifactId&gt;<br />
&lt;version&gt;1.4.2&lt;/version&gt;<br />
&lt;scope&gt;system&lt;/scope&gt;<br />
&lt;systemPath&gt;${java.home}/../lib/tools.jar&lt;/systemPath&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/profile&gt;<br />
&lt;/profiles&gt;<br />
...</pre>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/308902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-10 11:50 <a href="http://www.blogjava.net/sealyu/archive/2010/01/10/308902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Missing indirectly referenced artifact com.sun:tools:jar:1.5.0:system</title><link>http://www.blogjava.net/sealyu/archive/2010/01/10/308896.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sun, 10 Jan 2010 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/10/308896.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/308896.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/10/308896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/308896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/308896.html</trackback:ping><description><![CDATA[<p><a href="http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/" class="external free" title="http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/" rel="nofollow">http://livingash.wordpress.com/2007/08/16/struts-2-and-sun-micros-toolsjar-in-eclipse-wtp/</a>
</p>
<p>The configuration free classic way to start Eclipse with desired VM.
</p>
<pre>$&gt;eclipse -vm "C:\Program Files\Java\jdk1.6.0_01\bin"<br />
<br />
这个问题一般是由于使用了struts2引起的：<br />
用了m2eclipse 插件后，使用struts2时，需要依赖 com.sun 的 default-tools.jar，见pom.xml<br />
<br />
<br />
<br />
<br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
<br />
&nbsp; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
<br />
&nbsp; &lt;groupId&gt;cn.tianxing.gehouse.admin&lt;/groupId&gt;<br />
<br />
&nbsp; &lt;artifactId&gt;admin.gehouse.cn&lt;/artifactId&gt;<br />
<br />
&nbsp; &lt;name&gt;admin.gehouse.cn&lt;/name&gt;<br />
<br />
&nbsp; &lt;version&gt;0.0.1&lt;/version&gt;<br />
<br />
&nbsp; &lt;description&gt;admin.gehouse.cn&lt;/description&gt;<br />
<br />
&nbsp; &lt;url&gt;http://admin.gehouse.cn&lt;/url&gt;<br />
<br />
&nbsp; &lt;issueManagement&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;system&gt;jira&lt;/system&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;url&gt;http://jira.gehouse.cn:8080/BrowseProject.jspa?id=10000&lt;/url&gt;<br />
<br />
&nbsp; &lt;/issueManagement&gt;<br />
<br />
&nbsp; &lt;ciManagement&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;system&gt;continuum&lt;/system&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;url&gt;http://ci.gehouse.cn:8090/continuum&lt;/url&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;notifiers&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;notifier&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;type&gt;msn&lt;/type&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sendOnSuccess&gt;false&lt;/sendOnSuccess&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sendOnWarning&gt;false&lt;/sendOnWarning&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;address&gt;kylindai@hotmail.com&lt;/address&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/notifier&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;notifier&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;type&gt;msn&lt;/type&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sendOnSuccess&gt;false&lt;/sendOnSuccess&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sendOnWarning&gt;false&lt;/sendOnWarning&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;address&gt;larrin2002@msn.com&lt;/address&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/notifier&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;notifier&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;type&gt;msn&lt;/type&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sendOnSuccess&gt;false&lt;/sendOnSuccess&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sendOnWarning&gt;false&lt;/sendOnWarning&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;address&gt;manjingtou-ren@hotmail.com&lt;/address&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/notifier&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/notifiers&gt;<br />
<br />
&nbsp; &lt;/ciManagement&gt;<br />
<br />
&nbsp; &lt;inceptionYear&gt;2007-05&lt;/inceptionYear&gt;<br />
<br />
&nbsp; &lt;developers&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;developer&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;kylin.dai&lt;/name&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;kylin.dai@gehouse.cn&lt;/email&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/developer&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;developer&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;larrin.luo&lt;/name&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;larrin.luo@gehouse.cn&lt;/email&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/developer&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;developer&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;jason.ren&lt;/name&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;jason.ren@gehouse.cn&lt;/email&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/developer&gt;<br />
<br />
&nbsp; &lt;/developers&gt;<br />
<br />
&nbsp; &lt;scm&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;connection&gt;scm:svn:svn://svn.gehouse.cn/sandbox/kylin/admin.gehouse.cn/trunk&lt;/connection&gt;<br />
<br />
&nbsp; &lt;/scm&gt;<br />
<br />
&nbsp; &lt;organization&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;name&gt;gehouse.cn&lt;/name&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;url&gt;http://www.gehouse.cn&lt;/url&gt;<br />
<br />
&nbsp; &lt;/organization&gt;<br />
<br />
&nbsp; &lt;build&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0.2&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;source&gt;1.6&lt;/source&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target&gt;1.6&lt;/target&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
<br />
&nbsp; &lt;/build&gt;<br />
<br />
&nbsp; &lt;profiles&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;profile&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;default-tools.jar&lt;/id&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;activation&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;java.vendor&lt;/name&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Sun Microsystems Inc.&lt;/value&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/activation&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependencies&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;com.sun&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;tools&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.5.0&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;system&lt;/scope&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;systemPath&gt;${java.home}/../lib/tools.jar&lt;/systemPath&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dependencies&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/profile&gt;<br />
<br />
&nbsp; &lt;/profiles&gt;<br />
<br />
&nbsp; &lt;dependencies&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;log4j&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;log4j&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.2.14&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;javax.servlet&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.5&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;dom4j&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;dom4j&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.6.1&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;com.ibatis&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;ibatis&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.3.0.667&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;junit&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;4.1&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;mysql&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;5.0.5&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.extremecomponents&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;extremecomponents&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.0.1&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;commons-dbcp&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;commons-dbcp&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.2.1&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;spring&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0.5&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;spring-mock&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0.5&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;spring-aspects&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0.5&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.struts&lt;/groupId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;struts2-core&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0.6&lt;/version&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
<br />
&nbsp; &lt;/dependencies&gt;<br />
<br />
&nbsp; &lt;reporting&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-changelog-plugin&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-pmd-plugin&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-changes-plugin&lt;/artifactId&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;reportSets&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;reportSet&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;reports&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;report&gt;jira-report&lt;/report&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/reports&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/reportSet&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/reportSets&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
<br />
&nbsp; &lt;/reporting&gt;<br />
<br />
&lt;/project&gt;<br />
<br />
<br />
<br />
<br />
<br />
这个pom.xml 在eclipse里加载的时候总是报告：<br />
<br />
<br />
<br />
Missing:<br />
<br />
1) com.sun:tools:jar:1.4.2<br />
<br />
Try downloading the file manually from the project website.<br />
<br />
Then, install it using the command: <br />
<br />
<br />
<br />
mvn install:install-file -DgroupId=com.sun -DartifactId=tools "<br />
<br />
-Dversion=1.4.2 -Dpackaging=jar -Dfile=/path/to/file<br />
<br />
Path to dependency: <br />
<br />
<br />
<br />
原来，是${java.home}在作怪，eclipse 没有使用 JAVA_HOME<br />
<br />
默认，eclipse 使用 C:"windows"system32"javaw.exe 作为 JVM，当然找不到tools.jar<br />
<br />
<br />
<br />
解决方法如下：<br />
<br />
修改 eclipse.exe 目录下的 eclipse.ini 指定vm，加入红色黑体字部分，注意 -vm后面不能有空格。<br />
<br />
<br />
<br />
-vm<br />
<br />
D:"Program Files"Java"jdk1.6.0_01"bin"javaw.exe<br />
<br />
-vmargs<br />
<br />
-Xms128m<br />
<br />
-Xmx512m<br />
<br />
<br />
<br />
再次启动 eclipse，问题解决。<br />
<br />
<br />
<br />
上面的pom.xml文件，也是一个 Mavne2 &amp; Continuum 的例子，由我写的 Maven2 &amp;<br />
Continuum 持续整合 (3)，发布时，网络故障丢失了，也不打算重新再写一篇了，上述的pom.xml，可以在continuum的 add<br />
<br />
<br />
<br />
<br />
maven2 projects 里，添加使用，设好 scheduler，可以设1小时 build 一次，半小时 test 一次，等不同的任务<br />
<br />
<br />
</pre>
<img src ="http://www.blogjava.net/sealyu/aggbug/308896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-10 11:02 <a href="http://www.blogjava.net/sealyu/archive/2010/01/10/308896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2 建立统一的管理站点（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/01/08/308736.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 08 Jan 2010 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/08/308736.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/308736.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/08/308736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/308736.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/308736.html</trackback:ping><description><![CDATA[<span id="articlecontent" class="wenzhang_con" onmouseup="NewHighlight(event)" style="width: 740px;">&nbsp;使用maven2的另外一个好处，就是有了统一的入口，用于察看项目的进展情况。这主要包括了项目的介绍，成员介绍，以及相关的项目的文档，当然也包括项目的所有进展报表。<br />
&nbsp;&nbsp;&nbsp; 下面，通过实例来介绍如何配置maven，来产生项目站点。<br />
&nbsp;&nbsp;&nbsp; 首先创建相关的site <br />
mvn archetype:create "<br />
&nbsp; &nbsp;&nbsp; &nbsp;-DarchetypeGroupId=org.apache.maven.archetypes "<br />
&nbsp; &nbsp;&nbsp; &nbsp;-DarchetypeArtifactId=maven-archetype-site "<br />
&nbsp; &nbsp;&nbsp; &nbsp;-DgroupId=com.mycompany.app "<br />
&nbsp;&nbsp;&nbsp; &nbsp;-DartifactId=my-app-site<br />
&nbsp; 你会看到如下的目录：<br />
my-app-site<br />
|-- pom.xml<br />
`-- src<br />
&nbsp;&nbsp;&nbsp; `-- site<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- apt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- format.apt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- index.apt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- fml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- faq.fml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- fr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- apt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |&nbsp;&nbsp; |-- format.apt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |&nbsp;&nbsp; `-- index.apt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- fml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |&nbsp;&nbsp; `-- faq.fml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- xdoc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `-- xdoc.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- xdoc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- xdoc.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- site.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `-- site_fr.xml<br />
&nbsp;&nbsp;&nbsp; 当然也可以不用通过此来生成站点，直接在原有的src目录中增加site目录就行。当然，为了简化操作，一般先生成相应的site目录，然后拷贝到相应的src目录中。<br />
修改pom文件<br />
增加以下内容<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;!-- 配置发布站点url --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;distributionManagement&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;site&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;website&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;scp://webhost.company.com/www/website&lt;/url&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;/site&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;/distributionManagement&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;build&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;plugins&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;!-- 配置site 的国际化，默认为en,fr，更改为zh_CN，以及设置编码格式，默认utf-8 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-site-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;locales&gt;zh_CN&lt;/locales&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;outputEncoding&gt;GBK&lt;/outputEncoding&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;/plugins&gt;<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/build&gt;<br />
<br />
在site 目录下，最重要的就是site.xml文件了<br />
site.xml描述了主要的site布局，例子如下：<br />
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;project name="Maven"&gt;<br />
&nbsp; &lt;!-- left banner--&gt;<br />
&nbsp; &lt;bannerLeft&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;name&gt;Maven&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;src&gt;http://maven.apache.org/images/apache-maven-project.png&lt;/src&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;href&gt;http://maven.apache.org/&lt;/href&gt;<br />
&nbsp; &lt;/bannerLeft&gt;<br />
&nbsp; &lt;!-- right banner--&gt;<br />
&nbsp; &lt;bannerRight&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;src&gt;http://maven.apache.org/images/maven-small.gif&lt;/src&gt;<br />
&nbsp; &lt;/bannerRight&gt;<br />
&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- 默认的link --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;links&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Apache" href="http://www.apache.org/" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Maven 1.0" href="http://maven.apache.org/"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Maven 2" href="http://maven.apache.org/maven2/"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/links&gt;<br />
&nbsp;&nbsp; &lt;!-- 菜单项 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;menu name="Maven 2.0"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Introduction" href="index.html"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Download" href="download.html"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Release Notes" href="release-notes.html" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="General Information" href="about.html"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="For Maven 1.0 Users" href="maven1.html"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item name="Road Map" href="roadmap.html" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/menu&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;menu ref="reports" /&gt;<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp; &lt;/body&gt;<br />
&lt;/project&gt;<br />
<br />
配置站点文件<br />
maven 支持以下的文档：<br />
xdoc格式，使用简单的xml格式<br />
apt格式，like wiki格式的纯文本<br />
fml格式， faq格式<br />
docBook<br />
一般采用apt文件，默认的apt都是iso-8859-1的，如果需要支持中文，需要使用native2ascii命令来转换。<br />
<br />
报表：<br />
站点主要的配置，目前不错的报表插件，包括javadoc,pmd,checkstyle,Surefire test,source xref，tag list等。<br />
下面详细介绍这些报表：<br />
javadoc，对于团队内部来说，javadoc是比较重要的，当然前提是能好好的写javadoc。<br />
配置如下：在reporting中增加如下的插件<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;links&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;http://java.sun.com/j2se/1.4.2/docs/api&lt;/link&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;http://plexus.codehaus.org/ref/1.0-alpha-9/apidocs&lt;/link&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/links&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aggregate&gt;true&lt;/aggregate&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
pmd，一个不错的代码检查工具。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-pmd-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rulesets&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/basic.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/imports.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/unusedcode.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/finalizers.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/controversial.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/strings.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/strictexception.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/optimizations.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ruleset&gt;/rulesets/naming.xml&lt;/ruleset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rulesets&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;linkXref&gt;true&lt;/linkXref&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sourceEncoding&gt;GBK&lt;/sourceEncoding&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;minimumTokens&gt;100&lt;/minimumTokens&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--支持jdk 1.5 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;targetJdk&gt;1.5&lt;/targetJdk&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
checkstyle,主要的代码格式工具,和pmd相比，更注重代码的格式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configLocation&gt;sun_checks.xml&lt;/configLocation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
Surefire test，单元测试结果报表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-surefire-report-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
source xref,在网站上直接察看java源代码<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-jxr-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
tag list，用于查找在代码中预定义的标签，如todo<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;taglist-maven-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tags&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tag&gt;TODO&lt;/tag&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tag&gt;@todo&lt;/tag&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tag&gt;FIXME&lt;/tag&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tags&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
<br />
基本的站点已经成型了，下面就是生成了。<br />
执行mvn site 生成目录，或者直接执行 mvn site-deploy 发布站点 </span>
<img src ="http://www.blogjava.net/sealyu/aggbug/308736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-08 16:33 <a href="http://www.blogjava.net/sealyu/archive/2010/01/08/308736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to create a Maven web app and deploy to Tomcat - fast </title><link>http://www.blogjava.net/sealyu/archive/2010/01/08/308706.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 08 Jan 2010 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/08/308706.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/308706.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/08/308706.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/308706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/308706.html</trackback:ping><description><![CDATA[<p><strong>Procedure</strong></p>
<div>
<ul>
    <li><a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#HowtocreateaMavenwebappanddeploytoTomcat-fast-PrerequisitesandAssumptions">Prerequisites and Assumptions</a></li>
    <li><a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#HowtocreateaMavenwebappanddeploytoTomcat-fast-StepOnePreparetheTomcatManagerapplication">Step One - Prepare the Tomcat Manager application</a></li>
    <li><a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#HowtocreateaMavenwebappanddeploytoTomcat-fast-StepTwoCreateaNewWebAppUsingMaven">Step Two - Create a New Web App Using Maven</a></li>
    <li><a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#HowtocreateaMavenwebappanddeploytoTomcat-fast-StepThreeDefineYourTomcatServerinMavenSettings">Step Three - Define Your Tomcat Server in Maven Settings</a></li>
    <li><a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#HowtocreateaMavenwebappanddeploytoTomcat-fast-StepFourPointYourPomtoYourTomcatServer">Step Four - Point Your Pom to Your Tomcat Server</a></li>
    <li><a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#HowtocreateaMavenwebappanddeploytoTomcat-fast-StepFiveBuildandDeploytheWebApp">Step Five - Build and Deploy the Web App</a></li>
</ul>
</div>
<h2>Prerequisites and Assumptions</h2>
<ul>
    <li>Maven is already installed</li>
    <li>A local instance of Tomcat is already installed and configured to run on port 8080</li>
    <li>Optional - Eclipse is installed</li>
</ul>
<h2>Step One - Prepare the Tomcat Manager application</h2>
<p>In order to deploy a web app to your Tomcat server, you will need to
ensure that you can access the Tomcat Manager application at: <a href="http://localhost:8080/manager/html" class="external-link" rel="nofollow">http://localhost:8080/manager/html<sup><img src="http://www.burlesontech.com/wiki/images/icons/linkext7.gif" alt="" width="7" align="absmiddle" border="0" height="7" /></sup></a>. Typically, you just need to ensure that your &lt;tomcat&gt;/conf/tomcat-users.xml file has the following defined:</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<div nogutter="" xml="" id="highlighter_915064">
<div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">&lt;?</code><code keyword="">xml</code> <code color1="">version</code><code plain="">=</code><code string="">'1.0'</code> <code color1="">encoding</code><code plain="">=</code><code string="">'utf-8'</code><code plain="">?&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code plain="">&lt;</code><code keyword="">tomcat-users</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">role</code> <code color1="">rolename</code><code plain="">=</code><code string="">"manager"</code><code plain="">/&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">role</code> <code color1="">rolename</code><code plain="">=</code><code string="">"admin"</code><code plain="">/&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">user</code> <code color1="">username</code><code plain="">=</code><code string="">"admin"</code> <code color1="">password</code><code plain="">=</code><code string="">"admin"</code> <code color1="">roles</code><code plain="">=</code><code string="">"admin,manager"</code><code plain="">/&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code plain="">&lt;/</code><code keyword="">tomcat-users</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<p>In this case, we will be logging in to the Tomcat Manager app using:</p>
<div>
<table>
    <tbody>
        <tr>
            <th> username </th>
            <td> admin </td>
        </tr>
        <tr>
            <th> password </th>
            <td> admin </td>
        </tr>
    </tbody>
</table>
</div>
<a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#content">⁬⁬⁬Back to Top</a>
<hr />
<h2>Step Two - Create a New Web App Using Maven</h2>
<p>Next, we will use a Maven archetype to generate a new web application project.</p>
<p>Assuming that you will primarily use Eclipse as your IDE, you may
wish to start the project within Eclipse. We'll start the project
within Eclipse and then use Maven to fill the project in with the
proper Maven web app structure.</p>
<ul>
    <li>In Eclipse create a new General project. New &gt; Project... &gt; General &gt; Project</li>
    <li>Project
    name: "sw" (name it what you wish, but remember to replace 'sw' with
    your project name in all instances where that appears in this document
    from here on out.)</li>
</ul>
<p>The steps above just create a General project in your Eclipse
workspace (e.g. a folder with a .project settings file inside of it).</p>
<p>Next, open a command prompt, cd into the 'sw' project directory, and then execute the following Maven command (all on one line):</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<div nogutter="" java="" id="highlighter_865492">
<div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">mvn archetype:create</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;</code><code plain="">-DgroupId=com.burlesontech.sw</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;</code><code plain="">-DartifactId=webapp</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;</code><code plain="">-DarchetypeArtifactId=maven-archetype-webapp</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<p>You project will now have the following structure:</p>
<ul>
    <li>sw
    <ul>
        <li>webapp
        <ul>
            <li>src
            <ul>
                <li>main
                <ul>
                    <li>resources</li>
                    <li>webapp
                    <ul>
                        <li>WEB-INF
                        <ul>
                            <li>web.xml</li>
                        </ul>
                        </li>
                        <li>index.jsp</li>
                    </ul>
                    </li>
                </ul>
                </li>
            </ul>
            </li>
            <li>pom.xml</li>
        </ul>
        </li>
        <li>.project</li>
    </ul>
    </li>
</ul>
<p>In Eclipse, right-click on the project and select Refresh to see
this stuff within Eclipse. (Note that the .project file will typically
not appear within Eclipse, but it is there.)</p>
<a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#content">⁬⁬⁬Back to Top</a>
<hr />
<h2>Step Three - Define Your Tomcat Server in Maven Settings</h2>
<p>Open your Maven settings.xml file (e.g. C:"Documents and
Settings"Administrator".m2"settings.xml) and add a server 'myserver'
with the credentials for logging into the Tomcat Manager application:</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<div nogutter="" xml="" id="highlighter_564373">
<div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">&lt;</code><code keyword="">settings</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">servers</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">server</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">id</code><code plain="">&gt;myserver&lt;/</code><code keyword="">id</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">username</code><code plain="">&gt;admin&lt;/</code><code keyword="">username</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">password</code><code plain="">&gt;admin&lt;/</code><code keyword="">password</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;/</code><code keyword="">server</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;/</code><code keyword="">servers</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">...</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#content">⁬⁬⁬Back to Top</a>
<hr />
<h2>Step Four - Point Your Pom to Your Tomcat Server</h2>
<p>Open the pom.xml file in the 'sw' project and replace the &lt;build&gt; section so that it looks like this:</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<div nogutter="" xml="" id="highlighter_728078">
<div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">&lt;</code><code keyword="">build</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">finalName</code><code plain="">&gt;sw&lt;/</code><code keyword="">finalName</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">plugins</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">plugin</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">groupId</code><code plain="">&gt;org.codehaus.mojo&lt;/</code><code keyword="">groupId</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">artifactId</code><code plain="">&gt;tomcat-maven-plugin&lt;/</code><code keyword="">artifactId</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">configuration</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">server</code><code plain="">&gt;myserver&lt;/</code><code keyword="">server</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;</code><code keyword="">path</code><code plain="">&gt;/sw&lt;/</code><code keyword="">path</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;/</code><code keyword="">configuration</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;/</code><code keyword="">plugin</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt2="">
<table>
    <tbody>
        <tr>
            <td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain="">&lt;/</code><code keyword="">plugins</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">&lt;/</code><code keyword="">build</code><code plain="">&gt;</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<p>Here, we have added the Tomcat plugin for Maven. Note that the
&lt;configuration&gt; section needs to point to the server you defined
in settings.xml ('myserver'). The &lt;finalName&gt; and the
&lt;path&gt; are used to tell the web context that you want to deploy
to. In this case, we'll be able to access our application at <a href="http://localhost:8080/sw" class="external-link" rel="nofollow">http://localhost:8080/sw<sup><img src="http://www.burlesontech.com/wiki/images/icons/linkext7.gif" alt="" width="7" align="absmiddle" border="0" height="7" /></sup></a>.</p>
<a href="http://www.burlesontech.com/wiki/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast#content">⁬⁬⁬Back to Top</a>
<hr />
<h2>Step Five - Build and Deploy the Web App</h2>
<p>On a command prompt, you can now cd into the sw/webapp directory
where the project pom exists. The execute the following command:</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<div nogutter="" java="" id="highlighter_565216">
<div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">mvn tomcat:deploy</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<p>If you get a BUILD SUCCESSFUL message, you should then be able to access your web application at <a href="http://localhost:8080/sw/" class="external-link" rel="nofollow">http://localhost:8080/sw/<sup><img src="http://www.burlesontech.com/wiki/images/icons/linkext7.gif" alt="" width="7" align="absmiddle" border="0" height="7" /></sup></a>.</p>
<p>You should see "Hello World!" in your web browser (from the
index.jsp page). Now you're all set and ready to start building the
next killer web app!</p>
<p>If you try to deploy again with the same command, you will likely
get a FAIL message because the application already exists at the path.
For successive deployments, use the following command instead:</p>
<div panel="" style="border-width: 1px;">
<div panelcontent="">
<div nogutter="" java="" id="highlighter_169146">
<div>
<div alt1="">
<table>
    <tbody>
        <tr>
            <td><code plain="">mvn tomcat:redeploy</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<p>Next, you may want to enable log4j logging for your new application; check out <a href="http://www.burlesontech.com/wiki/display/btg/How+to+setup+Log4j+in+a+web+app+-+fast" title="How to setup Log4j in a web app - fast">How to setup Log4j in a web app - fast</a>.</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/308706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-08 13:46 <a href="http://www.blogjava.net/sealyu/archive/2010/01/08/308706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse里面管理Maven项目</title><link>http://www.blogjava.net/sealyu/archive/2010/01/04/308168.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 04 Jan 2010 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/04/308168.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/308168.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/04/308168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/308168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/308168.html</trackback:ping><description><![CDATA[在使用 mvn eclipse:eclipse 命令生成适合eclipse的java项目后，使用import将项目导入进eclipse。<br />
这时候类库会报错： Unbound classpath variable: 'M2_REPO/**/***/***.jar' <br />
<br />
这是因为eclipse里面还没配置对应的classpath variable。<br />
配置方法如下：<br />
<p>Eclipse-&gt;Windows-&gt;Preferences-&gt;java-&gt;Build Path-&gt;Classpath Variable-&gt;New </p>
<p>名字:M2_REPO，属性选folder，指向C:\Documents and Settings\your name\.m2\repository</p>
<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/308168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-04 13:51 <a href="http://www.blogjava.net/sealyu/archive/2010/01/04/308168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven  Standard Directory Layout</title><link>http://www.blogjava.net/sealyu/archive/2009/12/31/307905.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 31 Dec 2009 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/31/307905.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/307905.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/31/307905.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/307905.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/307905.html</trackback:ping><description><![CDATA[<p>Having a common directory layout would allow for users familiar with
one Maven project to immediately feel at home in another Maven project.
The advantages are analogous to adopting a site-wide look-and-feel.</p>
<p>The next section documents the directory layout expected by Maven
and the directory layout created by Maven. Please try to conform to
this structure as much as possible; however, if you can't these
settings can be overridden via the project descriptor.</p>
<table>
    <tbody>
        <tr>
            <td align="left">src/main/java</td>
            <td align="left">Application/Library sources</td>
        </tr>
        <tr>
            <td align="left">src/main/resources</td>
            <td align="left">Application/Library resources</td>
        </tr>
        <tr>
            <td align="left">src/main/filters</td>
            <td align="left">Resource filter files</td>
        </tr>
        <tr>
            <td align="left">src/main/assembly</td>
            <td align="left">Assembly descriptors</td>
        </tr>
        <tr>
            <td align="left">src/main/config</td>
            <td align="left">Configuration files</td>
        </tr>
        <tr>
            <td align="left">src/main/webapp</td>
            <td align="left">Web application sources</td>
        </tr>
        <tr>
            <td align="left">src/test/java</td>
            <td align="left">Test sources</td>
        </tr>
        <tr>
            <td align="left">src/test/resources</td>
            <td align="left">Test resources</td>
        </tr>
        <tr>
            <td align="left">src/test/filters</td>
            <td align="left">Test resource filter files</td>
        </tr>
        <tr>
            <td align="left">src/site</td>
            <td align="left">Site</td>
        </tr>
        <tr>
            <td align="left">LICENSE.txt</td>
            <td align="left">Project's license</td>
        </tr>
        <tr>
            <td align="left">README.txt</td>
            <td align="left">Project's readme</td>
        </tr>
    </tbody>
</table>
<p>At the top level files descriptive of the project: a <tt>pom.xml</tt> file (and any properties, <tt>maven.xml</tt> or <tt>build.xml</tt>
if using Ant). In addition, there are textual documents meant for the
user to be able to read immediately on receiving the source: <tt>README.txt</tt>, <tt>LICENSE.txt</tt>, etc.</p>
<p>There are just two subdirectories of this structure: <tt>src</tt> and <tt>target</tt>. The only other directories that would be expected here are metadata like <tt>CVS</tt> or <tt>.svn</tt>, and any subprojects in a multiproject build (each of which would be laid out as above).</p>
<p>The <tt>target</tt> directory is used to house all output of the build.</p>
<p>The <tt>src</tt> directory contains all of the source material for
building the project, its site and so on. It contains a subdirectory
for each type: <tt>main</tt> for the main build artifact, <tt>test</tt> for the unit test code and resources, <tt>site</tt> and so on.</p>
<p>Within artifact producing source directories (ie. <tt>main</tt> and <tt>test</tt>), there is one directory for the language <tt>java</tt> (under which the normal package hierarchy exists), and one for <tt>resources</tt> (the structure which is copied to the target classpath given the default resource definition).</p>
<p>If there are other contributing sources to the artifact build, they would be under other subdirectories: for example <tt>src/main/antlr</tt> would contain Antlr grammar definition files.</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/307905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-31 14:00 <a href="http://www.blogjava.net/sealyu/archive/2009/12/31/307905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven的多模块(Multi-Module)工程的pom编写(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/12/30/307760.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 30 Dec 2009 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/30/307760.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/307760.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/30/307760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/307760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/307760.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>对于使用maven的骨架创建工程，想必大家都已经熟悉了，这里是一些常用的工程类型，如想看到更多的骨架可以使用mvn的交互式Interactive generate Goal创建指令：mvn archetype:generate</p>
<p><span style="color: #ff9900;"><br />
</span></p>
<p style="background-color: #ffffff;"><span style="color: #000000;"><span style="color: #ff0000;">// Creating a simple java application</span> <br />
mvn archetype:create -DgroupId=[your project's group id]  -DartifactId=[your project's artifact id] <br />
<br />
<span style="color: #ff0000;">// Creating a webapp</span> <br />
mvn archetype:create -DgroupId=[your project's group id]
-DartifactId=[your project's artifact id]
-DarchetypeArtifactId=maven-archetype-webapp<br />
<br />
<span style="color: #ff0000;">// Creating a site</span> <br />
mvn archetype:create -DgroupId=[your project's group id]
-DartifactId=[your project's artifact id]
-DarchetypeArtifactId=maven-archetype-site-simple<br />
<br />
<span style="color: #ff0000;">// Creating a mojo</span> <br />
mvn archetype:create -DgroupId=[your project's group id]
-DartifactId=[your project's artifact id]
-DarchetypeArtifactId=maven-archetype-mojo<br />
<br />
<span style="color: #ff0000;">// Creating a portlet</span> <br />
mvn archetype:create -DgroupId=[your project's group id]
-DartifactId=[your project's artifact id]
-DarchetypeArtifactId=maven-archetype-portlet</span></p>
<p style="background-color: #ffffff;">现在想介绍的是多模块的工程的构建。</p>
<p style="background-color: #ffffff;">典型的多模块划分，即按MVC的分层方式来构建多个模块，如工程包括web,business,core3个模块。好我们先看看主工程的pom中应添加些什么，请注意红色文字部分</p>
<p style="background-color: #ffffff;"><strong><br />
</strong></p>
<p style="background-color: #ffffff;"><strong>1.主工程的pom文件中内容：</strong></p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;groupId&gt;com.your-company.xxxx&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;artifactId&gt;xxxx&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;  <span style="color: #ff0000;">&lt;packaging&gt;pom&lt;/packaging&gt;</span> <br />
&nbsp;&nbsp;&nbsp;  &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;name&gt;xxxx Project&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;url&gt;http://maven.apache.org&lt;/url&gt;</p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;  <span style="color: #0000ff;">&lt;!-- 工程所包含的模块 --&gt;</span></p>
<p style="background-color: #ffffff;"><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;  &lt;modules&gt; <br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;module&gt;xxxx-core&lt;/module&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;module&gt;xxxx-business&lt;/module&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;module&gt;xxxx-web&lt;/module&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;/modules&gt;</span></p>
<p style="background-color: #ffffff;"><strong>2.Web模块的pom文件：</strong></p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;  <span style="color: #0000ff;">&lt;!-- 父级的pom文件位置 --&gt;</span></p>
<p style="background-color: #ffffff;"><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;  &lt;parent&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;groupId&gt;com.your-company.xxxx&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;artifactId&gt;xxxx&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;relativePath&gt;../pom.xml&lt;/relativePath&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;/parent&gt;</span></p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;  &lt;groupId&gt;com.your-company.xxxx&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;artifactId&gt;xxxx-web&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;packaging&gt;war&lt;/packaging&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;name&gt;xxxx-web/name&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;url&gt;http://maven.apache.org&lt;/url&gt;</p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;  &lt;dependencies&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;!-- Application Dependencies --&gt;<br />
<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  </span> <span style="color: #0000ff;">&lt;!-- Web层所依赖的上两层模块 --&gt;</span></p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <span style="color: #ff0000;">&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;groupId&gt;com.your-company.xxxx&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;artifactId&gt;xxxx-core&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;version&gt;${version}&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;groupId&gt;com.your-company.xxxx&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;artifactId&gt;xxxx-business&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;version&gt;${version}&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;/dependency&gt;</span></p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ...</p>
<p style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;  &lt;dependencies&gt;</p>
<p style="background-color: #ffffff;"><strong><br />
</strong></p>
<p style="background-color: #ffffff;"><strong>3.完成后，mvn eclipse:eclipse后的文件目录为：</strong></p>
<p style="background-color: #ffffff;"><strong>xxxx</strong></p>
<p style="background-color: #ffffff;">├─<strong>xxxx-core</strong></p>
<p style="background-color: #ffffff;">│  ├─<span style="color: #ff0000;">pom.xml</span> <br />
│  ├─.settings<br />
│  ├─src<br />
│  │  ├─main<br />
│  │  │  ├─java<br />
│  │  │  └─resources<br />
│  │  └─test<br />
│  │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ├─java<br />
│  │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  └─resources<br />
│  └─target<br />
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ├─classes<br />
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  └─test-classes</p>
<p style="background-color: #ffffff;">├─<strong>xxxx-business</strong> <br />
│  ├─<span style="color: #ff0000;">pom.xml</span> <br />
│  ├─.settings<br />
│  ├─src<br />
│  │  ├─main<br />
│  │  │  ├─java<br />
│  │  │  └─resources<br />
│  │  └─test<br />
│  │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ├─java<br />
│  │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  └─resources<br />
│  └─target<br />
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ├─classes<br />
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  └─test-classes</p>
<p style="background-color: #ffffff;">├─<strong>xxxx-web</strong></p>
<p style="background-color: #ffffff;">│  ├─<span style="color: #ff0000;">pom.xml</span> <br />
│  ├─.settings<br />
│  ├─src<br />
│  │  ├─main<br />
│  │  │  ├─java<br />
│  │  │  └─resources<br />
│  │  └─test<br />
│  │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ├─java<br />
│  │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  └─resources<br />
│  └─target<br />
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ├─classes<br />
│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  └─test-classes</p>
<p style="background-color: #ffffff;">|--<span style="color: #ff0000;">pox.xml</span></p>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/307760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-30 14:48 <a href="http://www.blogjava.net/sealyu/archive/2009/12/30/307760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven 2.0:编译、测试、部署、运行（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/12/30/307750.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 30 Dec 2009 05:52:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/30/307750.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/307750.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/30/307750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/307750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/307750.html</trackback:ping><description><![CDATA[<div>
<div>
<h4>摘要:</h4>
Maven1.0
已经历了几年的时间，并且作为Ant的替代品已被广大的开发人员所接收，但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。
Maven1.0速度慢并且笨拙，使用起来的困难度并不亚于使用Ant的项目。事实上，它的核心是基于Ant实现的。在经过了几乎彻底的重写
后，Maven2.0诞生了。 </div>
<div id="text">一
个Java项目中最困难的地方就是如何着手启动它。在启动项目之前，我们必须配置好所有的逻辑关系。比如，Java源代码应该放在何处？单元测试应该在何
处进行？依赖的jar包应该如何放置？如何构建项目，如何形成文档，如何测试和部署项目？在这种情况下，开发人员不同的处理选择将会影响项目的余下部分。
您的选择可能会使你陷入困境，也可能会在将来证明您是一位Java架构大师。我们假定后者是我们奋斗的目标，接下来就进入我们的正题。<br />
<br />
构
建一个Java项目可以使用很多工具，其中包括Ant。Ant作为一款具有革命性的工具，一直是众多开发者使用工具中的首选，它能使开发人员摆脱使用大量
make命令的苦海。对于那些不太熟悉make命令的人来说，他们有充足的理由来表明使用命令并不是构建Java项目的最好工具，因为它不具备平台独立性
并且不易使用。Ant的出现解决了以上的问题，它使用了一个平台独立的工具，该工具能够解析XML配置文件，即build.xml。虽然Ant由于其诸多
的优点而备受欢迎，但它同样有一些缺点。build.xml文件由于采用了极其简短的描述方式，使得开发人员需要预先学习它的语法。虽然学习曲线不是很陡
峭，但Java开发人员更应该把时间放在开发上面。<br />
<br />
Maven是新一代的生力军，它的境遇正好和几年前的Ant十分类似。
Maven1.0已经历了几年的时间，并且作为Ant的替代品已被广大的开发人员所接收，但它并没有在很大程度使开发人员从Ant的build.xml文
件中解脱出来。Maven1.0速度慢并且笨拙，使用起来的困难度并不亚于使用Ant的项目。事实上，它的核心是基于Ant实现的。在经过了几乎彻底的重
写后，Maven2.0诞生了。<br />
<br />
<strong><span style="font-size: 16px;">Maven2.0的优点</span></strong><br />
<br />
Maven2.0有许多很好功能，这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java项目，并且想使该项目快速地开展下去，Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点：<br />
--标准的项目布局和项目结构生成器<br />
--标准的依赖管理机制<br />
--多项目支持<br />
--在开发者需要的时候及时地下载新的插件和功能部件<br />
--生成最新项目信息的网站<br />
--集成了源代码控制软件：CVS和Subversion<br />
<br />
以上列表展示的只是Maven2.0特点中的一小部分。但这足以使Maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道Maven是个什么东西了，接下来让我们看看如何使用它。<br />
<br />
<strong><span style="font-size: 16px;">入门</span></strong><br />
<br />
我
们要做的第一件事情就是设置目录结构，但这并不需要让我们手动设置，Maven会根据您开发的项目类型来为您做这件事。一旦您下载并解压了最新发布的
Maven 2.0，您应该将Maven所在目录下面的bin目录添加到您的系统路径下。您可以运行命令mvn -version来测试您的安装。<br />
<br />
既然已经安装上了工具，让我们看看创建一个简单的Java项目的例子。Maven使用原型来决定目录结构是如何展现的。Maven自带了几个内建的原型，您也可以自定义原型。<br />
<br />
<span style="color: blue;">mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app</span><br />
<br />
您看，这就生成了我们的项目布局。<br />
my-app<br />
----src<br />
&nbsp;&nbsp;&nbsp;&nbsp;----main<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----com<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----oreilly<br />
&nbsp;&nbsp;&nbsp;&nbsp;----test<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----com<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----oreilly<br />
<br />
对，
就这么简单。这种目录结构可以通过创建一个新的原型来覆写，但并不推荐这么做，因为Maven的一个优点就是使用标准的目录结构。该目录结构包含两个源代
码树，一个是Java应用程序的源代码，另一个是单元测试代码。同时您也许会注意到，当第一次运行Maven的时候，它会进行一些下载工作。当您开始调用
工具时，Maven会根据您使用的插件来更新自身的一些所需功能。Maven默认会从Ibiblio存储库中得到更新。您可以在Maven安装目录下的
conf目录中，或者项目自身中修改Maven远程存储库的选择。<br />
您会发现Maven在my-app目录下创建了一个pom.xml文件。这是项
目的最基本部分。pom.xml文件包含了一组指令，这些指令告诉Maven如何构建项目和包含哪些其它的特殊指令（POM是&#8220;项目对象模型&#8221;的缩写）。
在默认的情况下，Maven包含了JUnit的依赖以此来鼓励单元测试。<br />
<br />
<pre>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
&nbsp;&nbsp;&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&lt;packaging&gt;jar&lt;/packaging&gt;<br />
&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&lt;name&gt;Maven Quick Start Archetype&lt;/name&gt;<br />
&nbsp;&nbsp;&lt;url&gt;http://maven.apache.org&lt;/url&gt;<br />
&nbsp;&nbsp;&lt;dependencies&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;junit&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;3.8.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;scope&gt;test&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&lt;/dependencies&gt;<br />
&lt;/project&gt;</pre>
<br />
<br />
创建完项目后，我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。<br />
--mvn test：运行应用程序中的单元测试<br />
--mvn package：依据项目生成jar文件<br />
--mvn install：将项目的jar文件添加到库中，&#61548;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以备依赖此项目时使用<br />
--mvn site：生成项目相关信息的网站<br />
--mvn clean：清除目标目录中的生成结果<br />
--mvn eclipse:eclipse：生成Eclipse项目文件<br />
<br />
接下来我们看看稍微复杂点的地方，我们知道手动开始一个Java web项目比手动开始一个简单的Java项目更耗时，然而Maven的使用则能化难为易。下面的例子（实际上是一行命令）展现了项目结构的构造。<br />
<span style="color: blue;">mvn archetype:create -DgroupId=com.oreilly<br />
&nbsp;&nbsp;&nbsp;&nbsp;-DartifactId=Oreilly<br />
&nbsp;&nbsp;&nbsp;&nbsp;-DarchetypeArtifactId=maven-archetype-webapp</span><br />
<br />
生成的结果结构如下所示：<br />
Oreilly<br />
----src<br />
&nbsp;&nbsp;&nbsp;&nbsp;----main<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----webapp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----WEB-INF<br />
<br />
这
一次，我们的项目由于支持了将包含在war文件中的web资源而设置有所不同。pom.xml文件中将包含一行来表明项目应该被打包成war文
件：&lt;packaging&gt;war&lt;/packaging&gt;。现在就可以使用mvn
package命令来生成war文件。不用担心如何从WEB-INF/lib目录中得到依赖项，在依赖属性值被设置成compile的情况下，Maven
会自动包含依赖项。也可以将以下代码添加到pom.xml文件中来改变war文件的名称：<br />
<pre>&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;finalName&gt;PromoteC&lt;/finalName&gt;<br />
&lt;/build&gt;</pre>
<br />
<br />
<strong><span style="font-size: 16px;">依赖管理</span></strong><br />
<br />
创
建好项目结构，添加完一些代码，测试并编译好应用程序后，接下来可以看看Maven是如何处理依赖关系的。为了给项目添加一个依赖项，必须将此依赖项添加
到pom.xml文件中。下次运行Maven的时候，它将从Ibiblio存储库中得到这个依赖项，并且将此依赖项添加到项目构建路径中。<br />
<br />
关
于依赖的问题有几个重要的事情值得注意。在写这篇文章的时候，Maven中最大的麻烦之处就是不能从Maven存储库中获取Sun的jar文件。这个问题
归因于Sun在其代码中设置的许可证限制。解决这个问题的办法有两种，一种是下载这些代码并将它们安装在您本地的存储库中，另一种是做一个外部声明，并将
这个声明指向文件系统中依赖项所在的位置。希望Sun能够尽早地创建自己的存储库，尽管如此，Maven也会被升级来使之能够下载这些资源，只是在下载之
前它会提示用户接受许可证协议。<br />
<br />
另外一个麻烦的地方就是有时候使用的最新的库文件可能在远程存储库中不存在。另一种可能是由于无法访问
Internet，需要所有的依赖项都能在本地获取。这些问题的最好解决方案就是将jar文件安装到本地的存储库中。将本地的存储库放在一台web服务器
上也同样是个便利之举，这样整个开发团队就能从此获益，每个人都没有必要去管理自己的存储库了。改变Maven的存储库路径只需简单地编辑其安装目录下
conf文件夹下面的settings.xml文件即可。<br />
<br />
在Maven中使用依赖是简单的。让我们看看往上述pom.xml文件中添加一
个依赖项的情况。我们虽然已经使用了JUnit，但让我们将功能强大的Quartz库添加到项目中。Quartz是一款用纯Java编写的关于时间安排的
开源项目，它是您时间安排需求方面的很好的选择。<br />
<pre>&lt;dependency&gt;<br />
&nbsp;&nbsp; &lt;groupId&gt;quartz&lt;/groupId&gt;<br />
&nbsp;&nbsp; &lt;artifactId&gt;quartz&lt;/artifactId&gt;<br />
&nbsp;&nbsp; &lt;version&gt;1.5.1&lt;/version&gt;<br />
&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&lt;/dependency&gt;</pre>
<br />
<br />
我
们仅仅只需添加&lt;dependencies&gt;这个元素，Maven就能下载Quartz并将其作为项目中的一个依赖项。不用担心Quartz
的依赖项，一个Maven的存储库将包含依赖项自身依赖的资源信息，当Maven下载Quartz的时候，它自身的依赖资源也同样会被下载。为了验证版本
为1.5.1的Quartz存在于Ibiblio库中，我们可以浏览Maven存储库。注意到scope参数的使用，它告诉了Maven依赖项在何种阶段
是所需的。在使用JUnit的情况下，我们设置scope参数的值为test来告诉Maven这个依赖项只是在测试阶段所需的，而不是运行时所需的资源。
以下是scope参数值的说明：<br />
--compile：默认值。表明是所有任务所需的资源<br />
--test：运行所有的测试用例时所需资源<br />
--runtime：表明是运行时所需资源<br />
--provided：JDK部分或应用服务器的classpath所需的资源<br />
<br />
现
在，如何处理那些麻烦的Sun的jar包和那些需要但却不能在远程存储库中找到的jar包了？我们必须使用Maven来手动将这些jar包安装到本地的存
储库中。不用担心，这没有听上去那么困难。为了做个示例，我们将安装Java
Activation框架的jar包。首先我们必须从Sun的站点上下载此jar包，接着我们使用Maven将它导入本地的存储库中。您自己也可以按照
Maven上传资源指南中的指导将缺少的jar包安装到Ibiblio中。<br />
<span style="color: blue;">mvn install:install-file -Dfile=activation.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;-DgroupId=javax.activation -DartifactId=activation<br />
&nbsp;&nbsp;&nbsp;&nbsp;-Dversion=1.0 -Dpackaging=jar</span><br />
<br />
现
在，新的jar包就像其它的项目依赖项一样安装到了本地存储库中。在只需添加依赖声明后，我们就已准备就绪了。在添加jar包和声明它们为依赖项时，必须
确保版本信息的正确性。版本的不匹配会导致Maven在寻找资源时的失败。在导入Sun的jar包时，如果您需要寻求标准命名参数的帮助，可以参考Sun
标准jar包命名。记住，在目前您不能通过存储库来公开发布这些jar包，这将违反Sun的使用条款。<br />
<pre>&lt;dependency&gt;<br />
&nbsp;&nbsp; &lt;groupId&gt;javax.activation&lt;/groupId&gt;<br />
&nbsp;&nbsp; &lt;artifactId&gt;activation&lt;/artifactId&gt;<br />
&nbsp;&nbsp; &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&lt;/dependency&gt;</pre>
<br />
<br />
您
或许想将依赖项存入一个源代码控制器的库中，源代码控制器决不能执行这个任务。依赖项是经常变化的，并且通常有一套数字方案来标明其版本。这就是说，您明
确地希望有一个内部远程存储库的备份，如果您有一个，这将确保在存储库服务器崩溃并且不能恢复的情况下，您不会丢失所有的自定义资源。不将依赖项放入源代
码控制器中也会节省源代码控制器的存储库服务器上的大量磁盘空间。<br />
<br />
<strong><span style="font-size: 16px;">配置存储库</span></strong><br />
<br />
要
求项目的每个开发者必须在conf目录中配置存储库是不方便的，所以Maven可以同时查看多个存储库并且将它们全部配置在pom.xml文件中。让我们
看看一个例子，它展示了如何在应用程序用使用多个存储库。在以下从pom.xml文件摘录的片断中，我们设置了两个存储库来让Maven寻找依赖项。
Ibiblio一直是默认的存储库，我们又添加了Planet Mirror作为后援存储库。我们也可以让团队使用的本地web服务器作为第二个存储库。<br />
<pre>&lt;repositories&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;repository&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;Ibiblio&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;Ibiblio&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url&gt;http://www.ibiblio.org/maven/&lt;/url&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/repository&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;repository&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;PlanetMirror&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;Planet Mirror&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url&gt;http://public.planetmirror.com/pub/maven/&lt;/url&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/repository&gt;<br />
&nbsp;&nbsp;&lt;/repositories&gt;</pre>
<br />
<br />
<strong><span style="font-size: 16px;">使用pom.xml父文件来构建多个项目</span></strong><br />
<br />
软
件公司通常的一种做法就是将多个项目构建到主要产品中。维护依赖关系链和一次性地构建整个产品足以成为一个挑战，但是如果使用Maven的话，事情将变得
简单。如果您创建了一个指向其它子模块的pom.xml父文件，Maven将为您处理整个构建过程。它将分析每个子模块的pom.xml文件，并且按照这
些子模块的相互依赖顺序来构建项目。如果每个项目明确地指明它们的依赖项，那么子模块在父文件中的放置顺序是不造成任何影响的。但是考虑到其他的开发者，
最好保证子模块在pom.xml父文件中的放置顺序和您期望的子项目被构建的顺序一样。下面我们看个示例。<br />
pom.xml主文件如下：<br />
<pre>&lt;project&gt;<br />
&nbsp;&nbsp;&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&lt;packaging&gt;pom&lt;/packaging&gt;<br />
&nbsp;&nbsp;&lt;modules&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;module&gt;Common&lt;/module&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;module&gt;Utilities&lt;/module&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;module&gt;Application&lt;/module&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;module&gt;WebApplication&lt;/module&gt;<br />
&nbsp;&nbsp;&lt;/modules&gt;<br />
&lt;/project&gt;</pre>
<br />
<br />
我
们需要确保WebApplication子模块包含了所有的三个jar包，所以需要将这些jar包声明为依赖项。在这个例子中，Utilities项目依
赖于Common项目，所以Utilities项目中需要添加一个对Common项目的依赖。Application子模块也是同样的道理，因为它依赖于
Common和Utilities项目，Utilities又赖于Common。如果这个例子中有60个子模块，并且它们都相互依赖，这会使得新开发者难
以算出什么项目依赖于其它项目，所以这正好是要求确保pom.xml父文件中项目放置顺序要清除的原因。<br />
<br />
以下是Utility模块的依赖项：<br />
<pre>&lt;dependencies&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Common&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&lt;/dependencies&gt;</pre>
<br />
<br />
以下是如何声明Application模块的依赖项：<br />
<pre>&lt;dependencies&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Common&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Utilities&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&lt;/dependencies&gt;</pre>
<br />
<br />
最后是WebApplication模块的依赖项：<br />
<pre>&lt;dependencies&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Common&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Utilities&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Application&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;/dependencies&gt;</pre>
<br />
<br />
现在，我们只需为每个子模块的pom.xml文件添加一个元素来表明它们是一个逻辑构建的一部分：<br />
<pre>&lt;parent&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp;&nbsp;&lt;/parent&gt;</pre>
<br />
<br />
在pom.xml父文件所在的同一个目录中，存在有项目目录：Common, Utilities, Application, 和WebApplication。当我们在该目录中运行mvn package命令时，这些项目会按照依赖顺序而被构建。<br />
<br />
<strong><span style="font-size: 16px;">插件和报表</span></strong><br />
<br />
Maven2.0
有大量的插件可以使用。不幸的是，由于Maven的重写，Maven1.0的插件不能在2.0中使用。尽管如此，还是存在一些可以使用的Maven2.0
的插件。下面pom.xml文件中的插件配置示例是直接从Maven2.0网站上得来的。这个插件是用来配置编译选项的。<br />
<pre>&lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;source&gt;1.5&lt;/source&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;target&gt;1.5&lt;/target&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />
&nbsp;&nbsp;&lt;/plugins&gt;</pre>
<br />
<br />
Maven报表插件可以用来生成不同的报表，这些报表是在当你使用mvn site命令生成项目的站点时产生的。下面的例子展示了如何使用&lt;reporting&gt;元素来配置这类插件中的一个。<br />
<pre>&lt;reporting&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugins&gt;<br />
&nbsp;&nbsp;&lt;/reporting&gt;</pre>
<br />
<br />
Maven Plugin Matrix是一个十分实用的工具，它能给出哪些Maven插件适合于哪些版本的Maven。<br />
<br />
<strong><span style="font-size: 16px;">Maven 和 Eclipse</span><br />
<br />
如
何能使全世界最好的IDE变得更好了？答案是使用Maven2的插件，它能帮助您寻找依赖项并自动地将它们添加到pom.xml文件中。虽然最好的方法是
首先使用Maven来创建您的项目，然后再用命令mvn
eclipse:eclipse来生成Eclipse项目文件，这样最初就能得到一个好的目录结构，但Maven也可通过其Eclipse插件来管理任何
项目。<br />
<br />
您可以在Eclipse自身的升级器中输入站点http://m2eclipse.codehaus.org/来安装插件。在安装
完成并重启IDE后，您需要在Eclipse的参数选项中配置此插件，设置本地存储库的位置。这是很重要的一步，因为如果Eclipse默认的存储库不能
匹配您默认的需求，Maven会重新下载您的依赖项。配置完成后，将项目导入Eclipse，鼠标右击该项目，选择Maven 2 -&gt;
Enable。现在您可以回到之前的步骤，您可以有更多的选项比如添加依赖项，这将弹出一个搜索框，您可以搜索依赖项并添加它们，插件会替你编辑
pom.xml文件。<br />
<br />
插件会使用Maven来构建您的项目，就像Eclipse使用Ant来构建项目一样。如果您想获取更多的关于Eclipse整合Maven的信息，可以查阅Maven站点上的Eclipse集成Maven 2.x使用指南。<br />
<br />
另
一方面，如果您是一个IntelliJ使用爱好者，您也能通过运行指令mvn
idea:idea来完成同样的任务。这些IDE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工具能够节省开发人员的时间。例如，如果一个开发人员为一个项目添加了一些特征，团队里
的其他开发人员只需从源代码控制器的存储库中重新获取项目文件即可，这就节省了每个开发人员必须配置IDE的时间。<br />
<br />
<strong><span style="font-size: 16px;">结论</span></strong><br />
<br />
Maven2.0
有着许多实用的特点，并且完成任务十分出色。Maven中最值得称赞的地方就是使用了标准的目录结构和部署。这就使得开发人员能够适应不同的项目，并且不
用学习任何结构方面新的东西，也不用掌握特殊的指令来构建结构。Maven可以通过纯脚本来实现。在文档方面，由于使用了项目站点构建工具，所以当项目构
建完成后，您可以查看所有开发的当前状态。<br />
<br />
毫无疑问，当提到构建配置的伸缩性，易用性和项目管理方面时，Maven2.0足可以将Ant
取而代之。在接下来的几年内，我们将看到Maven作为标准构建技术更多的使用，直到有人带来了大家公认的&#8220;高级捕鼠器&#8221;。您可以从下面列出的Maven
项目站点上下载Maven。<br />
<br />
<strong>资源</strong><br />
Matrix:<a href="http://www.matrix.org.cn/" target="_new">http://www.matrix.org.cn/</a><br />
Onjava:<a href="http://www.onjava.com/" target="_new">http://www.onjava.com/</a><br />
Maven项目站点<br />
<br />
Chris Hardin 是McLeod软件公司的高级Java工程师。</strong></div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/307750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-30 13:52 <a href="http://www.blogjava.net/sealyu/archive/2009/12/30/307750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>