﻿<?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-　　　　　　　　　　　　　彬 ^_^ -随笔分类-maven2</title><link>http://www.blogjava.net/libin2722/category/28813.html</link><description>虚其心，可解天下之问；专其心，可治天下之学；静其心，可悟天下之理；恒其心，可成天下之业。</description><language>zh-cn</language><lastBuildDate>Sat, 15 Mar 2008 18:54:59 GMT</lastBuildDate><pubDate>Sat, 15 Mar 2008 18:54:59 GMT</pubDate><ttl>60</ttl><item><title>MAVEN----maven2新特性</title><link>http://www.blogjava.net/libin2722/archive/2008/03/15/186478.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 15 Mar 2008 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/03/15/186478.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/186478.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/03/15/186478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/186478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/186478.html</trackback:ping><description><![CDATA[&nbsp;
<div class="Content-body" id="logPanel">本文主要阐述 Maven2 的新特性，这些新特性可以大大地缩短了开发管理中的工作量，使得开发人员将精力集中在实际的业务问题上。 <br />
Maven 出现到现在也有很长时间了，初识它的感觉至今仍清晰的印在脑海中。现在想来，当时从 Ant 移情 Maven 的想法其实很朴素，就是因为 Maven 可以以网站的形式展现与项目相关的信息，如开发人员列表、各种 Report。这种方式为项目的构建带来了极大的方便，尤其是 Report 的。试想对于产生的 Junit-Report、JavaDoc、CheckStyle、PMD 等报告，如果没有一个统一的入口，每次切换目录是多么令人厌烦的事情！ <br />
<br />
Maven 无疑是相当成功的，这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven 取得成功的原因很简单：在简化构建脚本的同时，功能并没有缩水，反而有所增强；提供汇集项目信息的工具，并以相当友好的方式呈现；丰富的插件简化了工作。如此有力的工具出现，自然是争相使用。 <br />
<br />
新特性 <br />
<br />
如今 Maven2 已经推出，Maven 的官方网站称，Maven2 相对于 Maven1 是一个相当大的转变，甚至不惜牺牲兼容性来达到这一目的。（为了 Maven1 的用户着想，Maven1 仍在继续他的使命。）如此大的变动到底换来了什么样的结果？ <br />
<br />
1． 更快、更简单 <br />
<br />
比起 Maven1 那不急不慢的运行速度，Maven2在速度上有了质的飞跃，甚至与Ant相比也毫不逊色（当然，下载不算）。除此之外，"简化工作，使用业界公认的最佳实践"也是是 Maven2 的另一大主题，其他的新特性无处不在体现 Maven2 为简化工作而做出的努力。 <br />
<br />
2． 更少的配置文件 <br />
<br />
Maven1 和 Maven2 主要配置文件的对比： <br />
<br />
Maven1：project.xml、maven.xml、project.properties和build.properties。 <br />
Maven2：pom.xml和settings.xml。 <br />
POM是Maven的核心对象模型，在Maven2中POM已由project.xml转移到pom.xml中使用，版本也由3升级为4。对于项目，一般只需要pom.xml就行了。 <br />
<br />
在Maven2中不需要也不提倡使用maven.xml，原因如下： <br />
<br />
plugin的易用性的增强。 <br />
散布于maven.xml中的内容难以在不同项目间共享，也不利于维护。在Maven2中建议使用自定义的plugin来封装这些内容。 <br />
如果仍期望能够使用类似maven.xml的功能，如&lt;preGoal&gt;，请参考Inserting non-standard build steps using preGoals and postGoals。 <br />
<br />
在Maven2中，配置使用settings.xml，它取代了原有的project.properties和build.properties。配置在Maven2中存在两种级别： <br />
<br />
用户级，针对操作系统登录用户而言。一般在$home/.m2/，对于windows用户，就是目录：C:\Documents and Settings\用户名\.m2\settings.xml。 <br />
全局级：一般在%M2_HOME%/conf/settings.xml，M2_HOME是Maven2的根目录环境变量名。 <br />
在settings.xml中可以配置，如本地Repository、proxy等等，关于settings.xml的结构可以从Maven的官方网站上获取。 <br />
<br />
3． Plugin语言更换 <br />
<br />
在Maven2中，编写plugin的语言由jelly变更为Java和BeanShell。Java在速度上更有优势，而且开发人员的熟悉程度更高。对于其他的流行脚本，如groovy，Maven的官方网站的意见是，等待其更成熟时再考虑 <br />
<br />
。 <br />
4． 提供预定义的目录模板 <br />
<br />
好的目录结构可以使开发人员更容易理解项目，为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构，为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下： <br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>项目根/&nbsp;
            pom.xml
            src/&nbsp;
            main/                    项目主体目录
            java                  源代码目录
            resources         所需 资源目录
            fileters             资源过滤文件目录
            assembly
            config              配置文件目录
            test/&nbsp;
            main/&nbsp;
            java
            resources
            fileters
            site                            与site相关的资源文件
            target/                        输出目录
            classes                   项目主题输出目录
            test-classes             测试输出目录
            site                        项木site输出目录
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<br />
使用目录模板，可以使pom.xml更简洁。因为Maven2已经根据缺省目录，预定义了相关的动作，而无需人工的干预。以resources目录为例： <br />
<br />
src/main/resources，负责管理项目主体的资源。在使用Maven2执行compile之后，这个目录中的所有文件及子目录，会复制到target/classes目录中，为以后的打包提供了方便。 <br />
src/test/resources，负责管理项目测试的资源。在使用Maven2执行test-compile之后，这个目录中的所有文件及子目录，会复制到target/test-classes目录中，为后续的测试做好了准备。 <br />
这些动作在 Maven1 中，是需要在 maven.xml 中使用&lt;preGoal&gt;或&lt;postGoal&gt;来完成的。如今，完全不需要在pom.xml中指定就能够自动完成。在src和 test都使用resources，方便构建和测试，这种方式本就已是前人的经验。通过使用Maven2，使这个经验在开发团队中得到普及。 <br />
<br />
创建标准目录模板，可以通过如下命令： <br />
<br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<br />
groupId和artifactId的含义与Maven1中的含义一样，参数artifactId的值会作为项目根目录的名字。除了建立相应的目录之外，Maven2还会创建缺省的pom.xml。 <br />
<br />
Maven2也考虑到：不同类型的项目需要拥有不同的目录结构。如创建web项目，可以使用命令： <br />
<br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>mvn archetype:create -DgroupId=com.mycompany.app
            -DartifactId=my-webapp
            -DarchetypeArtifactId=maven-archetype-webapp
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
5． 生命周期的引入 <br />
<br />
在Maven2中有了明确的生命周期概念，而且都提供与之对应的命令，使得项目构建更加清晰明了。主要的生命周期阶段： <br />
<br />
validate，验证工程是否正确，所有需要的资源是否可用。 <br />
compile，编译项目的源代码。 <br />
test-compile，编译项目测试代码。 <br />
test，使用已编译的测试代码，测试已编译的源代码。 <br />
package，已发布的格式，如jar，将已编译的源代码打包。 <br />
integration-test，在集成测试可以运行的环境中处理和发布包。 <br />
verify，运行任何检查，验证包是否有效且达到质量标准。 <br />
install，把包安装在本地的repository中，可以被其他工程作为依赖来使用 <br />
deploy，在整合或者发布环境下执行，将最终版本的包拷贝到远程的repository，使得其他的开发者或者工程可以共享。 <br />
generate-sources，产生应用需要的任何额外的源代码，如xdoclet。 <br />
如果要执行项目编译，那么直接输入：mvn compile即可，对于其他的阶段可以类推。阶段之间是存在依赖关系（dependency）的，如test依赖test-compile。在执行 mvn test时，会先运行mvn test-compile，然后才是mvn test。 <br />
<br />
6． 新增Dependency Scope <br />
<br />
在POM 4中，&lt;dependency&gt;中还引入了&lt;scope&gt;，它主要管理依赖的部署。目前&lt;scope&gt;可以使用5个值： <br />
<br />
compile，缺省值，适用于所有阶段，会随着项目一起发布。 <br />
provided，类似compile，期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 <br />
runtime，只在运行时使用，如JDBC驱动，适用运行和测试阶段。 <br />
test，只在测试时使用，用于编译和运行测试代码。不会随项目发布。 <br />
system，类似provided，需要显式提供包含依赖的jar，Maven不会在Repository中查找它。 <br />
&lt;scope&gt;的使用举例： <br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;dependency&gt;
            &lt;groupId&gt;hibernate&lt;/groupId&gt;
            &lt;artifactId&gt;hibernate&lt;/artifactId&gt;
            &lt;version&gt;3.0.3&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
            &lt;/dependency&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
7． 传递依赖，简化依赖管理 <br />
<br />
在Maven1中，需要把依赖所需要的包也一并列出。这对于使用类似如Hibernate的用户来说所操的心太多了，而且也不方便。在Maven2中实现了传递依赖，如此对于Hibernate所依赖的包，Maven2会自动下载，开发人员只需关心Hibernate即可。 <br />
<br />
注意：只有得到Maven支持的依赖，通常是plugin形式出现，才能获得这个特性。而且对于一些老的plugin，可能由于时间的关系不支持传递依赖。如至少在Maven 2.0.1中，对于Hibernate 2.1.2，仍然需要显式列出Hibernate 2.1.2所依赖的包。 <br />
<a href="http://sherrydong.blog.chinajavaworld.com/entry/3433/0/%5Bimg%5DC:%5CDocuments%20and%20Settings%5COwner%5C%E6%A1%8C%E9%9D%A2%5Ctable1.gif" target="_blank"><img title="点击在新窗口打开" alt="" src="http://sherrydong.blog.chinajavaworld.com/entry/3433/0/%5Bimg%5DC:%5CDocuments%20and%20Settings%5COwner%5C%E6%A1%8C%E9%9D%A2%5Ctable1.gif" border="0" /></a>[/img] <br />
<br />
<div id="rating"><script src="http://sherrydong.blog.chinajavaworld.com/dwr/interface/Rate.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/dwr/engine.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/dwr/util.js" type="text/javascript"></script><script language="JavaScript" src="http://sherrydong.blog.chinajavaworld.com/js/prototype/prototype.js" type="text/javascript"></script><script language="JavaScript" src="http://sherrydong.blog.chinajavaworld.com/js/events.js" type="text/javascript"></script><script language="JavaScript" src="http://sherrydong.blog.chinajavaworld.com/js/scriptaculous/scriptaculous.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/js/scriptaculous/builder.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/js/scriptaculous/effects.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/js/scriptaculous/dragdrop.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/js/scriptaculous/controls.js" type="text/javascript"></script><script src="http://sherrydong.blog.chinajavaworld.com/js/scriptaculous/slider.js" type="text/javascript"></script><script type="text/javascript">

      var userRating = 0;
        var inProgress = false;

        var RateInclude = {

            update: function() {
                Rate.getMeanRating('1', '3433', {
                    callback:function(data) {
                        RateInclude.updateMeanRating(data);
                    }
                });
                Rate.getRatingCount('1', '3433', {
                    callback:function(data) {
                        RateInclude.updateRatingCount(data);
                    }
                });
                Rate.getUserRating('1', '3433', {
                    callback:function(data) {
                        RateInclude.updateUserRating(data);
                    }
                });
            },

            updateMeanRating: function(data) {
                // change the title of the span to reflect the new mean rating
                $('jive-content-avgrating-score').title = '<@ww.text name="rate.avg_user_rating.label" /> ' + data;

                // loop though each mean rating icon and change according to the new mean rating
                 
                    if (data >= 1) {
                        $('jive-icon-avgrating-1').className = 'jive-icon-avgrating-on';
                    } else if (data >= (1 - 0.50)) {
                        $('jive-icon-avgrating-1').className = 'jive-icon-avgrating-half'
                    } else {
                        $('jive-icon-avgrating-1').className = 'jive-icon-avgrating-off'
                    }
                
                    if (data >= 2) {
                        $('jive-icon-avgrating-2').className = 'jive-icon-avgrating-on';
                    } else if (data >= (2 - 0.50)) {
                        $('jive-icon-avgrating-2').className = 'jive-icon-avgrating-half'
                    } else {
                        $('jive-icon-avgrating-2').className = 'jive-icon-avgrating-off'
                    }
                
                    if (data >= 3) {
                        $('jive-icon-avgrating-3').className = 'jive-icon-avgrating-on';
                    } else if (data >= (3 - 0.50)) {
                        $('jive-icon-avgrating-3').className = 'jive-icon-avgrating-half'
                    } else {
                        $('jive-icon-avgrating-3').className = 'jive-icon-avgrating-off'
                    }
                
                    if (data >= 4) {
                        $('jive-icon-avgrating-4').className = 'jive-icon-avgrating-on';
                    } else if (data >= (4 - 0.50)) {
                        $('jive-icon-avgrating-4').className = 'jive-icon-avgrating-half'
                    } else {
                        $('jive-icon-avgrating-4').className = 'jive-icon-avgrating-off'
                    }
                
                    if (data >= 5) {
                        $('jive-icon-avgrating-5').className = 'jive-icon-avgrating-on';
                    } else if (data >= (5 - 0.50)) {
                        $('jive-icon-avgrating-5').className = 'jive-icon-avgrating-half'
                    } else {
                        $('jive-icon-avgrating-5').className = 'jive-icon-avgrating-off'
                    }
                
            },

            updateRatingCount: function(data) {
                // update the rating count based on the new rating
                var ratingString = (data == 1) ? '评分' : '评分';
                $('jive-content-avgrating-count').innerHTML= '(' + data + ' ' + ratingString + ')';
            },

            updateUserRating: function(data) {
                // set the javascript variable userRating to the new user rating value
                userRating = data;

                // reload the user rating
                RateInclude.showUserRating(data);
            },

            addRating: function(score) {
                inProgress = true;

                var objectType = '1';
                var objectID = '3433';

                // hide user rating
                $('jive-content-userrating-score').style.display = 'none';

                // show saving message
                $('jive-content-userrating-saved').innerHTML = '正在保存...';
                $('jive-content-userrating-saved').style.display = '';

                // dwr call to add rating
                Rate.addRating(objectType, objectID, score, {
                    callback:function() {
                        RateInclude.update();

                        // changed saving message to saved
                        $('jive-content-userrating-saved').innerHTML = '已经保存.';

                        // hide saved message
                        Effect.Fade('jive-content-userrating-saved', {afterFinish:RateInclude.testShow});
     
                        inProgress = false;
                    }
                });
            },

            testShow: function() {
                $('jive-content-userrating-score').style.display = '';
            },

            showUserRating: function(score) {
                
                    if (score == 0 || inProgress) {
                        $('jive-content-userrating-desc').innerHTML = '';
                    }
                    if (score >= 1) {
                        $('jive-icon-userrating-1').className = 'jive-icon-userrating-on';
                        if (score == 1) {
                            $('jive-content-userrating-desc').innerHTML = '很差';
                        }
                    } else {
                        $('jive-icon-userrating-1').className = 'jive-icon-userrating-off'
                    }
                
                    if (score == 0 || inProgress) {
                        $('jive-content-userrating-desc').innerHTML = '';
                    }
                    if (score >= 2) {
                        $('jive-icon-userrating-2').className = 'jive-icon-userrating-on';
                        if (score == 2) {
                            $('jive-content-userrating-desc').innerHTML = '较差';
                        }
                    } else {
                        $('jive-icon-userrating-2').className = 'jive-icon-userrating-off'
                    }
                
                    if (score == 0 || inProgress) {
                        $('jive-content-userrating-desc').innerHTML = '';
                    }
                    if (score >= 3) {
                        $('jive-icon-userrating-3').className = 'jive-icon-userrating-on';
                        if (score == 3) {
                            $('jive-content-userrating-desc').innerHTML = '一般';
                        }
                    } else {
                        $('jive-icon-userrating-3').className = 'jive-icon-userrating-off'
                    }
                
                    if (score == 0 || inProgress) {
                        $('jive-content-userrating-desc').innerHTML = '';
                    }
                    if (score >= 4) {
                        $('jive-icon-userrating-4').className = 'jive-icon-userrating-on';
                        if (score == 4) {
                            $('jive-content-userrating-desc').innerHTML = '不错';
                        }
                    } else {
                        $('jive-icon-userrating-4').className = 'jive-icon-userrating-off'
                    }
                
                    if (score == 0 || inProgress) {
                        $('jive-content-userrating-desc').innerHTML = '';
                    }
                    if (score >= 5) {
                        $('jive-icon-userrating-5').className = 'jive-icon-userrating-on';
                        if (score == 5) {
                            $('jive-content-userrating-desc').innerHTML = '很好';
                        }
                    } else {
                        $('jive-icon-userrating-5').className = 'jive-icon-userrating-off'
                    }
                
            }
        };

    </script>
<div id="jive-content-rating">
<div id="jive-content-avgrating">
<div id="jive-content-avgrating-title" style="padding-right: 38px">平均得分</div>
<!--@jive.ratingdisplay meanrating="" /-->
<div id="jive-content-avgrating-score" title="平均分: 0"></div>
<div id="jive-content-avgrating-count">(0 次评分)</div>
</div>
</div>
<br />
<br />
<br />
<br />
</div>
<br />
</div>
<div class="Content-body"><img style="margin: 0px 2px -4px 0px" alt="" src="http://sherrydong.blog.chinajavaworld.com/images/From.gif" /><strong>文章来自:</strong> <a href="http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html" target="_blank">developerworks</a></div>
<img src ="http://www.blogjava.net/libin2722/aggbug/186478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-03-15 13:53 <a href="http://www.blogjava.net/libin2722/archive/2008/03/15/186478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用maven2 打ear包</title><link>http://www.blogjava.net/libin2722/archive/2008/02/02/179037.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 02 Feb 2008 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/02/02/179037.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/179037.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/02/02/179037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/179037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/179037.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">project&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0"</span><span style="color: #ff0000;"><br />
&nbsp;xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br />
&nbsp;xsi:schemaLocation</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/maven-v4_0_0.xsd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">4.0.0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">PM_Member_EAR</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">PM_Member_EAR</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">packaging</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">ear</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">packaging</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">0.1-SNAPSHOT</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">description</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">description</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">MemberWeb</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">0.1-SNAPSHOT</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">type</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">war</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">type</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">frontWeb</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">0.1-SNAPSHOT</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">type</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">war</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">type</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">finalName</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">newegg</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">finalName</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.apache.maven.plugins</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">maven-ear-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">modules</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">MemberWeb</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/MemberWeb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">frontWeb</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/frontWeb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">modules</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<img src ="http://www.blogjava.net/libin2722/aggbug/179037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-02-02 15:21 <a href="http://www.blogjava.net/libin2722/archive/2008/02/02/179037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再发一个maven</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174467.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174467.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174467.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174467.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174467.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 发表于 2007-3-19 12:45                                                                                                用 Maven 做项目管理在                        Java世界中我们很多的开发人员选择用 Ant来构建项目，一个  ...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/01/10/174467.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/174467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 23:10 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Maven 2 简介(最全的文档)</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174425.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:59:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174425.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174425.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174425.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 级别: 中级Sing Li (westmakaha@yahoo.com), 作家, Wrox Press2007 年 1 月 08 日现代软件项目不再是单个本地团队独立开发的产物。随着健壮的企业级开源组件的可用性日益提高，当今的软件项目需要项目团队间的动态协作，往往也需要混合使用在全球范围内创建和维护的组件。如今，Apache Maven 构建系统步入了第二代，它和由 Intern...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/01/10/174425.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/174425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:59 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mvn功能简介  </title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174420.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174420.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174420.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174420.html</trackback:ping><description><![CDATA[一个Maven2工程的核心就是这一个pom.xml，它包含了你的工程详细信息，如：版本、配置、依赖、测试、项目成员等等。学习maven2主要就是学习如何配置pom.xml。<br />
<br />
一个简单的而完全可操作的pom.xml如下所示：<br />
<br />
&lt;project xmlns="http://maven.apache.org/POM/4.0.0"<br />
&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;!--maven2--&gt;<br />
&lt;groupId&gt;ctzj_bss&lt;/groupId&gt; &lt;!-- 这个项目所属组的id，一般是项目所在的公司或组织的域名 --&gt;<br />
&lt;artifactId&gt;NRC&lt;/artifactId&gt; &lt;!-- 项目的id,和groupId一起组成这个项目的一个唯一id，以用在别的maven2工程中 --&gt;<br />
&lt;packaging&gt;jar&lt;/packaging&gt; &lt;!-- 最后这个工程的打包类型,在这里是打成jar包 --&gt;<br />
&lt;version&gt;1.0&lt;/version&gt; &lt;!-- 版本号 --&gt;<br />
&lt;name&gt;kenan nrc batch&lt;/name&gt; &lt;!-- 项目名, 区别于artifactId--&gt;<br />
&lt;description&gt;insert a nrc in kenan db&lt;/description&gt; &lt;!-- 项目描述,会出现在生成的工程站点上 --&gt;<br />
&lt;build&gt; &lt;!-- 项目的构建信息 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;testSourceDirectory&gt;test&lt;/testSourceDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;outputDirectory&gt;target\classes&lt;/outputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;testOutputDirectory&gt;target\test-classes&lt;/testOutputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;directory&gt;target&lt;/directory&gt; &lt;!-- 构建后生成文件(jar,site等)所在位置 --&gt;<br />
&lt;/build&gt;<br />
&lt;dependencies&gt; &lt;!-- 项目的依赖外接包,maven的优势之一 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;junit&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;3.8.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;test&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;reporting&gt; &lt;!-- 项目报表,有很多插件可供选择 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;outputDirectory&gt;target/site&lt;/outputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
&lt;/reporting&gt;<br />
&lt;/project&gt;<br />
<br />
在你配置了你的pom文件后，你就可以使用如下命令来运行maven2<br />
<br />
mvn compiler:compile 编译你的原文件<br />
mvn jar:jar 打包<br />
mvn site:site 生成项目站点<br />
<br />
<br />
接下来逐个介绍pom.xml的各个要素<br />
developor,organization and mail lit<br />
build<br />
dependencies<br />
reporting<br />
<br />
<br />
1.developor,organization and mail list<br />
<br />
可以在pom中加入开发人员列表,项目所属组织信息,邮件列表,这些信息会出现在生成的项目站点上<br />
<br />
&lt;organization&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;name&gt;CTZJ BSS&lt;/name&gt;<br />
&lt;/organization&gt;<br />
&lt;developers&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;developer&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Chen Lin&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;organization&gt;ZJHCsoft&lt;/organization&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;chenlin@zjhcsoft.com&lt;/email&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/developer&gt;<br />
&lt;/developers&gt;<br />
&lt;mailingLists&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mailingList&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;${pom.name} Dev List&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mailingList&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mailingList&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;${pom.name} User List&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mailingList&gt;<br />
&lt;/mailingLists&gt;<br />
<br />
2. build<br />
<br />
配置项目的构建信息,主要有指定目录,包括源代码、测试源代码、输出目录、资源目录等.如果没有特殊需求以上的pom已经足够了<br />
<br />
3. dependencies<br />
<br />
配置项目要用到的jar包.自认为maven对jar包的管理是它的一个重要特色.下面是一个jar包的配置:<br />
<br />
&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;groupId&gt;concurrent&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;concurrent&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;version&gt;1.3.4&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&lt;/dependency&gt;<br />
<br />
groupId: 没有特定的含义,一般来自同一组织的jar包会有相同的groupId值<br />
artifactId: 这个jar的id,一般是这个jar包的名称<br />
version: jar包的版本号,一般情况下,artifactId-version.jar就是这个jar包的文件名<br />
scope: 这个jar所影响的范围,compile指它会在编译源代码时用到.还有test,provide,runtime等值<br />
<br />
如果你不知道jar包的groupId和artifactId，可以到http://www.mavenregistry.com/ 进行查询<br />
<br />
一旦指定后,当你进行编译时，它就会到你的本地资源库<br />
<br />
另,如果你引入本地包，则需要先行将它安装到本地资料库(repository),使用如下命令<br />
<br />
mvn install:install-file -DgroupId=%groupId% -DartifactId=%artifactId% -DgeneratePom=true -Dfile=%file% -Dpackaging=jar -Dversion=%version%<br />
<br />
4. reporting<br />
<br />
通过使用相应的report plug-in可以生成各种各样的report.如javadoc,junit test report,代码检查等<br />
<br />
常用的常见有<br />
<br />
&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;!--java doc --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />
&lt;/plugin&gt;<br />
&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;!-- 代码检查 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;configLocation&gt;config/sun_checks.xml&lt;/configLocation&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&lt;/plugin&gt;<br />
&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt; &lt;!-- test 结果报表 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;surefire-report-maven-plugin&lt;/artifactId&gt;<br />
&lt;/plugin&gt;<br />
&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt; &lt;!-- 源代码的HTML化 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;jxr-maven-plugin&lt;/artifactId&gt;<br />
&lt;/plugin&gt;<br />
<br />
在maven的官方网站有可以找到更多的report plugin<br />
<br />
<br />
最后一个比较完整的pom.xml看起来像这样：<br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&lt;name&gt;CutoverModule&lt;/name&gt;<br />
&lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />
&lt;artifactId&gt;eai_cutover&lt;/artifactId&gt;<br />
&lt;url&gt;http://134.98.83.137:8081/scarab/issues&lt;/url&gt;<br />
&lt;inceptionYear&gt;2006&lt;/inceptionYear&gt;<br />
&lt;organization&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;name&gt;CTZJ BSS&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url&gt;http://www.zjhcsoft.com&lt;/url&gt;<br />
&lt;/organization&gt;<br />
&lt;version&gt;1.0&lt;/version&gt;<br />
&lt;description&gt;97 cutover batch module:invoke eai-adapter to update the phone number or value of<br />
c4/c5&lt;/description&gt;<br />
&lt;developers&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;developer&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Chen Lin&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;organization&gt;ZJHCSoft&lt;/organization&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;chenlin@zjhcsoft.com&lt;/email&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/developer&gt;<br />
&lt;/developers&gt;<br />
&lt;mailingLists&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mailingList&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;${pom.name} Dev List&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mailingList&gt;<br />
&lt;/mailingLists&gt;<br />
&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;testSourceDirectory&gt;test&lt;/testSourceDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;outputDirectory&gt;target\classes&lt;/outputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;testOutputDirectory&gt;target\test-classes&lt;/testOutputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;directory&gt;target&lt;/directory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-clean-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-resources-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.1.2&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-install-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;2.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
&lt;/build&gt;<br />
&lt;ciManagement&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;system&gt;continuum&lt;/system&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url&gt;http://localhost:8080/continuum/servlet/continuum&lt;/url&gt;<br />
&lt;/ciManagement&gt;<br />
&lt;scm&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;connection&gt;scm:local|E:/eclipseworkshop|EAIBatch&lt;/connection&gt;<br />
&lt;/scm&gt;<br />
&lt;dependencies&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;Eaiadapter&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;ta&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.0&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;grnds-common&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;4.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;junit&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;3.8.1&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;test&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;concurrent&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;concurrent&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.3.4&lt;/version&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scope&gt;compile&lt;/scope&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;reporting&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;outputDirectory&gt;target/site&lt;/outputDirectory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
&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; &lt;/plugin&gt;<br />
&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;&nbsp;&nbsp; &lt;configLocation&gt;config/sun_checks.xml&lt;/configLocation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&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;surefire-report-maven-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&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;jxr-maven-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
&lt;/reporting&gt;<br />
&lt;/project&gt;<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/174420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:46 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2.0学习笔记 </title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174421.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174421.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174421.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174421.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Maven简介Maven最初的目的是在Jakarta Turbine项目中使构建处理简单化。几个项目之间使用到的Ant build文件差异很小，各个JAR都存入CVS。因此希望有一个标准的方法构建各个工程，清晰的定义一个工程的组成，一个容易的方法去发布项目信息并且去提供一种在各个项目之间共享JAR包。结果出现了一种功能能用于构建和管理任何基于java的工程。Maven小组希望他们已经做到了...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/01/10/174421.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/174421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:46 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven中文手册 </title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174419.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174419.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174419.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174419.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174419.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Maven最早始于Jarkarta&nbsp;Turbine项目，目的是为了简化构建过程。这个项目下面有&nbsp;几个子项目，每个子项目都有自己的Ant文件，但是区别很小，而且生成的JAR&nbsp;文件都要check&nbsp;in到CVS中。我们希望有一种标准的方式来构建这些项目，一种可以&nbsp;清晰描述项目的方式，一种易于发布项目信息的方式，一种在多个项目之间共享JARs&nbsp;的...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/01/10/174419.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/174419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:45 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven使用手册</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174417.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174417.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174417.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174417.html</trackback:ping><description><![CDATA[<p>来自:http://www.jieesoft.com/modules.php?name=News&amp;file=article&amp;sid=155</p>
<p>Maven和ANT是Apache 推出的大名鼎鼎的Build和工程管理工具，国内有人将他做了汉化工作，并推出了maven手册汉化工作，其中手册已经完工，对广大程序员可是一大帮助。<a href="http://http//maven.huangdong.com/">进入该网站</a> <br />
<a>用户手册</a> </p>
<ol>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#关于手册">关于手册</a> <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#简介">简介</a> <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#项目对象模型">项目对象模型</a> <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#POM_处理机制">POM 处理机制</a>
    <ol>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#POM_插值机制">POM 插值机制</a>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#POM_继承机制">POM 继承机制</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用插件">使用插件</a> <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#maven_xml文件">maven.xml文件</a> <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#简单的maven_xml例子">简单的maven.xml例子</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#project节点">project节点</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#目标">目标</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#Jelly编程">Jelly编程</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#Maven_配置">Maven 配置</a> <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#属性的处理机制">属性的处理机制</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#插件的属性">插件的属性</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#行为属性">行为属性</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用代理">使用代理</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用多个远程Repositories">使用多个远程Repositories</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#项目设置">项目设置</a> <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#开始一个新项目">开始一个新项目</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#构建">构建</a> <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#构建生命周期">构建生命周期</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#在CVS中存放jar文件">在CVS中存放jar文件</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#重载已声明的依赖包">重载已声明的依赖包</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用SNAPSHOT依赖">使用SNAPSHOT依赖</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#多项目构建和Reactor">多项目构建和Reactor</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#离线构建">离线构建</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#命令行选项介绍">命令行选项介绍</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#测试">测试</a> <br />
    <br />
    <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#测试资源">测试资源</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#运行一个单独的测试">运行一个单独的测试</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#打包">打包</a> <br />
    <br />
    <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#JAR_资源">JAR 资源</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#部署">部署</a> <br />
    <br />
    <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#固化SNAPSHOT依赖">固化SNAPSHOT依赖</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#拷贝依赖JAR包">拷贝依赖JAR包</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#命名约定">命名约定</a> <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#规则和指南">规则和指南</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#项目">项目</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#依赖">依赖</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#发布多个包的项目">发布多个包的项目</a> </li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#远程Repository布局">远程Repository布局</a> <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#本地Repository布局">本地Repository布局</a> <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#生成项目站点">生成项目站点</a> <br />
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#颜色">颜色</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#风格">风格</a> <br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#报告">报告</a> </li>
    </ol>
    </li>
</ol>
<p><br />
<br />
<br />
<br />
<a>关于手册</a> <br />
这篇Maven使用手册意在通过提供完整的描述和例子，帮助开发人员了解Maven。 如果你有任何建议或者意见请在 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#115;&#64;&#109;&#97;&#118;&#101;&#110;&#46;&#97;&#112;&#97;&#99;&#104;&#101;&#46;&#111;&#114;&#103;">Maven使用者邮件列表</a>上发表. <br />
感谢选择Maven! <br />
<br />
<a>简介</a> <br />
Maven最早始于Jarkarta Turbine项目，目的是为了简化构建过程。这个项目下面有 几个子项目，每个子项目都有自己的Ant文件，但是区别很小，而且生成的JAR 文件都要check in到CVS中。我们希望有一种标准的方式来构建这些项目，一种可以 清晰描述项目的方式，一种易于发布项目信息的方式，一种在多个项目之间共享JARs 的方式。 <br />
这个结果就是产生了一个可以用于构建、管理任何基于java的项目。我们希望我们创造 的这个工具可以让Java开发者的日常工作更加轻松，并有助于理解基于java的项目. <br />
<br />
<a>项目对象模型</a> <br />
Maven是基于项目对象模型(POM)的概念而创建的。在这个模型中，所有由Maven产生的 artifact都是清晰定义的项目模型的结果。构建，文档，源码度量，源码交叉引用和其他 任何由Maven plug-in提供的东西都是由POM来控制的。 <br />
<br />
<a>POM 处理机制</a> <br />
这篇文档简单的描述了Maven执行过程中是如何处理POM的。这里有一些简单的POM例子 来展示继承机制和插值机制。 <br />
<br />
<a>POM 插值机制</a> <br />
POM(通常以project.xml的名字出现)现在已经被当作Jelly脚本来处理了。大部分时 候，用户无须关心project.xml文件是不是真正的Jelly脚本，但是，如果需要的话， 也可以使用内置值。我也不愿看到逻辑控制语句出现在project.xml中，但是由于 project.xml实际上已经是一个隐含的jelly的脚本，所以它会有足够的灵活性:-)。 下面是一个简单的例子。 <br />
3 <br />
maven <br />
maven <br />
Maven <br />
1.0-b5-dev <br />
<br />
Apache Software Foundation <br />
http://jakarta.apache.org/ <br />
/images/jakarta-logo-blue.gif <br />
<br />
2001 <br />
org.apache.${pom.artifactId} <br />
/images/${pom.artifactId}.jpg <br />
<br />
Maven is a project that was created in ${pom.inceptionYear}. <br />
${pom.name} is a Java Project Management Tool <br />
<br />
<a>POM 继承机制</a> <br />
现在有一种简单方式可以用于在POM中进行继承，下面是一个简单的例子： <br />
project.xml <br />
super-extendo <br />
super-extendo <br />
Super Extendo <br />
<br />
**/*Test*.java <br />
<br />
**/TestAll.java <br />
**/*Abstract*.java <br />
<br />
目前对POM父对象的解析还相对较弱，现在对一层以上的继承还没有做过任何测试。尽管如此， 单层继承加上插值机制已经能够给带来很多好处。这些机制的意图在于简化构建的共用问题。 <br />
你可以这样定义主模板： <br />
<br />
3 <br />
commons <br />
commons-master <br />
Commons Master Maven POM <br />
<br />
Apache Software Foundation <br />
http://www.apache.org <br />
<br />
jakarta <br />
http://jakarta.apache.org/commons/${pom.artifactId}.html <br />
http://nagoya.apache.org/ <br />
jakarta.apache.org <br />
/www/jakarta.apache.org/commons/${pom.artifactId}/ <br />
/www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId}/ <br />
<br />
scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId} <br />
http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId}/ <br />
... <br />
<br />
子POM对象可以这样定义： <br />
commons-betwixt <br />
commons-betwixt <br />
Betwixt <br />
... <br />
<br />
这样你就可以在父POM对象中，将子POM对象的${pom.artifactId}替换进去。有许多项目的 构建都以相似的方式进行构建，这样一来，对于项目的公共部分，你就可以使用一个主模板， 然后在子POM对象project.xml中定义有区别的部分，而这部分内容通常很少。 <br />
这种机制确实还可以简化那些需要产生多个JAR包的项目。由于project.xml和标准Ant构建 不会相互干扰，我计划在公共部分测试继承机制。 <br />
如果你对使用这种机制，DVSL报告会变成什么样感到疑惑，我要说，你很上路。我已经修改 了DVSL报告来适应POM本身，这就是说DVSL转换是基于java对象的。在使用继承和插值机制的 时候，为了正确的产生DVSL报告，这是很有必要的。象上面列出的子模板是无法工作的，我们 需要全面的解析POM。我能说的是，它可以工作了！我所使用的处理方式可能不是最有效率的 方式，但仍有提升的空间。因为POM只会被处理一次(不管怎么说，这就它的原理，我可能漏了 某些东西)，然后到处使用，至少这就是我以前试图做的事情，所以我们很有可能会取得平衡。 <br />
如果你不使用继承和插值，那么一切照常工作。maven站点本身一切ok，有几个刚部署的站点 已经使用了我昨晚提交的东西了。 <br />
<br />
<a>使用插件</a> <br />
Maven是一个很紧凑的内核，围绕着它的是许许多多的插件。Maven所有的功能都是由插件来提供 的。 <br />
<br />
<a>maven.xml文件</a> <br />
项目中的maven.xml文件是Maven在执行过程中要使用的&#8220;定制&#8221;文件。 <br />
在这个文件中，你可以加入Maven构建中需要的额外处理。或者在Maven的&#8220;目标&#8221;前后附加自己 的代码，如jar 或 test。 <br />
Maven使用<a href="http://jakarta.apache.org/commons/sandbox/jelly">Jelly</a> 脚本语言, 任何合法的jelly标签都可以在maven.xml中使用。 <br />
Maven所采用的goal功能是由werkz标签库提供。更多的信息请看 <a href="http://wiki.codehaus.org/maven/WerkzTagDocumentation">wiki页面</a>. <br />
<br />
<a>简单的maven.xml例子</a> <br />
<strong>注意</strong>由于Maven并未缺省的定义'compile'目标，下面这个例子没法运行。 <br />
这是一个简单的maven.xml例子 <br />
<br />
${goals} <br />
Now attaining goal number ${goalNumber}, which is ${goal} <br />
<br />
你可能会注意到这里一些有意思的东西，下面我们将逐一解释。 <br />
<br />
<a>project节点</a> <br />
project节点, , 是任何 maven.xml 文件的根节点。 <br />
项目节点有一个缺省的属性：default="nightly-build"，如果用户只是简单键入 没有参数的maven命令，Maven就会用nightly-build 目标作为缺省目标。 <br />
接下来是几个名字空间的声明，如： </p>
<ol>
    <li>xmlns:j="jelly:core" <br />
    所有以j:作为前缀的节点，Jelly都会把它视为在core标识下 预定义的标签库。
    <li>xmlns:u="jelly:util" <br />
    所有以u:作为前缀的节点，Jelly都会把它视为在标识下 预定义的标签库。 <br />
    <br />
    所有在maven.xml文件使用的Jelly标签库，都<strong>必须</strong>在project节点中定义，并且 分配一个名称空间前缀。 <br />
    Maven已经预先包含了jeez标签库作为空前缀。这个标签库在一个名称空间内包含了 ant 和 werkz 标签库。这样，任何werkz或ant标签都无须名称空间 即可使用，同时也简化了ant的迁移过程。 <br />
    <br />
    <a>目标</a> <br />
    goal是一个<a href="http://jakarta.apache.org/commons/jelly/tags.html#jelly:werkz"> werkz 标签</a>，类似于Ant的target；它是包含了一系列可执行标签的容器。 <br />
    由于jeez 标签库已经由maven预先注册了，一个目标(goal)可以包含任何合法的 Ant 标签。 <br />
    为了执行在maven.xml中定义的目标，你只需要在命令行中为Maven指定目标名即可。要执行例子中定 义的nightly-build你只需执行命令: <br />
    maven nightly-build <br />
    <br />
    Maven插件定义的目标需要在目标前加上插件名，这样一来，就不会和你自己的goal冲突，如 jar:jar就是 jar 插件定义的目标，用于创建项目的jar包。 <br />
    <br />
    <a>Jelly编程</a> <br />
    在每个目标里，由Jelly标签提供功能，让我们来看看例子里的这些代码。 <br />
    set <br />
    <br />
    这行就是一个jelly的core标签set，它使用了project节点中定义的前缀 j: <br />
    set标签设置了一个由var属性定义的Jelly变量，值由 value 指定。和Ant的proerties不一样，Jelly变量在被赋值后仍可以改变。 <br />
    mkdir <br />
    <br />
    等同于Ant任务 mkdir, 用于创建目录，目录名由变量 ${maven.build.dir}指定。 <br />
    tokenize <br />
    ${goals} <br />
    这行执行的是Jelly tokenize 标签。这是Jelly util 标签库中标签， 这个标签库已经在项目节点中预先定义：u: <br />
    tokenize标签在将节点中的内容分离成一个list，用于后续的处理。 <br />
    </li>
</ol>
<ul>
    <li>var 属性就是将被于新list的变量。
    <li>delim 属性是用于分割字符串中的分隔符。 <br />
    <li>在这个例子中，tokenize 标签中节点值是一个变量：goals, 在前几行中，这是一个由逗号分隔、compile 与 test 的字符串。 </li>
</ul>
<p><br />
<br />
forEach <br />
<br />
Now attaining goal number ${goalNumber}, which is ${goal} <br />
<br />
<br />
forEach标签提供简单循环功能，节点值就是循环体。 <br />
</p>
<ul><br />
    <li>items 属性是一个表达式，是在循环过程中需要遍历的值集合。 <br />
    <li>集合中的值被逐个取出，存放在var 属性指定的变量中。你可以在 forEach 循环体访问这个变量。 <br />
    <li>indexVar 属性指定了一个计数器(起始基数为0)变量，用于在处理 过程中计数。 </li>
</ul>
<p><br />
<br />
forEach 标签的节点值输出了一些在处理过程中的关于目标的文本，并使用 attainGoal werkz 标签来获得(执行?)这些目标。 <br />
<br />
<a>Maven 配置</a> <br />
<br />
<a>属性的处理机制</a> <br />
Maven按下面的顺序依次读入properties文件： </p>
<ul>
    <li>${project.home}/project.properties
    <li>${project.home}/build.properties
    <li>${user.home}/build.properties </li>
</ul>
<p><br />
读入的属性遵循&#8220;最后的定义有效&#8221;原则。也就是说，Maven依次读入properties文件，以新的定义 覆盖旧的定义。${user.home}/build.properties是Maven最后处理的文件。我们把 这些文件称为Maven处理的标准属性文件集。 <br />
另外，上述properties文件处理完毕后，Maven才会开始处理系统属性。所以，如果在命令行中使用 象-Dproperty=value这样的形式来指定的属性，它会覆盖先前定义的同名属性。 <br />
<br />
<a>插件的属性</a> <br />
上述属性文件处理完后，Maven才会开始调用插件，但是 PluginManager 会禁止插件 覆盖已经设置的属性值。这和Maven一般的属性处理方式是相反的，这是因为插件只能在Maven内部的 其他部分初始化完毕后才能处理，但是我们又希望以这样顺序去处理属性： <br />
</p>
<ul>
    <li>处理Plug-in 缺省属性
    <li>处理${project.home}/project.properties
    <li>处理${project.home}/build.properties
    <li>处理${user.home}/build.properties </li>
</ul>
<p><br />
这样一来，即使插件处于属性处理链的后端，也能覆盖插件的任何缺省属性。例如，Checkstyle插件 就定义了如下缺省属性： <br />
maven.checkstyle.format = sun <br />
<br />
你可能已经猜出来了，Checksytle插件把Sun的编码规范作为缺省的格式。但是我们仍然可以在标准属性 文件集的任何一个文件中覆盖这个属性。所以如果在${project.home}/project.properties 文件定义了如下属性值： <br />
maven.checkstyle.format = turbine <br />
<br />
Checkstyle就会使用Turbine的编码规范。 <br />
<br />
<a>行为属性</a> <br />
下面的这些属性可以改变Maven的&#8220;行为方式&#8221;。 <br />
<br />
属性 <br />
描述 <br />
缺省值 <br />
<br />
maven.build.dest <br />
目录名，存放编译生成的类 <br />
${maven.build.dir}/classes <br />
<br />
maven.build.dir <br />
存放构建结果的目录，如类文件，文档，单元测试报告等等。 <br />
<strong>注意：</strong> 在${user.home}/build.properties文件中改变maven.build.dir 的缺省值或许会得到一个 较为个性化的目录布局。但是，这会干扰Maven由从源码开始的编译工作，因为它假设jar包 会被创建到${basedir}/target/目录中。 <br />
${basedir}/target <br />
<br />
maven.build.src <br />
源码目录 <br />
${maven.build.dir}/src <br />
<br />
maven.conf.dir <br />
配置文件目录 <br />
${basedir}/conf <br />
<br />
maven.docs.dest <br />
html格式报告的输出目录 <br />
${maven.build.dir}/docs <br />
<br />
maven.docs.omitXmlDeclaration <br />
产生的文档所应包含的xml声明头，如： <br />
<br />
false <br />
<br />
maven.docs.outputencoding <br />
生成文档的缺省编码 <br />
ISO-8859-1 <br />
<br />
maven.docs.src <br />
用户提供的文档目录 <br />
${basedir}/xdocs <br />
<br />
maven.gen.docs <br />
xdocs文档转换成html后的输出目录 <br />
${maven.build.dir}/generated-xdocs <br />
<br />
maven.home.local <br />
maven用于写入用户信息的本机目录，如解开插件包、缓冲数据。 <br />
${user.home}/.maven <br />
<br />
maven.mode.online <br />
是否连接internet <br />
true <br />
<br />
maven.plugin.dir <br />
插件的存放目录 <br />
${maven.home}/plugins <br />
<br />
maven.plugin.unpacked.dir <br />
用于展开安装插件的目录 <br />
${maven.home.local}/plugins <br />
<br />
maven.repo.central <br />
在进行dist:deploy处理的时候，发行包所要部署的目标机器 <br />
login.ibiblio.org <br />
<br />
maven.repo.central.directory <br />
在进行dist:deploy处理的时候，发行包所要部署的目标目录。 <br />
/public/html/maven <br />
<br />
maven.repo.local <br />
本机repository，用于存储下载的jar包。 <br />
${maven.home.local}/repository <br />
<br />
maven.repo.remote <br />
远程repository，如果本机repository没有的jar包，maven会从这里下载。 <br />
http://www.ibiblio.org/maven <br />
<br />
maven.repo.remote.enabled <br />
是否使用远程repository。 <br />
true <br />
<br />
maven.scp.executable <br />
用于安全拷贝的可执行程序 <br />
scp <br />
<br />
maven.src.dir <br />
基础源代码目录 <br />
${basedir}/src <br />
<br />
maven.ssh.executable <br />
远程命令可执行程序 <br />
scp <br />
<br />
<a>使用代理</a> <br />
如果你只能通过代理访问，不要紧，Maven为你提供了下列属性： <br />
<br />
代理属性 <br />
描述 <br />
<br />
maven.proxy.host <br />
代理的IP地址 <br />
<br />
maven.proxy.port <br />
代理端口 <br />
<br />
maven.proxy.username <br />
如果代理需要认证的话，在这里填写用户名。 User name if your proxy requires authentication. <br />
<br />
maven.proxy.password <br />
如果代理需要认证的话，在这里填写密码。 <br />
如果你实在需要代理，最好在${user.home}/build.properties文件中指定。 <br />
## ---------------------------------------------------------- <br />
## ${user.home}/build.properties <br />
## ---------------------------------------------------------- <br />
. <br />
. <br />
maven.proxy.host = my.proxyserver.com <br />
maven.proxy.port = 8080 <br />
maven.proxy.username = username <br />
maven.proxy.password = password <br />
. <br />
. <br />
<br />
<a>使用多个远程Repositories</a> <br />
你可以在任何Maven可以处理的属性文件中指定使用多个远程Repositories，如： <br />
maven.repo.remote = http://www.ibiblio.org/maven/,http://www.mycompany.com/maven/ <br />
<br />
<a>项目设置</a> <br />
<br />
<a>开始一个新项目</a> <br />
如果你是第一次使用Maven，或者开始一个新的项目，你可以使用GenApp来自动创建Maven项目树。 <br />
maven -Dpackage=com.mycompany.app genapp <br />
<br />
执行该命令后，屏幕显示如下： <br />
__ __ <br />
| / |__ Jakarta _ ___ <br />
| |/| / _ V / -_) ' ~ intelligent projects ~ <br />
|_| |___,_|_/___|_||_| v. 1.0-beta-9 <br />
<br />
[mkdir] Created dir: /genapp/src/java/com/mycompany/app <br />
[copy] Copying 1 file to /genapp/src/java/com/mycompany/app <br />
[mkdir] Created dir: /genapp/src/test/com/mycompany/app <br />
[copy] Copying 3 files to /genapp/src/test/com/mycompany/app <br />
[copy] Copying 2 files to /genapp <br />
[copy] Copying 1 file to /genapp/src/conf <br />
BUILD SUCCESSFUL <br />
Total time: 3 seconds <br />
<br />
执行完毕，即生成下面的完整项目目录树： <br />
. <br />
|-- project.properties <br />
|-- project.xml <br />
`-- src <br />
|-- conf <br />
| `-- app.properties <br />
|-- java <br />
| `-- com <br />
| `-- mycompany <br />
| `-- app <br />
| `-- App.java <br />
`-- test <br />
`-- com <br />
`-- mycompany <br />
`-- app <br />
|-- AbstractTestCase.java <br />
|-- AppTest.java <br />
`-- NaughtyTest.java <br />
<br />
<a>构建</a> <br />
Maven采用了集中管理库的理念。所有用于构建的jar包都是从集中管理的中心库上取出。目前， 我们的中心库放在<a href="http://www.ibiblio.org/maven">这儿</a> <a href="http://www.ibiblio.org/">Ibiblio</a>. 在一个典型的Maven项目中，构建所需的 jar包会从中心库下载。Maven只会取回依赖链条上缺失的包。如果你使用Maven来构建几个项目， 这些项目可能会共享一些依赖包：Maven可以在任意个项目中共享同一个包，而无须在同一系统 中保持一个jar包的多个拷贝。 <br />
<br />
<a>构建生命周期</a> <br />
<br />
<a>在CVS中存放jar文件</a> <br />
我们不推荐你在CVS中存放jar包。Maven提倡在本机repository中存放用于构建共享的jar包或 和其他项目包。许多项目都依赖于诸如XML解析器、标准例程，这在Ant构建中，经常会被复制 多份。在Maven中，这些标准例程就存放在本地repository中，供任何项目构建使用。 <br />
<a>重载已声明的依赖包</a> <br />
你可能会发现，在某些情况下允许重载POM中已经声明的依赖包会很方便，甚至很有必要。 你可能会希望使用文件系统中的某个JAR包，或者你希望简单重新指定某个包的版本。对于 这样的情况，Maven提供了一种简单的方式，允许你选择构建所需的jar包。我们严重建议;) 你设置本机repository，但是在简单至上，或在由ant构建迁移的情况下，JAR包重载特性 会显得非常方便。 <br />
为了使用JAR包重载特性，你必须将maven.jar.override 属性设置为 on。 只要设置了这个属性，就可以在任何maven处理的属性文件中重载JAR包。 <br />
关于JAR重载的指令有两种。第一种允许你指定某个特定的包的路径，作为JAR包；的二种 允许你指定某个特定的JAR包（这个jar包必须已经存在于本机repository）。下面是这两 种方式： <br />
maven.jar.artifactId = [path] <br />
maven.jar.artifactId = [version] <br />
<br />
下面是一个使用JAR重载指令的属性文件例子： <br />
# ------------------------------------------------------------------------ <br />
# M A V E N J A R O V E R R I D E <br />
# ------------------------------------------------------------------------ <br />
maven.jar.override = on <br />
# ------------------------------------------------------------------------ <br />
# Jars set explicity by path. <br />
# ------------------------------------------------------------------------ <br />
maven.jar.a = ${basedir}/lib/a.jar <br />
maven.jar.b = ${basedir}/lib/b.jar <br />
<br />
# ------------------------------------------------------------------------ <br />
# Jars set explicity by version. <br />
# ------------------------------------------------------------------------ <br />
maven.jar.classworlds = 1.0-beta-1 <br />
<br />
<a>使用SNAPSHOT依赖</a> <br />
在Maven中，SNAPSHOP是某个特定项目的最新构建的jar包。如果你的项目依赖于另一个频繁变更 的项目，你可以在你的POM中声明SNAPSHOP依赖，以保持与那个项目的同步。例如，在你的POM中 这样写，你可以与<a href="http://jakarta.apache.org/commons/jelly/">Jelly</a>保持 同步更新。 <br />
... <br />
commons-jelly <br />
commons-jelly <br />
SNAPSHOT <br />
... <br />
<br />
上述语句的含义是：总是使用Maven repository中最新的Jelly构建包。SNAPSHOT依赖 总会导致依赖失败。在这种情况下，Maven就会去Maven repository取得一个SNAPSHOT 依赖包的拷贝。如果你正在离线工作，Maven就会发出警告：&#8220;SNAPSHO依赖包可能已经 过期&#8221;。 <br />
<br />
<a>多项目构建和Reactor</a> <br />
在Maven中，Reactor是一个用于控制多项目构建的工具。Reactor用Werkz包,并根据每个项目 各自定义的依赖关系来安排构建顺序。Reactor的意图在于：鼓励创建/重构具有更小、更松散、 更有一致性单元的项目。r源于面向组件编程，在向组件编程中，整个系统由许多松散的个体 构成，这些个体需要聚合起来作为一个整体进行部署。 <br />
Reactor可以为某个项目集执行一个任意编排的目标列表。所以，如果使用Reactor的话，它 可以用来做项目站点生成，任意jar包生成这样的事情。 <br />
目前 <a href="http://db.apache.org/">db.apache.org</a> 站点就是收集了其子项目的 丰富信息、并与一系列的<a href="http://jakarta.apache.org/velocity/">Velocity</a> 模板合成的。这一过程是由 <a href="http://jakarta.apache.org/commons/jelly/">Jelly</a> Velocity 标签库来完成的。<a href="http://cvs.apache.org/viewcvs.cgi/db-site/"> 这里</a>是其中的机制，有兴趣可以看看。 <br />
Plexus(一个基于Avalon的容器)组件的manifest是遍历所有Plexus组件、并聚合而成的。这里 使用的还是Velocity模板和Jelly Volocity标签库。 <a href="http://cvs.werken.com/viewcvs.cgi/plexus-components/?cvsroot=plexus">这里</a>是其中的机制，有兴趣可以看看。 <br />
这里是一个使用Reactor标签，遍历一系列组件，最后产生项目站点的例子： <br />
... Do whatever you want with the harvested information ... <br />
<br />
如果你需要聚合N个项目的文档，形成一个统一的视图，你可以参考 <a href="http://db.apache.org/">db.apache.org</a>站点，它从所有的子项目中收集 信息，最终形成一个有导航条，邮件列表，开发者列表和源码repository统一的站点。这解决 了在收集子项目信息过程中的冗余、易于产生错误的问题。db.apache.org的子项目只需关注 自身的信息，却可以自动的集成到高层的项目站点中。 <br />
<br />
<a>离线构建</a> <br />
如果你需要离线构建，你得在命令行中使用离线选项： <br />
maven -o jar:jar <br />
<br />
这等同于： <br />
maven -Dmaven.mode.online=false jar:jar <br />
<br />
或者你可以在<a href="http://maven.huangdong.com/reference/user-guide.html#Properties_Processing">属性文件</a>中设置 maven.mode.online 属性为false。 <br />
在联机模式下，maven总是下载 SNAPSHOT 依赖包, 请参考 <a href="http://maven.huangdong.com/reference/user-guide.html#使用SNAPSHOT依赖">使用SNAPSHOT依赖</a>。如果本机repository 上的当前版本比服务器上的还要新，你也许不想maven覆盖你的当前版本。如果不想下载，你可以 设置属性： <br />
maven.repo.remote.enabled=false <br />
<br />
在maven beta 9版本中，这个属性并没有起作用(新版本已经解决了这个问题)。可以这样来清空 maven.repo.remote 属性： <br />
maven.repo.remote.enabled= <br />
<br />
在命令行或属性文件中设置都一样。 <br />
在下面的情形中，你需要同时设置maven.repo.remote.enabled=false maven.mode.online=true：希望javadoc插件的"-link"选项起作用，而又不希望 下载任何(包括snapshot)包。 <br />
<br />
<a>命令行选项介绍</a> <br />
如果你用命令行来构建，这里提供了一个关于命令行选项的快速参考。 <br />
Options: <br />
-D,--define arg 定义一个系统属性 <br />
-E,--emacs 输出简洁的日志信息 <br />
-X,--debug 输出debug信息 <br />
-b,--nobanner 禁止 logo banner <br />
-d,--dir arg 设置指定的工作目录 <br />
-e,--exception 输出异常堆栈信息 <br />
-f,--find arg 通过搜寻项目文件来确定执行的项目文件及其工作目录 <br />
-g,--goals 显示可用的目标 <br />
-h,--help 显示帮助信息 <br />
-i,--info 显示系统信息 <br />
-o,--offline 离线构建 <br />
-p,--pom arg 指定项目文件 <br />
-v,--version 显示版本号 <br />
<br />
<a>测试</a> <br />
<br />
<a>测试资源</a> <br />
通常情况下，你需要在测试类路径上为测试指定某些资源。你可以在POM中使用 <br />
下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml和.properties为扩展名 的文件： <br />
... <br />
... <br />
... <br />
<br />
${basedir}/src/test <br />
**/*.xml <br />
**/*.properties <br />
<br />
下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml和.properties为扩展名 的文件，但naughty.properties文件除外。请注意增加的project/build/unitTest/resources/excludes 节点： <br />
... <br />
... <br />
... <br />
<br />
${basedir}/src/test <br />
**/*.xml <br />
**/*.properties <br />
<br />
naughty.properties <br />
<br />
<a>运行一个单独的测试</a> <br />
下面的命令运行了一个单独的测试： <br />
maven -Dtestcase=org.foo.bar.MyTest test:single-test <br />
<br />
<a>打包</a> <br />
<a>JAR 资源</a> <br />
... <br />
<br />
${basedir}/src/conf <br />
<br />
*.xml <br />
*.properties <br />
<br />
${basedir}/src/messages <br />
org/apache/maven/messages <br />
messages*.properties <br />
<br />
<a>部署</a> <br />
<br />
<a>固化SNAPSHOT依赖</a> <br />
在开发时使用SNAPSHOT依赖包非常方便，但是在部署的时候，你需要把所有的SNAPSHOT依赖包 固定下来，以便发布一个包含固定jar的版本。如果你发布了一个含SNAPSHOT依赖包的项目，而 这些SNAPSHOT在项目发布后发生了变更，你可能很快就会发现这个版本没法儿工作。 <br />
当SNAPSHOT以时间戳为版本号部署到Maven上时，Maven可以识别foo-SNAPSHOT.jar实际上相当 于foo-20030101.010101.jar。当部署的时刻来临，你可以用下面的命令，让Maven把SNAPSHOT 版本号变为时间戳版本号。 <br />
maven convert-snapshots <br />
<br />
Maven会提供交互的方式让你选择哪个SNAPSHOPT依赖包应该固化下来。这一过程结束后，Maven 就会把刚才你的选择写会你的POM。 <br />
如果你希望Maven简单的、尽可能最好的固化SNAPSHOT依赖包，你可以用下面的命令： <br />
maven convert-snapshots-auto <br />
<br />
<a>拷贝依赖JAR包</a> <br />
在maven.xml这样写下面的语句是最简单的拷贝依赖包的方法。 <br />
... <br />
... <br />
<br />
用deploy:copy-deps标签你就可以简单的把项目所有的依赖包拷贝到任何 目录，如果希望排除某个依赖包，需要给出一个依赖包的id列表，列表中依赖包就不会被拷贝。 <br />
<br />
... <br />
... <br />
<br />
<a>命名约定</a> <br />
这部分将简要的描述项目对象模型(POM)中命名约定。本篇文档希望可以统一各式各样jar包命名 方法，这些jar包一般为java开发者社区广泛使用。 <br />
<br />
<a>规则和指南</a> <br />
<a>项目</a> <br />
一个项目必须由一个唯一的的标识，标识由a-z小写字母和连线号构成，其首字母必须以小写字母 开头。 <br />
<br />
bar <br />
foo <br />
... <br />
<br />
所有项目间的引用都由组id和包id构成。到现在为止，在POM与此相关的是下面将要（上面提到的？）谈到的项目的 依赖声明。 <br />
项目的名称应该易于阅读，可用于文档。 <br />
<br />
bar <br />
foo <br />
The Grand Master Foo <br />
... <br />
<br />
项目应该有一个组标识，组标识是名称的基础部分。 <br />
bar <br />
foo <br />
The Grand Master Foo </p>
<p>... <br />
<br />
所有项目发布的包都应基于项目唯一的标识，并且放在基于项目的组id的目录中。对于上面的 项目来说，假定发布的包是jar类型的包，我们就会有如下目录结构： <br />
repository <br />
| <br />
+-- bar <br />
|-- distribution <br />
`-- jar <br />
|-- foo-1.0.jar <br />
`-- foo-2.0.jar <br />
<br />
<br />
<a>依赖</a> <br />
一个理想的典型依赖声明的例子可能会象这样： <br />
<br />
yourProject <br />
yourArtifact <br />
Your Groovey Machine <br />
... <br />
<br />
bar <br />
foo <br />
1.0 <br />
<br />
这样一来，依赖于id为foo1.0 版本的bar项目 属于org.foo.bar组。这个依赖会被解析为本地repository中jar文件。上面 的情形假定发布的包是基于包id命名的。因此对于上述依赖，Maven就会采用 foo-1.0.jar作为jar名。 <br />
就像用户反映的那样，这种理想的方式并不能适应所有的项目。有几种情形我们必须考虑调整 理想的依赖机制： </p>
<ul>
    <li>发布的jar包的并未使用项目作为基础名，如xercesImpl就是所有发布的jar包的基础名 它与gump id和maven中的id都不一样。 <br />
    <li>发布的jar包没有使用任何版本声明，如许多commons组件并没有把版本号作为包名的一部分。 <br />
    <li>有些项目即没有使用项目id作为基础名也没有版本声明。例如，最坏的情形是Java Activation Framework 的jar包，它没有遵循其他Sun的命名规则，也没有在jar包中声明 版本号，甚至在manifest中都没有任何版本信息。 <br />
    <br />
    在多数情形下，任何例外的情况都可以用 (可选节点)、或者是重命名来解决。 现在，许多Jarkata的产品在repository已经被重命名，因为在不久的未来，绝大多数的Jarkarta的 项目将用maven进行构建。但这不是公司政策，我们不需要解决所有情况的问题。 <br />
    <br />
    <a>发布多个包的项目</a> <br />
    Maven的依赖机制完全支持任何形式的多项目包。 Maven's dependency mechanism completely supports multiple project artifacts of any given type. <br />
    下面的代码包含了ant的主jar包和optional包加上hypothetical包。 <br />
    ant <br />
    ant <br />
    1.4.1 </li>
</ul>
<p>ant <br />
ant-optional <br />
1.4.1 <br />
ant <br />
poorly-named <br />
1.4.1 <br />
<br />
所以A), B) 和 C)实际上是指向属于同一组的单个包的指针，这就是说，一个单独的依赖就是对某个组中的某个 包的引用。目前artifact如果没有特别说明的话，一般指的是jar包。但是依赖也可能是一个war文件或一个 发行包。我们试图在提供多数情况下(构建大多需要jar包)使用的缺省方式的同时，也顾及灵活性。 <br />
<br />
<a>远程Repository布局</a> <br />
这部分文档将对Maven的远程repositories做一个概要的说明。目前，主repository位于 <a href="http://www.ibiblio.org/maven/">Ibiblio</a>，但是你也可以自己创建一 个远程repositories，其结果描述可以在这部分文档中找到。 <br />
任何独立的项目在repository都有自己的目录。每个项目有一个唯一的项目id和同名目录， 项目的发行包就放在这个目录中。 <br />
项目的目录中可以存放各种各样的artifacts，目前最为广泛使用的两种类型是jar包和发行包 下面是一个远程repository快照： <br />
repository <br />
| <br />
|-- ant <br />
| |-- distribution <br />
| `-- jars <br />
| |-- ant-1.4.1.jar <br />
| `-- ant-optional-1.4.1.jar <br />
+-- jsse <br />
|-- distribution <br />
`-- jars <br />
|-- jsse.jar <br />
|-- jcert.jar <br />
`-- jnet.jar <br />
<br />
<a>本地Repository布局</a> <br />
应该有一个接口集合的紧凑实现使本地repository目录结构更加随意一些。现在我只使用 了一个类来实现，显得有些臃肿。我还是认为本地和远程repositories应保持相同的结构 但是为了使用更乐于使用，我开始设计一些接口，用于满足用户自己安排自己本地Repository 布局，相似的远程Repositor也在设计中。尽管目前本地repository仍与远程repository 完全一致，我希望听到更多的用户反馈，以促进这些接口的开发，或者完全抛弃它。 <br />
<br />
<a>生成项目站点</a> <br />
Maven可以为项目产生一个完成的web站点。这个web站点将包含各种各样、由许多Maven插件 产生的报告，如javadocs，代码度量，单元测试，changlog，及其它... 本节文档接下来的 部分将阐述Maven支持的站点定制选项。 <br />
<br />
<a>颜色</a> <br />
考虑到一致性，缺省情况下，所有Maven产生的站点都使用相似的外观。这使用户一眼就能 认出由Maven产生的站点，产生熟悉的感觉，更加方便信息的获取。当然，Maven开发组也 考虑到用户可能会希望定制他们的站点。修改Maven产生的站点，最简单的方法是指定你要 使用的颜色搭配。这只需要在project.properties简单的设置适当的属性 即可。下面是所有可用的属性描述在<a href="http://maven.huangdong.com/reference/plugins/xdoc/properties.html"> xdoc plugin</a>。 <br />
<br />
<a>风格</a> <br />
如果你感觉颜色太过于简单，无法满足你的要求，你可以用自己的stylesheet。为了重载 在${basedir}/xdocs/stylesheets/中的maven.css stylesheet，你可以通过设置maven.javadoc.stylesheet 属性来指定你的 javadoc风格。 <br />
<br />
<a>报告</a> <br />
最后，如果你希望定制哪些报告需要自动产生，你需要在你的项目描述中包含 <a href="http://maven.huangdong.com/reference/project-descriptor.html#reports">reports</a> 标签库。 到目前为止，如果没有reports标签指定，所有插件报告都会产生。这个标签 允许你选择产生哪些报告而排斥另外一些报告，而且允许你安排顺序。 <br />
目前的标准 报告集在xdoc中是硬编码实现的，它们是： <br />
maven-changelog-plugin <br />
maven-changes-plugin <br />
maven-checkstyle-plugin <br />
maven-developer-activity-plugin <br />
maven-file-activity-plugin <br />
maven-javadoc-plugin <br />
maven-jdepend-plugin <br />
maven-junit-report-plugin <br />
maven-jxr-plugin <br />
maven-license-plugin <br />
maven-linkcheck-plugin <br />
maven-pmd-plugin <br />
maven-tasklist-plugin <br />
<br />
如果你希望产生缺省的报告，但是还想增加或删除一两个，最好的方法是：给 xdoc:register-reports目标写一个前置目标(postGoal)。<br />
<br />
<a>排除所有Maven产生的内容</a> <br />
某些情况下，用户需要构建只有文档的站点，或是构建聚合许多子项目的站点，但不希望 在站点上有个整体&#8220;项目文档&#8221;导航条。设置 maven.xdoc.includeProjectDocumentation属性值为no 即可解决这一问题。缺省的，Maven会包含&#8220;项目文档&#8221;导航条，下面挂的是许多Maven 生成的报告。 " </p>
<p>&nbsp;</p>
<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/174417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:43 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven翻译一结  </title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174415.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:42:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174415.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174415.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174415.html</trackback:ping><description><![CDATA[<p>MAVEN 一结<br />
&nbsp;1.安装：略<br />
&nbsp;2. make first Maven 78<br />
&nbsp; cmd: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app<br />
notice: archetype==template&nbsp;&nbsp;&nbsp; -D看cmd-&gt; mvn -help<br />
将产生一个pom.xml(project object model)文件</p>
<p>maven工程产生：<br />
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app</p>
<p><br />
文档产生：<br />
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app <br />
-DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-site<br />
格式(大概)如下 <br />
project<br />
&nbsp; modelVersion使用pom的版本号<br />
&nbsp; groupId&nbsp; 组ID 如org.apache.maven.plugins或com.sourceware<br />
&nbsp; artifactId 类似工程名unique<br />
&nbsp; packaging打包(jar或war,ear由artifactId的extension定<br />
&nbsp; version该工程的版本号<br />
&nbsp; name显示名称在文档里<br />
&nbsp; url&nbsp;&nbsp; url在文档里<br />
&nbsp; description描述在文档里<br />
&nbsp; 更详细的见maven.htm(旁)<br />
&nbsp; <br />
mvn的命令在maven-command.htm里</p>
<p>MAVEN与ANT整合如下<br />
&lt;project&gt;<br />
&nbsp; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp; &lt;artifactId&gt;my-test-app&lt;/artifactId&gt;<br />
&nbsp; &lt;groupId&gt;my-test-group&lt;/groupId&gt;<br />
&nbsp; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp; &lt;build&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;executions&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;execution&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;phase&gt;generate-sources&lt;/phase&gt;<br />
&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; &lt;tasks&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Place any ant task here. You can add anything<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; you can add between &lt;target&gt; and &lt;/target&gt; in a<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; build.xml.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tasks&gt;<br />
&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; &lt;goals&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;goal&gt;run&lt;/goal&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/goals&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/execution&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/executions&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
&nbsp; &lt;/build&gt;<br />
&lt;/project&gt;<br />
So a concrete example would be something like the following:</p>
<p>&lt;project&gt;<br />
&nbsp; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp; &lt;artifactId&gt;my-test-app&lt;/artifactId&gt;<br />
&nbsp; &lt;groupId&gt;my-test-group&lt;/groupId&gt;<br />
&nbsp; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&nbsp; &lt;build&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;executions&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;execution&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;phase&gt;generate-sources&lt;/phase&gt;<br />
&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; &lt;tasks&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exec<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir="${basedir}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; executable="${basedir}/src/main/sh/do-something.sh"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; failonerror="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg line="arg1 arg2 arg3 arg4" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/exec&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tasks&gt;<br />
&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; &lt;goals&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;goal&gt;run&lt;/goal&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/goals&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/execution&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/executions&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />
&nbsp; &lt;/build&gt;<br />
&lt;/project&gt;<br />
</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/174415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:42 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2完全使用手册</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174413.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174413.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174413.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174413.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: maven2 起步&nbsp;&nbsp;&nbsp; 相信maven1 大家都已经很熟悉了，具体maven能做什么，就不详细说了。个人觉得maven在开源项目中用的还是比较多的，公司内部，就不太清楚了。我以前的公司用过一段时间，不过后来就没有下文了。&nbsp;&nbsp;&nbsp; 与maven1 相比，maven2可算是几乎重写了，不过从速度来说应该更快。&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/01/10/174413.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/174413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:41 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Chapter 1. Maven2</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174412.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174412.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174412.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174412.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/lucky/archive/2006/04/12/40746.html">Maven2　介绍</a> </div>
<div class="chapter" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a name="d0e44"></a>Chapter&nbsp;1.&nbsp;Maven2</h2>
</div>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="d0e47"></a>1.1.&nbsp;Maven2 体验</h2>
</div>
</div>
</div>
<p><span class="emphasis"><em>声明:本节内容来源于<a href="http://www.blogjava.net/jbob/" target="_top">blogjava网站jbob的blog</a> 本节的版权归原作者所有，不适用本手册的版权申明。</em> </span></p>
<p>maven是一个java项目管理工具，深化了ant，但又有自己一整套的项目集成策略。目前的版本是2.0.2。 </p>
<div class="orderedlist">
<ol type="1">
    <li>
    <p><a href="http://maven.apache.org/" target="_top">maven网站 </a>下载maven2，解压缩 </p>
    <li>
    <p>配置环境变量:maven_home、path</p>
    <li>
    <p>cmd-&gt; mvn --version 检查是否安装成功 [显示版本号，则说明安装成功] </p>
    <li>
    <p>配置,Maven的配置分为三个层次:</p>
    <div class="itemizedlist">
    <ul type="bullet">
        <li style="list-style-type: disc">
        <p>- pom.xml:针对某个项目的配置</p>
        <li style="list-style-type: disc">
        <p>Installation</p>
        <li style="list-style-type: disc">
        <p>User -针对某个用户的配置</p>
        </li>
    </ul>
    </div>
    <p>我们首先配置主要是user级别的，主要包括两点:设置本地的资源库和代理服务器[如果需要的话] 在%maven_home%/conf/setting.xml中配置: </p>
    <pre class="programlisting">					&lt;localRepository&gt;d:/repo&lt;/localRepository&gt;<br />
    </pre>
    <pre class="programlisting">					&lt;proxy&gt;<br />
    &lt;id&gt;proxy1&lt;/id&gt;<br />
    &lt;active&gt;true&lt;/active&gt;<br />
    &lt;protocol&gt;http&lt;/protocol&gt;<br />
    &lt;username&gt;&lt;/username&gt;<br />
    &lt;password&gt;&lt;/password&gt;<br />
    &lt;host&gt;222.136.91.1&lt;/host&gt;<br />
    &lt;port&gt;80&lt;/port&gt;<br />
    &lt;nonProxyHosts&gt;&lt;/nonProxyHosts&gt;<br />
    &lt;/proxy&gt;<br />
    </pre>
    <p>修改之后copy一份到${home}/.m2</p>
    <li>
    <p>建立新的项目</p>
    <pre class="programlisting">					mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app<br />
    </pre>
    <div class="itemizedlist">
    <ul type="bullet">
        <li style="list-style-type: disc">
        <p>首先，程序会从远程下载必要的jar包到你的localRepository,即我们刚刚设置的[d:/repo] </p>
        <li style="list-style-type: disc">
        <p>然后，会在当前目录下面生成my-app文件夹，包括简单的包结构[java,test]和一个HelloWorld程序及测试,以及pom.xml文件。 </p>
        </li>
    </ul>
    </div>
    <p>注意：pom.xml contains the Project Object Model (POM) for this project.The POM is the basic unit of work in Maven。 </p>
    <li>
    <p>编译</p>
    <pre class="programlisting">mvn compile</pre>
    <p>第一次运行会下载很多jar包,而且机器负荷会很重。运行这个命令需要在pom.xml相同目录下面, 这个编译只编译主程序，不会编译test下面的程序。如果需要单独编译test,请运行：</p>
    <pre class="programlisting">mvn test-compile</pre>
    <p>compile之后会生成target文件夹，主程序编译在classes下面，测试程序放在test-classes下</p>
    <li>
    <p>测试</p>
    <pre class="programlisting">mvn test</pre>
    <p>会自动先编译再运行测试</p>
    <li>
    <p>打包</p>
    <pre class="programlisting">mvn package</pre>
    <p>打包之前会进行编译，测试</p>
    <li>
    <p>安装</p>
    <pre class="programlisting">mvn install</pre>
    <p>会将package之后的jar包copy到</p>
    &lt;local-repository&gt;/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
    <li>
    <p>其他</p>
    <pre class="programlisting">mvn site</pre>
    <p>注意,还可以:</p>
    <pre class="programlisting">deploy site</pre>
    <p>在pom.xml中加入</p>
    <pre class="programlisting"> &lt;distributionManagement&gt;<br />
    &lt;site&gt;<br />
    &lt;id&gt; website &lt;/id&gt;<br />
    &lt; url&gt; scp://www.mycompany.com/www/docs/project/ &lt;/url&gt;<br />
    &lt;/site&gt;<br />
    &lt;/distributionManagement&gt;<br />
    </pre>
    <p>当然你需要设置server</p>
    <pre class="programlisting">mvn site-deploy<br />
    mvn clean<br />
    mvn idea:idea [为IDE工具idea生成项目文件]<br />
    </pre>
    <li>
    <p>Resource</p>
    <p>${basedir}/src/main/resources都会编译到jar文件中,而且该目录下的内容将直接位于jar文件的顶部。</p>
    <p>测试用资源文件-&gt; ${basedir}/src/test/resources，引用时如下例：</p>
    <pre class="programlisting">InputStream is = getClass().getResourceAsStream( "/test.properties" );<br />
    </pre>
    <p>文件位于 ${basedir}/src/test/resources/test.properties。</p>
    <li>
    <p>如何filter我们的资源文件</p>
    <pre class="programlisting">   &lt; build &gt;<br />
    &lt; resources &gt;<br />
    &lt; resource &gt;<br />
    &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />
    &lt; filtering &gt; true &lt;/ filtering &gt;<br />
    &lt;/ resource &gt;<br />
    &lt;/ resources &gt;<br />
    &lt;/ build &gt;<br />
    </pre>
    <p>因为原来默认的filter为false所以要加上上面的代码</p>
    <p>eg:我们在src/main/resources下面建立application.properties文件</p>
    <pre class="programlisting"># application.properties<br />
    application.name=${pom.name}<br />
    application.version=${pom.version}<br />
    </pre>
    <p>运行：mvn process-resources 在target/classes下面的application.properties结果为：</p>
    <pre class="programlisting"> # application.properties<br />
    application.name=Maven Quick Start Archetype<br />
    application.version=1.0-SNAPSHOT<br />
    </pre>
    <p>这就是所谓的filter。当然filter还可以用其他的外部文件，不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }] </p>
    <p>e.g src/main/filters/filter.properties:</p>
    <pre class="programlisting"># filter.properties<br />
    my.filter.value=hello!<br />
    </pre>
    <p>pom.xml:</p>
    <pre class="programlisting"> &lt; build &gt;<br />
    &lt; filters &gt;<br />
    &lt; filter &gt; src/main/filters/filter.properties &lt;/ filter &gt;<br />
    &lt;/ filters &gt;<br />
    &lt; resources &gt;<br />
    &lt; resource &gt;<br />
    &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />
    &lt; filtering &gt; true &lt;/ filtering &gt;<br />
    &lt;/ resource &gt;<br />
    &lt;/ resources &gt;<br />
    &lt;/ build &gt; </pre>
    <p># application.properties</p>
    <pre class="programlisting">application.name=${pom.name}<br />
    application.version=${pom.version}<br />
    message=${my.filter.value}<br />
    </pre>
    <p>这样在运行mvn process-resources 会得到类似的效果,当然我们也可以直接在pom.xml中定义：</p>
    <pre class="programlisting">&lt; build &gt;<br />
    &lt; resources &gt;<br />
    &lt; resource &gt;<br />
    &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />
    &lt; filtering &gt; true &lt;/ filtering &gt;<br />
    &lt;/ resource &gt;<br />
    &lt;/ resources &gt;<br />
    &lt;/ build &gt;<br />
    &lt; properties &gt;<br />
    &lt; my .filter.value &gt; hello &lt;/ my.filter.value &gt;<br />
    &lt;/ properties &gt; </pre>
    <p>效果同样，这样就不需要外部文件了。另外filter还可以来自系统设置以及可以自定义：</p>
    <pre class="programlisting"># application.properties<br />
    java.version=${java.version}<br />
    command.line.prop=${command.line.prop}<br />
    </pre>
    <li>
    <p>jar包依赖</p>
    <p>我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用</p>
    <pre class="programlisting">&lt;dependency&gt;<br />
    &lt;groupId&gt;com.mycompany.app&lt;/groupId&gt;<br />
    &lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
    &lt;scope&gt;compile&lt;/scope&gt;<br />
    &lt;/dependency&gt;</pre>
    <p>注意scope,这里是compile,如果使用junit，scope是test。</p>
    <p>举例说明：如果我们的project需要用到log4j包，那么我们可以 先google--"site:www.ibiblio.org maven2 log4j"。Index of /maven2/log4j/log4j 下面有maven-metadata.xml 描述了groupId,artifactId,version等等。获取了这些信息之后，你 就可以在pom.xml中添加依赖</p>
    <pre class="programlisting">&lt;dependency&gt;<br />
    &lt;groupId&gt;log4j&lt;/groupId&gt;<br />
    &lt;artifactId&gt;log4j&lt;/artifactId&gt;<br />
    &lt;version&gt;1.2.12&lt;/version&gt;<br />
    &lt;scope&gt;compile&lt;/scope&gt;<br />
    &lt;/dependency&gt;</pre>
    <li>
    <p>如何发布我的jar包到我的remote repository</p>
    <p>你需要在setting.xml中间设置server:</p>
    <pre class="programlisting">&lt;servers&gt;<br />
    &lt;server&gt;<br />
    &lt;id&gt;mycompany-repository&lt;/id&gt;<br />
    &lt;username&gt;jvanzyl&lt;/username&gt;<br />
    &lt;!-- Default value is ~/.ssh/id_dsa --&gt;<br />
    &lt;privateKey&gt;/path/to/identity&lt;/privateKey&gt;<br />
    &lt;passphrase&gt;my_key_passphrase&lt;/passphrase&gt;<br />
    &lt;/server&gt;<br />
    &lt;/servers&gt;</pre>
    <p>然后在pom.xml中设置远程url:</p>
    <pre class="programlisting">&lt;distributionManagement&gt;<br />
    &lt;repository&gt;<br />
    &lt;id&gt;mycompany-repository&lt;/id&gt;<br />
    &lt;name&gt;MyCompany Repository&lt;/name&gt;<br />
    &lt;url&gt;scp://repository.mycompany.com/repository/maven2&lt;/url&gt;<br />
    &lt;/repository&gt;<br />
    &lt;/distributionManagement&gt;</pre>
    </li>
</ol>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="d0e228"></a>1.2.&nbsp;Maven2的Eclipse插件安装和使用</h2>
</div>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="d0e231"></a>1.2.1.&nbsp;安装</h3>
</div>
</div>
</div>
<p>你可以从<a href="http://m2eclipse.codehaus.org/" target="_top">http://m2eclipse.codehaus.org</a>update安装Maven2的Eclipse插件，具体 安装步骤请看该网站提供的Flash Demo: <a href="http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html" target="_top">http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html</a></p>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="d0e241"></a>1.2.2.&nbsp;使用</h3>
</div>
</div>
</div>
<p>该插件的使用请看该网站提供的Flash Demo: <a href="http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html" target="_top">http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html</a></p>
<p>关于openfan项目的Maven操作请参看后续章节。</p>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="d0e250"></a>1.3.&nbsp;更多的Maven2的参考</h2>
</div>
</div>
</div>
<div class="itemizedlist">
<ul type="bullet">
    <li style="list-style-type: disc">
    <p><a href="http://maven.apache.org/" target="_top">Maven 网站</a> </p>
    <li style="list-style-type: disc">
    <p><a href="http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/" target="_top">developerWorks 中国：Maven2 的新特性</a> </p>
    <li style="list-style-type: disc">
    <p><a href="http://blog.donews.com/woodstudio/archive/2006/01/31/712379.aspx" target="_top">木头工作室：Maven快速入门</a> </p>
    </li>
</ul>
</div>
</div>
</div>
<div id="stickies-count" style="display: none">0</div>
<div id="stickies-count" style="display: none">0</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/174412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:39 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2 体验</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174409.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:35:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174409.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174409.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174409.html</trackback:ping><description><![CDATA[<p><a href="http://maven.apache.org/" target="_blank">maven</a> 是一个java项目管理工具，深化了<a href="http://ant.apache.org/">ant</a>，但又有自己一整套的项目集成策略。<br />
目前的版本是2.0.2</p>
<ol>
    <li>下载maven 2 [<a href="http://maven.apache.org/download.html" target="_blank">链接</a>]，解压缩。
    <li>配置环境变量，maven_home, path
    <li>cmd-&gt; mvn --version 检查是否安装成功 [显示版本号，则说明安装成功]
    <li>配置<br />
    Maven的配置分为三个层次<br />
    <br />
    <br />
    <blockquote>
    <p>Project - pom.xml，针对某个项目的配置<br />
    Installation<br />
    User -针对某个用户的配置<br />
    </p>
    </blockquote><br />
    我们首先配置主要是user级别的，主要包括两点<br />
    设置本地的资源库和代理服务器[如果需要的话]<br />
    在%maven_home%/conf/setting.xml中配置:<br />
    <br />
    <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">localRepository</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">d:/repo</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">localRepository</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">&nbsp;</span></div>
    <br />
    <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">proxy</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">id</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">proxy1</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">id</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">active</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">true</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">active</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">protocol</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">http</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">protocol</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">username</span><span style="color: rgb(0,0,255)">&gt;&lt;/</span><span style="color: rgb(128,0,0)">username</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">password</span><span style="color: rgb(0,0,255)">&gt;&lt;/</span><span style="color: rgb(128,0,0)">password</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">host</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">222.136.91.1</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">host</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">port</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)">80</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">port</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">nonProxyHosts</span><span style="color: rgb(0,0,255)">&gt;&lt;/</span><span style="color: rgb(128,0,0)">nonProxyHosts</span><span style="color: rgb(0,0,255)">&gt;</span><span style="color: rgb(0,0,0)"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">proxy</span><span style="color: rgb(0,0,255)">&gt;</span></div>
    <br />
    <code><code><code><br />
    </code></code></code>修改之后copy一份到${home}/.m2 [最新版本不需要此步骤]</li>
    <li>建立新的项目<br />
    mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app<br />
    首先，程序会从远程下载必要的jar包到你的localRepository,即我们刚刚设置的[d:/repo]<br />
    然后，会在当前目录下面生成my-app文件夹，包括简单的包结构[java,test]和一个HelloWorld程序及测试。<br />
    以及pom.xml文件。<br />
    注意：pom.xml contains the Project Object Model (POM) for this project.<br />
    The POM is the basic unit of work in Maven。<br />
    <li>编译<br />
    mvn compile<br />
    第一次运行会下载很多jar包。而且机器负荷会很重。<br />
    运行这个命令需要在pom.xml相同目录下面<br />
    这个编译指挥编译主程序，不会编译test下面的程序。<br />
    如果需要单独编译test,请运行 mvn test-compile<br />
    compile之后会生成target文件夹，主程序编译在classes下面，测试程序放在test-classes下<br />
    <li>测试<br />
    mvn test. 会自动先编译在运行测试<br />
    <li>打包<br />
    mvn package<br />
    打包之前会进行编译，测试</li>
    <li>装[install]<br />
    mvn install<br />
    会将package之后的jar包copy到<br />
    &lt;local-repository&gt;/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar</li>
    <li>&nbsp;其他<br />
    mvn site<br />
    &nbsp;注意：还可以deploy site<br />
    &nbsp;在pom.xml中加入
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">distributionManagement</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">site</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">id</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">website</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">id</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">url</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">scp://www.mycompany.com/www/docs/project/</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">url</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">site</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">distributionManagement</span> <span style="color: #0000ff">&gt;</span> </div>
    <p><br />
    当然你需要设置server<br />
    mvn site-deploy<br />
    mvn clean<br />
    mvn idea:idea [为IDE工具idea生成项目文件]</p>
    </li>
    <li>
    <p>Resource<br />
    ${basedir}/src/main/resources都会编译到jar文件中<br />
    而${basedir}/src/main/resources 下的内容会直接位于jar文件的顶部<br />
    测试用资源文件-&gt; ${basedir}/src/test/resources<br />
    引用时参照此例：<br />
    InputStream is = getClass().getResourceAsStream( "/test.properties" );<br />
    文件位于 ${basedir}/src/test/resources/test.properties。</p>
    </li>
    <li>
    <p>&nbsp;如何filter我们的资源文件<br />
    在pom.xml中修改：</p>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">build</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">resources</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">resource</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">directory</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">src/main/resources</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">directory</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">filtering</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">true</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">filtering</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">resource</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">resources</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">build</span> <span style="color: #0000ff">&gt;</span> </div>
    <p><br />
    因为原来默认的filter为false所以要加上上面的代码<br />
    e.g<br />
    我们在src/main/resources下面建立application.properties文件<br />
    &nbsp;# application.properties<br />
    &nbsp;application.name=${pom.name}<br />
    &nbsp;application.version=${pom.version}<br />
    运行：mvn process-resources<br />
    在target/classes下面，<br />
    application.properties:<br />
    &nbsp;# application.properties<br />
    &nbsp;application.name=Maven Quick Start Archetype<br />
    &nbsp;application.version=1.0-SNAPSHOT<br />
    这就是所谓的filter.<br />
    当然filter还可以用其他的外部文件，不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }]<br />
    e.g<br />
    src/main/filters/filter.properties<br />
    &nbsp;# filter.properties<br />
    &nbsp;my.filter.value=hello!<br />
    pom.xml</p>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #000000">&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">build</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">filters</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">filter</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">src/main/filters/filter.properties</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">filter</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">filters</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">resources</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">resource</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">directory</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">src/main/resources</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">directory</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">filtering</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">true</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">filtering</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">resource</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">resources</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">build</span> <span style="color: #0000ff">&gt;</span> </div>
    <p><br />
    # application.properties<br />
    application.name=${pom.name}<br />
    application.version=${pom.version}<br />
    message=${my.filter.value}<br />
    这样在运行mvn process-resources 会得到类似的效果。</p>
    <p>当然我们也可以直接在pom.xml中定义：</p>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">build</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">resources</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">resource</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">directory</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">src/main/resources</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">directory</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">filtering</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">true</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">filtering</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">resource</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">resources</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">build</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">properties</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">my</span> <span style="color: #ff0000">.filter.value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">hello</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">my.filter.value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">properties</span> <span style="color: #0000ff">&gt;</span> </div>
    <p><br />
    效果同样，这样就不需要外部文件了</p>
    <p>另外filter还可以来自系统设置以及可以自定义：<br />
    # application.properties<br />
    java.version=${java.version}<br />
    command.line.prop=${command.line.prop}</p>
    </li>
    <li>jar包依赖<br />
    我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用<br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.mycompany.app</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">my-app</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1.0-SNAPSHOT</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">compile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
    注意scope,这里是compile,如果使用junit，scope是test.<br />
    <br />
    举例说明<br />
    如果我们的project需要用到log4j包，那么我们可以先google--"site:www.ibiblio.org maven2 log4j". <br />
    Index of /maven2/log4j/log4j&nbsp; 下面有maven-metadata.xml 描述了groupId,artifactId,version等等。<br />
    获取了这些信息之后，你就可以在pom.xml中添加依赖了<br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">log4j</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">log4j</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1.2.12</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">compile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span></div>
    <br />
    14 如何发布我的jar包到我的remote repository<br />
    你需要在setting.xml中间设置server<br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">server</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">mycompany-repository</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">username</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jvanzyl</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">username</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Default&nbsp;value&nbsp;is&nbsp;~/.ssh/id_dsa&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">privateKey</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/path/to/identity</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">privateKey</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">passphrase</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">my_key_passphrase</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">passphrase</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">server</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
    然后在pom.xml中设置远程url<br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">distributionManagement</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">repository</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">mycompany-repository</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">MyCompany&nbsp;Repository</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">scp://repository.mycompany.com/repository/maven2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">repository</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
    <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">distributionManagement</span><span style="color: #0000ff">&gt;</span></div>
    <br />
    <p>使用maven2 构建 Webapp应用程序<br />
    基于以下框架：<br />
    spring,hibernate,webwork.2.2.2<br />
    1. mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp<br />
    2. 添加main/java test/java 文件夹<br />
    3. 构建pom.xml.添加相关依赖：<br />
    注意以下几点，<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spring:使用id:org.springframework<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hibernate:&nbsp; org.hibernate<br />
    中途会出现错误。因为jta下载不到，因为licenese的原因<br />
    jta需要自己下载：java.sun.com/products/jta<br />
    下载回来后 使用jar命令打包 放到本地Repo。<br />
    4.配置pom<br />
    &lt;resources&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;resource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/resources&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/resource&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;resource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/java&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include&gt;**/*.xml&lt;/include&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;/includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/resource&gt;<br />
    &nbsp;&nbsp;&lt;/resources&gt;<br />
    &nbsp;&nbsp;&lt;testResources&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;testResource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/test/resources&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/testResource&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;testResource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/webapp&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include&gt;**/*.xml&lt;/include&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;/includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/testResource&gt;<br />
    &nbsp;&nbsp;&lt;/testResources&gt;<br />
    5.我们用到了jetty6来自动化部署<br />
    &lt;plugins&gt;<br />
    &nbsp;&nbsp;&lt;plugin&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-jetty6-plugin&lt;/artifactId&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;version&gt;6.0.0beta14&lt;/version&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
    &nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />
    &nbsp;&nbsp;&lt;/plugins&gt;<br />
    mvn package 之后可以mvn jetty6:run<br />
    启动之后，可以在另一个进程　mvn compile.冒死可以热交换<br />
    在mvn jetty6:run的console Ctrl+c可以停止进程<br />
    ６.文件放置位置：<br />
    resource/ ：<br />
    log4j.xml ,webwork相关，ehcache.xml, spring配置文件的properties文件，比如jdbc.properties<br />
    webapp/web-inf&nbsp; ：<br />
    applicationContext,web.xml<br />
    hbm放在java里面<br />
    7. 其他相关<br />
    在webwork2.2中，不再需要通过ActionAutoWiringInterceptor来给Action注入Spring的bean(这种方式仍然保留在xwork1.1中)，改用了另一种更加方便的方式WebWorkSpringObjectFactory，配置方式如下：<br />
    在webwork.properties中加入如下配置内容：</p>
    <p>webwork.objectFactory=spring<br />
    #以下配置可选<br />
    #webwork.objectFactory.spring.autoWire=name这样就可以了，<br />
    在Action中声明需要某Spring bean，就会自动注入进来。</p>
    <p>autowire的方式有四种：name，type，auto，constructor，默认方式是name，autowire语义是Spring的语义<br />
    另外不推荐用spring管理action<br />
    </p>
    <p>使用maven2 构建 Webapp应用程序<br />
    基于以下框架：<br />
    spring,hibernate,webwork.2.2.2<br />
    1. mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp<br />
    2. 添加main/java test/java 文件夹<br />
    3. 构建pom.xml.添加相关依赖：<br />
    注意以下几点，<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spring:使用id:org.springframework<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hibernate:&nbsp; org.hibernate<br />
    中途会出现错误。因为jta下载不到，因为licenese的原因<br />
    jta需要自己下载：java.sun.com/products/jta<br />
    下载回来后 使用jar命令打包 放到本地Repo。<br />
    4.配置pom<br />
    &lt;resources&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;resource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/resources&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/resource&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;resource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/java&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include&gt;**/*.xml&lt;/include&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;/includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/resource&gt;<br />
    &nbsp;&nbsp;&lt;/resources&gt;<br />
    &nbsp;&nbsp;&lt;testResources&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;testResource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/test/resources&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/testResource&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;testResource&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/webapp&lt;/directory&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include&gt;**/*.xml&lt;/include&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;/includes&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;/testResource&gt;<br />
    &nbsp;&nbsp;&lt;/testResources&gt;<br />
    5.我们用到了jetty6来自动化部署<br />
    &lt;plugins&gt;<br />
    &nbsp;&nbsp;&lt;plugin&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-jetty6-plugin&lt;/artifactId&gt;<br />
    &nbsp;&nbsp;&nbsp;&lt;version&gt;6.0.0beta14&lt;/version&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
    &nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />
    &nbsp;&nbsp;&lt;/plugins&gt;<br />
    mvn package 之后可以mvn jetty6:run<br />
    启动之后，可以在另一个进程　mvn compile.冒死可以热交换<br />
    在mvn jetty6:run的console Ctrl+c可以停止进程<br />
    ６.文件放置位置：<br />
    resource/ ：<br />
    log4j.xml ,webwork相关，ehcache.xml, spring配置文件的properties文件，比如jdbc.properties<br />
    webapp/web-inf&nbsp; ：<br />
    applicationContext,web.xml<br />
    hbm放在java里面<br />
    7. 其他相关<br />
    在webwork2.2中，不再需要通过ActionAutoWiringInterceptor来给Action注入Spring的bean(这种方式仍然保留在xwork1.1中)，改用了另一种更加方便的方式WebWorkSpringObjectFactory，配置方式如下：<br />
    在webwork.properties中加入如下配置内容：</p>
    <p>webwork.objectFactory=spring<br />
    #以下配置可选<br />
    #webwork.objectFactory.spring.autoWire=name这样就可以了，<br />
    在Action中声明需要某Spring bean，就会自动注入进来。</p>
    <p>autowire的方式有四种：name，type，auto，constructor，默认方式是name，autowire语义是Spring的语义<br />
    另外不推荐用spring管理action</p>
    </li>
</ol>
<img src ="http://www.blogjava.net/libin2722/aggbug/174409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:35 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1.1. Maven2 体验</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174403.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174403.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174403.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174403.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174403.html</trackback:ping><description><![CDATA[<div class="chapter" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a name="d0e44"></a>Chapter&nbsp;1.&nbsp;Maven2</h2>
</div>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="d0e47"></a>1.1.&nbsp;Maven2 体验</h2>
</div>
</div>
</div>
<p><span class="emphasis"><em>声明:本节内容来源于<a href="http://www.blogjava.net/jbob/" target="_top">blogjava网站jbob的blog</a> 本节的版权归原作者所有，不适用本手册的版权申明。</em> </span></p>
<p>maven是一个java项目管理工具，深化了ant，但又有自己一整套的项目集成策略。目前的版本是2.0.2。 </p>
<div class="orderedlist">
<ol type="1">
    <li>
    <p><a href="http://maven.apache.org/" target="_top">maven网站 </a>下载maven2，解压缩 </p>
    <li>
    <p>配置环境变量:maven_home、path</p>
    <li>
    <p>cmd-&gt; mvn --version 检查是否安装成功 [显示版本号，则说明安装成功] </p>
    <li>
    <p>配置,Maven的配置分为三个层次:</p>
    <div class="itemizedlist">
    <ul type="bullet">
        <li style="list-style-type: disc">
        <p>- pom.xml:针对某个项目的配置</p>
        <li style="list-style-type: disc">
        <p>Installation</p>
        <li style="list-style-type: disc">
        <p>User -针对某个用户的配置</p>
        </li>
    </ul>
    </div>
    <p>我们首先配置主要是user级别的，主要包括两点:设置本地的资源库和代理服务器[如果需要的话] 在%maven_home%/conf/setting.xml中配置: </p>
    <pre class="programlisting">					&lt;localRepository&gt;d:/repo&lt;/localRepository&gt;<br />
    </pre>
    <pre class="programlisting">					&lt;proxy&gt;<br />
    &lt;id&gt;proxy1&lt;/id&gt;<br />
    &lt;active&gt;true&lt;/active&gt;<br />
    &lt;protocol&gt;http&lt;/protocol&gt;<br />
    &lt;username&gt;&lt;/username&gt;<br />
    &lt;password&gt;&lt;/password&gt;<br />
    &lt;host&gt;222.136.91.1&lt;/host&gt;<br />
    &lt;port&gt;80&lt;/port&gt;<br />
    &lt;nonProxyHosts&gt;&lt;/nonProxyHosts&gt;<br />
    &lt;/proxy&gt;<br />
    </pre>
    <p>修改之后copy一份到${home}/.m2</p>
    <li>
    <p>建立新的项目</p>
    <pre class="programlisting">					mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app<br />
    </pre>
    <div class="itemizedlist">
    <ul type="bullet">
        <li style="list-style-type: disc">
        <p>首先，程序会从远程下载必要的jar包到你的localRepository,即我们刚刚设置的[d:/repo] </p>
        <li style="list-style-type: disc">
        <p>然后，会在当前目录下面生成my-app文件夹，包括简单的包结构[java,test]和一个HelloWorld程序及测试,以及pom.xml文件。 </p>
        </li>
    </ul>
    </div>
    <p>注意：pom.xml contains the Project Object Model (POM) for this project.The POM is the basic unit of work in Maven。 </p>
    <li>
    <p>编译</p>
    <pre class="programlisting">mvn compile</pre>
    <p>第一次运行会下载很多jar包,而且机器负荷会很重。运行这个命令需要在pom.xml相同目录下面, 这个编译只编译主程序，不会编译test下面的程序。如果需要单独编译test,请运行：</p>
    <pre class="programlisting">mvn test-compile</pre>
    <p>compile之后会生成target文件夹，主程序编译在classes下面，测试程序放在test-classes下</p>
    <li>
    <p>测试</p>
    <pre class="programlisting">mvn test</pre>
    <p>会自动先编译再运行测试</p>
    <li>
    <p>打包</p>
    <pre class="programlisting">mvn package</pre>
    <p>打包之前会进行编译，测试</p>
    <li>
    <p>安装</p>
    <pre class="programlisting">mvn install</pre>
    <p>会将package之后的jar包copy到</p>
    &lt;local-repository&gt;/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
    <li>
    <p>其他</p>
    <pre class="programlisting">mvn site</pre>
    <p>注意,还可以:</p>
    <pre class="programlisting">deploy site</pre>
    <p>在pom.xml中加入</p>
    <pre class="programlisting"> &lt;distributionManagement&gt;<br />
    &lt;site&gt;<br />
    &lt;id&gt; website &lt;/id&gt;<br />
    &lt; url&gt; scp://www.mycompany.com/www/docs/project/ &lt;/url&gt;<br />
    &lt;/site&gt;<br />
    &lt;/distributionManagement&gt;<br />
    </pre>
    <p>当然你需要设置server</p>
    <pre class="programlisting">mvn site-deploy<br />
    mvn clean<br />
    mvn idea:idea [为IDE工具idea生成项目文件]<br />
    </pre>
    <li>
    <p>Resource</p>
    <p>${basedir}/src/main/resources都会编译到jar文件中,而且该目录下的内容将直接位于jar文件的顶部。</p>
    <p>测试用资源文件-&gt; ${basedir}/src/test/resources，引用时如下例：</p>
    <pre class="programlisting">InputStream is = getClass().getResourceAsStream( "/test.properties" );<br />
    </pre>
    <p>文件位于 ${basedir}/src/test/resources/test.properties。</p>
    <li>
    <p>如何filter我们的资源文件</p>
    <pre class="programlisting">   &lt; build &gt;<br />
    &lt; resources &gt;<br />
    &lt; resource &gt;<br />
    &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />
    &lt; filtering &gt; true &lt;/ filtering &gt;<br />
    &lt;/ resource &gt;<br />
    &lt;/ resources &gt;<br />
    &lt;/ build &gt;<br />
    </pre>
    <p>因为原来默认的filter为false所以要加上上面的代码</p>
    <p>eg:我们在src/main/resources下面建立application.properties文件</p>
    <pre class="programlisting"># application.properties<br />
    application.name=${pom.name}<br />
    application.version=${pom.version}<br />
    </pre>
    <p>运行：mvn process-resources 在target/classes下面的application.properties结果为：</p>
    <pre class="programlisting"> # application.properties<br />
    application.name=Maven Quick Start Archetype<br />
    application.version=1.0-SNAPSHOT<br />
    </pre>
    <p>这就是所谓的filter。当然filter还可以用其他的外部文件，不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }] </p>
    <p>e.g src/main/filters/filter.properties:</p>
    <pre class="programlisting"># filter.properties<br />
    my.filter.value=hello!<br />
    </pre>
    <p>pom.xml:</p>
    <pre class="programlisting"> &lt; build &gt;<br />
    &lt; filters &gt;<br />
    &lt; filter &gt; src/main/filters/filter.properties &lt;/ filter &gt;<br />
    &lt;/ filters &gt;<br />
    &lt; resources &gt;<br />
    &lt; resource &gt;<br />
    &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />
    &lt; filtering &gt; true &lt;/ filtering &gt;<br />
    &lt;/ resource &gt;<br />
    &lt;/ resources &gt;<br />
    &lt;/ build &gt; </pre>
    <p># application.properties</p>
    <pre class="programlisting">application.name=${pom.name}<br />
    application.version=${pom.version}<br />
    message=${my.filter.value}<br />
    </pre>
    <p>这样在运行mvn process-resources 会得到类似的效果,当然我们也可以直接在pom.xml中定义：</p>
    <pre class="programlisting">&lt; build &gt;<br />
    &lt; resources &gt;<br />
    &lt; resource &gt;<br />
    &lt; directory &gt; src/main/resources &lt;/ directory &gt;<br />
    &lt; filtering &gt; true &lt;/ filtering &gt;<br />
    &lt;/ resource &gt;<br />
    &lt;/ resources &gt;<br />
    &lt;/ build &gt;<br />
    &lt; properties &gt;<br />
    &lt; my .filter.value &gt; hello &lt;/ my.filter.value &gt;<br />
    &lt;/ properties &gt; </pre>
    <p>效果同样，这样就不需要外部文件了。另外filter还可以来自系统设置以及可以自定义：</p>
    <pre class="programlisting"># application.properties<br />
    java.version=${java.version}<br />
    command.line.prop=${command.line.prop}<br />
    </pre>
    <li>
    <p>jar包依赖</p>
    <p>我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用</p>
    <pre class="programlisting">&lt;dependency&gt;<br />
    &lt;groupId&gt;com.mycompany.app&lt;/groupId&gt;<br />
    &lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
    &lt;scope&gt;compile&lt;/scope&gt;<br />
    &lt;/dependency&gt;</pre>
    <p>注意scope,这里是compile,如果使用junit，scope是test。</p>
    <p>举例说明：如果我们的project需要用到log4j包，那么我们可以 先google--"site:www.ibiblio.org maven2 log4j"。Index of /maven2/log4j/log4j 下面有maven-metadata.xml 描述了groupId,artifactId,version等等。获取了这些信息之后，你 就可以在pom.xml中添加依赖</p>
    <pre class="programlisting">&lt;dependency&gt;<br />
    &lt;groupId&gt;log4j&lt;/groupId&gt;<br />
    &lt;artifactId&gt;log4j&lt;/artifactId&gt;<br />
    &lt;version&gt;1.2.12&lt;/version&gt;<br />
    &lt;scope&gt;compile&lt;/scope&gt;<br />
    &lt;/dependency&gt;</pre>
    <li>
    <p>如何发布我的jar包到我的remote repository</p>
    <p>你需要在setting.xml中间设置server:</p>
    <pre class="programlisting">&lt;servers&gt;<br />
    &lt;server&gt;<br />
    &lt;id&gt;mycompany-repository&lt;/id&gt;<br />
    &lt;username&gt;jvanzyl&lt;/username&gt;<br />
    &lt;!-- Default value is ~/.ssh/id_dsa --&gt;<br />
    &lt;privateKey&gt;/path/to/identity&lt;/privateKey&gt;<br />
    &lt;passphrase&gt;my_key_passphrase&lt;/passphrase&gt;<br />
    &lt;/server&gt;<br />
    &lt;/servers&gt;</pre>
    <p>然后在pom.xml中设置远程url:</p>
    <pre class="programlisting">&lt;distributionManagement&gt;<br />
    &lt;repository&gt;<br />
    &lt;id&gt;mycompany-repository&lt;/id&gt;<br />
    &lt;name&gt;MyCompany Repository&lt;/name&gt;<br />
    &lt;url&gt;scp://repository.mycompany.com/repository/maven2&lt;/url&gt;<br />
    &lt;/repository&gt;<br />
    &lt;/distributionManagement&gt;</pre>
    </li>
</ol>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="d0e228"></a>1.2.&nbsp;Maven2的Eclipse插件安装和使用</h2>
</div>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="d0e231"></a>1.2.1.&nbsp;安装</h3>
</div>
</div>
</div>
<p>你可以从<a href="http://m2eclipse.codehaus.org/" target="_top">http://m2eclipse.codehaus.org</a>update安装Maven2的Eclipse插件，具体 安装步骤请看该网站提供的Flash Demo: <a href="http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html" target="_top">http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html</a></p>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="d0e241"></a>1.2.2.&nbsp;使用</h3>
</div>
</div>
</div>
<p>该插件的使用请看该网站提供的Flash Demo: <a href="http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html" target="_top">http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html</a></p>
<p>关于openfan项目的Maven操作请参看后续章节。</p>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="d0e250"></a>1.3.&nbsp;更多的Maven2的参考</h2>
</div>
</div>
</div>
<div class="itemizedlist">
<ul type="bullet">
    <li style="list-style-type: disc">
    <p><a href="http://maven.apache.org/" target="_top">Maven 网站</a> </p>
    <li style="list-style-type: disc">
    <p><a href="http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/" target="_top">developerWorks 中国：Maven2 的新特性</a> </p>
    <li style="list-style-type: disc">
    <p><a href="http://blog.donews.com/woodstudio/archive/2006/01/31/712379.aspx" target="_top">木头工作室：Maven快速入门</a> </p>
    </li>
</ul>
</div>
</div>
</div>
<div id="stickies-count" style="display: none">0</div>
<div id="stickies-count" style="display: none">0</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/174403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:28 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2.0:编译、测试、部署、运行</title><link>http://www.blogjava.net/libin2722/archive/2008/01/10/174402.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Jan 2008 11:27:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/10/174402.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/174402.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/10/174402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/174402.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/174402.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="1" border="0">
    <tbody>
        <tr>
            <td>来自：<a href="http://www.linuxpk.com/43786.html">http://www.linuxpk.com/43786.html</a></td>
        </tr>
        <tr>
            <td>联系：linuxmine#gmail.com</td>
        </tr>
        <tr>
            <td>分类：<a href="http://www.linuxpk.com/type210.html">[开发工具]</a></td>
        </tr>
    </tbody>
</table>
<script type="text/javascript"> 
cpro_client='linuxmine_cpr';
cpro_cbd='#trans'; 
cpro_cbg='#trans'; 
cpro_ctitle='#0000ff'; 
cpro_cdesc='#444444'; 
cpro_curl='#008000'; 
cpro_clink='#000000'; 
cpro_flush=2; 
cpro_w=480; 
cpro_h=160; 
cpro_template='text_pages_480_160'; 
</script><script language="JavaScript" src="http://cpro.baidu.com/cpro/ui/cp.js" type="text/javascript"></script><br />
　　摘要：Maven1.0已经历了几年的时间，并且作为Ant的替代品已被广大的开发人员所接收，但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。Maven1.0速度慢并且笨拙，使用起来的困难度并不亚于使用Ant的项目。事实上，它的核心是基于Ant实现的。在经过了几乎彻底的重写后，Maven2.0诞生了。<br />
<br />
　　一个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 />
　　<span style="color: red">版权声明：任何获得Matrix授权的网站，转载时请务必保留以下作者信息和链接<br />
<br />
　　作者:Chris Hardin;mycj(作者的blog:http://blog.matrix.org.cn/page/mycj)<br />
<br />
　　原文:http://www.onjava.com/pub/a/onjava/2006/03/29/maven-2-0.html<br />
<br />
　　Matrix:http://www.matrix.org.cn/resource/article/44/44475_Maven2.html<br />
<br />
　　关键字:Maven2<br />
<br />
　　<span style="font-size: 16px">Maven2.0的优点<br />
<br />
　　Maven2.0有许多很好功能，这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java项目，并且想使该项目快速地开展下去，Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点：<br />
<br />
　　--标准的项目布局和项目结构生成器<br />
<br />
　　--标准的依赖管理机制<br />
<br />
　　--多项目支持<br />
<br />
　　--在开发者需要的时候及时地下载新的插件和功能部件<br />
<br />
　　--生成最新项目信息的网站<br />
<br />
　　--集成了源代码控制软件：CVS和Subversion<br />
<br />
　　以上列表展示的只是Maven2.0特点中的一小部分。但这足以使Maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道Maven是个什么东西了，接下来让我们看看如何使用它。<br />
<br />
　　<span style="font-size: 16px">入门<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<br />
<br />
　　您看，这就生成了我们的项目布局。<br />
<br />
　　my-app<br />
<br />
　　----src<br />
<br />
　　----main<br />
<br />
　　----java<br />
<br />
　　 ----com<br />
<br />
　　 ----oreilly<br />
<br />
　　----test<br />
<br />
　　----java<br />
<br />
　　----com<br />
<br />
　　----oreilly<br />
<br />
　　对，就这么简单。这种目录结构可以通过创建一个新的原型来覆写，但并不推荐这么做，因为Maven的一个优点就是使用标准的目录结构。该目录结构包含两个源代码树，一个是Java应用程序的源代码，另一个是单元测试代码。同时您也许会注意到，当第一次运行Maven的时候，它会进行一些下载工作。当您开始调用工具时，Maven会根据您使用的插件来更新自身的一些所需功能。Maven默认会从Ibiblio存储库中得到更新。您可以在Maven安装目录下的conf目录中，或者项目自身中修改Maven远程存储库的选择。<br />
<br />
　　您会发现Maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部分。pom.xml文件包含了一组指令，这些指令告诉Maven如何构建项目和包含哪些其它的特殊指令（POM是&#8220;项目对象模型&#8221;的缩写）。在默认的情况下，Maven包含了JUnit的依赖以此来鼓励单元测试。<br />
<br />
　　
<pre class="overflow">&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
<br />
　　xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
<br />
　　&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
<br />
　　&lt;packaging&gt;jar&lt;/packaging&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;name&gt;Maven Quick Start Archetype&lt;/name&gt;<br />
<br />
　　&lt;url&gt;http://maven.apache.org&lt;/url&gt;<br />
<br />
　　&lt;dependencies&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;junit&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;3.8.1&lt;/version&gt;<br />
<br />
　　&lt;scope&gt;test&lt;/scope&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;/dependencies&gt;<br />
<br />
　　&lt;/project&gt;</pre>
<br />
<br />
　　创建完项目后，我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。<br />
<br />
　　--mvn test：运行应用程序中的单元测试<br />
<br />
　　--mvn package：依据项目生成jar文件<br />
<br />
　　--mvn install：将项目的jar文件添加到库中，&#61548;以备依赖此项目时使用<br />
<br />
　　--mvn site：生成项目相关信息的网站<br />
<br />
　　--mvn clean：清除目标目录中的生成结果<br />
<br />
　　--mvn eclipse:eclipse：生成Eclipse项目文件<br />
<br />
　　接下来我们看看稍微复杂点的地方，我们知道手动开始一个Java web项目比手动开始一个简单的Java项目更耗时，然而Maven的使用则能化难为易。下面的例子（实际上是一行命令）展现了项目结构的构造。<br />
<br />
　　<span style="color: blue">mvn archetype:create -DgroupId=com.oreilly<br />
<br />
　　-DartifactId=Oreilly<br />
<br />
　　-DarchetypeArtifactId=maven-archetype-webapp<br />
<br />
　　生成的结果结构如下所示：<br />
<br />
　　Oreilly<br />
<br />
　　----src<br />
<br />
　　----main<br />
<br />
　　----resources<br />
<br />
　　----webapp<br />
<br />
　　----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 />
<br />
　　
<pre class="overflow">&lt;build&gt;<br />
<br />
　　&lt;finalName&gt;PromoteC&lt;/finalName&gt;<br />
<br />
　　 &lt;/build&gt;</pre>
<br />
<br />
　　<span style="font-size: 16px">依赖管理<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 />
<br />
　　
<pre class="overflow">&lt;dependency&gt;<br />
<br />
　　 &lt;groupId&gt;quartz&lt;/groupId&gt;<br />
<br />
　　 &lt;artifactId&gt;quartz&lt;/artifactId&gt;<br />
<br />
　　 &lt;version&gt;1.5.1&lt;/version&gt;<br />
<br />
　　 &lt;scope&gt;compile&lt;/scope&gt;<br />
<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 />
<br />
　　--compile：默认值。表明是所有任务所需的资源<br />
<br />
　　--test：运行所有的测试用例时所需资源<br />
<br />
　　--runtime：表明是运行时所需资源<br />
<br />
　　--provided：JDK部分或应用服务器的classpath所需的资源<br />
<br />
　　现在，如何处理那些麻烦的Sun的jar包和那些需要但却不能在远程存储库中找到的jar包了？我们必须使用Maven来手动将这些jar包安装到本地的存储库中。不用担心，这没有听上去那么困难。为了做个示例，我们将安装Java Activation框架的jar包。首先我们必须从Sun的站点上下载此jar包，接着我们使用Maven将它导入本地的存储库中。您自己也可以按照Maven上传资源指南中的指导将缺少的jar包安装到Ibiblio中。<br />
<br />
　　<span style="color: blue">mvn install:install-file -Dfile=activation.jar<br />
<br />
　　-DgroupId=javax.activation -DartifactId=activation<br />
<br />
　　-Dversion=1.0 -Dpackaging=jar<br />
<br />
　　现在，新的jar包就像其它的项目依赖项一样安装到了本地存储库中。在只需添加依赖声明后，我们就已准备就绪了。在添加jar包和声明它们为依赖项时，必须确保版本信息的正确性。版本的不匹配会导致Maven在寻找资源时的失败。在导入Sun的jar包时，如果您需要寻求标准命名参数的帮助，可以参考Sun标准jar包命名。记住，在目前您不能通过存储库来公开发布这些jar包，这将违反Sun的使用条款。<br />
<br />
　　
<pre class="overflow">&lt;dependency&gt;<br />
<br />
　　 &lt;groupId&gt;javax.activation&lt;/groupId&gt;<br />
<br />
　　 &lt;artifactId&gt;activation&lt;/artifactId&gt;<br />
<br />
　　 &lt;version&gt;1.0&lt;/version&gt;<br />
<br />
　　 &lt;scope&gt;compile&lt;/scope&gt;<br />
<br />
　　 &lt;/dependency&gt;</pre>
<br />
<br />
　　您或许想将依赖项存入一个源代码控制器的库中，源代码控制器决不能执行这个任务。依赖项是经常变化的，并且通常有一套数字方案来标明其版本。这就是说，您明确地希望有一个内部远程存储库的备份，如果您有一个，这将确保在存储库服务器崩溃并且不能恢复的情况下，您不会丢失所有的自定义资源。不将依赖项放入源代码控制器中也会节省源代码控制器的存储库服务器上的大量磁盘空间。<br />
<br />
　　<span style="font-size: 16px">配置存储库<br />
<br />
　　要求项目的每个开发者必须在conf目录中配置存储库是不方便的，所以Maven可以同时查看多个存储库并且将它们全部配置在pom.xml文件中。让我们看看一个例子，它展示了如何在应用程序用使用多个存储库。在以下从pom.xml文件摘录的片断中，我们设置了两个存储库来让Maven寻找依赖项。Ibiblio一直是默认的存储库，我们又添加了Planet Mirror作为后援存储库。我们也可以让团队使用的本地web服务器作为第二个存储库。<br />
<br />
　　
<pre class="overflow">&lt;repositories&gt;<br />
<br />
　　&lt;repository&gt;<br />
<br />
　　&lt;id&gt;Ibiblio&lt;/id&gt;<br />
<br />
　　&lt;name&gt;Ibiblio&lt;/name&gt;<br />
<br />
　　&lt;url&gt;http://www.ibiblio.org/maven/&lt;/url&gt;<br />
<br />
　　&lt;/repository&gt;<br />
<br />
　　&lt;repository&gt;<br />
<br />
　　&lt;id&gt;PlanetMirror&lt;/id&gt;<br />
<br />
　　&lt;name&gt;Planet Mirror&lt;/name&gt;<br />
<br />
　　&lt;url&gt;http://public.planetmirror.com/pub/maven/&lt;/url&gt;<br />
<br />
　　&lt;/repository&gt;<br />
<br />
　　&lt;/repositories&gt;</pre>
<br />
<br />
　　<span style="font-size: 16px">使用pom.xml父文件来构建多个项目<br />
<br />
　　软件公司通常的一种做法就是将多个项目构建到主要产品中。维护依赖关系链和一次性地构建整个产品足以成为一个挑战，但是如果使用Maven的话，事情将变得简单。如果您创建了一个指向其它子模块的pom.xml父文件，Maven将为您处理整个构建过程。它将分析每个子模块的pom.xml文件，并且按照这些子模块的相互依赖顺序来构建项目。如果每个项目明确地指明它们的依赖项，那么子模块在父文件中的放置顺序是不造成任何影响的。但是考虑到其他的开发者，最好保证子模块在pom.xml父文件中的放置顺序和您期望的子项目被构建的顺序一样。下面我们看个示例。<br />
<br />
　　pom.xml主文件如下：<br />
<br />
　　
<pre class="overflow">&lt;project&gt;<br />
<br />
　　&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
<br />
　　&lt;packaging&gt;pom&lt;/packaging&gt;<br />
<br />
　　&lt;modules&gt;<br />
<br />
　　&lt;module&gt;Common&lt;/module&gt;<br />
<br />
　　&lt;module&gt;Utilities&lt;/module&gt;<br />
<br />
　　&lt;module&gt;Application&lt;/module&gt;<br />
<br />
　　 &lt;module&gt;WebApplication&lt;/module&gt;<br />
<br />
　　&lt;/modules&gt;<br />
<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 />
<br />
　　
<pre class="overflow">&lt;dependencies&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;Common&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;/dependencies&gt;</pre>
<br />
<br />
　　以下是如何声明Application模块的依赖项：<br />
<br />
　　
<pre class="overflow">&lt;dependencies&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;Common&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;Utilities&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;/dependencies&gt;</pre>
<br />
<br />
　　最后是WebApplication模块的依赖项：<br />
<br />
　　
<pre class="overflow">&lt;dependencies&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;Common&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;Utilities&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;dependency&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;Application&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/dependency&gt;<br />
<br />
　　&lt;/dependencies&gt;</pre>
<br />
<br />
　　现在，我们只需为每个子模块的pom.xml文件添加一个元素来表明它们是一个逻辑构建的一部分：<br />
<br />
　　
<pre class="overflow">&lt;parent&gt;<br />
<br />
　　&lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />
<br />
　　&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
<br />
　　&lt;/parent&gt;</pre>
<br />
<br />
　　在pom.xml父文件所在的同一个目录中，存在有项目目录：Common, Utilities, Application, 和WebApplication。当我们在该目录中运行mvn package命令时，这些项目会按照依赖顺序而被构建。<br />
<br />
　　<span style="font-size: 16px">插件和报表<br />
<br />
　　Maven2.0有大量的插件可以使用。不幸的是，由于Maven的重写，Maven1.0的插件不能在2.0中使用。尽管如此，还是存在一些可以使用的Maven2.0的插件。下面pom.xml文件中的插件配置示例是直接从Maven2.0网站上得来的。这个插件是用来配置编译选项的。<br />
<br />
　　
<pre class="overflow">&lt;plugins&gt;<br />
<br />
　　&lt;plugin&gt;<br />
<br />
　　&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />
<br />
　　&lt;configuration&gt;<br />
<br />
　　&lt;source&gt;1.5&lt;/source&gt;<br />
<br />
　　&lt;target&gt;1.5&lt;/target&gt;<br />
<br />
　　&lt;/configuration&gt;<br />
<br />
　　&lt;/plugin&gt;<br />
<br />
　　&lt;/plugins&gt;</pre>
<br />
<br />
　　Maven报表插件可以用来生成不同的报表，这些报表是在当你使用mvn site命令生成项目的站点时产生的。下面的例子展示了如何使用&lt;reporting&gt;元素来配置这类插件中的一个。<br />
<br />
　　
<pre class="overflow">&lt;reporting&gt;<br />
<br />
　　&lt;plugins&gt;<br />
<br />
　　&lt;plugin&gt;<br />
<br />
　　&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
<br />
　　&lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;<br />
<br />
　　&lt;/plugin&gt;<br />
<br />
　　&lt;/plugins&gt;<br />
<br />
　　&lt;/reporting&gt;</pre>
<br />
<br />
　　Maven Plugin Matrix是一个十分实用的工具，它能给出哪些Maven插件适合于哪些版本的Maven。<br />
<br />
　　<span style="font-size: 16px">Maven 和 Eclipse<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工具能够节省开发人员的时间。例如，如果一个开发人员为一个项目添加了一些特征，团队里的其他开发人员只需从源代码控制器的存储库中重新获取项目文件即可，这就节省了每个开发人员必须配置IDE的时间。<br />
<br />
　　<span style="font-size: 16px">结论<br />
<br />
　　Maven2.0有着许多实用的特点，并且完成任务十分出色。Maven中最值得称赞的地方就是使用了标准的目录结构和部署。这就使得开发人员能够适应不同的项目，并且不用学习任何结构方面新的东西，也不用掌握特殊的指令来构建结构。Maven可以通过纯脚本来实现。在文档方面，由于使用了项目站点构建工具，所以当项目构建完成后，您可以查看所有开发的当前状态。<br />
<br />
　　毫无疑问，当提到构建配置的伸缩性，易用性和项目管理方面时，Maven2.0足可以将Ant取而代之。在接下来的几年内，我们将看到Maven作为标准构建技术更多的使用，直到有人带来了大家公认的&#8220;高级捕鼠器&#8221;。您可以从下面列出的Maven项目站点上下载Maven。<br />
<br />
　　资源<br />
<br />
　　Matrix:http://www.matrix.org.cn<br />
<br />
　　Onjava:http://www.onjava.com<br />
<br />
　　Maven项目站点<br />
<br />
　　Chris Hardin 是McLeod软件公司的高级Java工程师。
<div></div>
<a href="http://www.linuxpk.com/43786.html">本文来自：http://www.linuxpk.com/43786.html</a><br />
</span></span></span></span></span></span></span></span></span></span></span></span>
<img src ="http://www.blogjava.net/libin2722/aggbug/174402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-10 19:27 <a href="http://www.blogjava.net/libin2722/archive/2008/01/10/174402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2 常用命令</title><link>http://www.blogjava.net/libin2722/archive/2008/01/08/173837.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Tue, 08 Jan 2008 15:38:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2008/01/08/173837.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/173837.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2008/01/08/173837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/173837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/173837.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ----------------------------------------------------------------------------------------------------------------------------------Install an artifact with a custom POMThe install plugin can incl...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/archive/2008/01/08/173837.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/173837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-01-08 23:38 <a href="http://www.blogjava.net/libin2722/archive/2008/01/08/173837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>