??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成人精品不卡视频在线观看,国产精品一区二区三区四区五区,亚洲网址在线观看http://www.aygfsteel.com/libin2722/category/28813.html虚其心,可解天下之问Q专其心Q可d下之学;静其心,可悟天下之理Q恒其心Q可成天下之业?/description>zh-cnSat, 15 Mar 2008 18:54:59 GMTSat, 15 Mar 2008 18:54:59 GMT60MAVEN----maven2新特?/title><link>http://www.aygfsteel.com/libin2722/archive/2008/03/15/186478.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Sat, 15 Mar 2008 05:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/archive/2008/03/15/186478.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/186478.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/archive/2008/03/15/186478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/186478.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/libin2722/services/trackbacks/186478.html</trackback:ping><description><![CDATA[  <div id="wmqeeuq" class="Content-body" id="logPanel">本文主要阐述 Maven2 的新Ҏ,q些新特性可以大大地~短了开发管理中的工作量Q得开发h员将_֊集中在实际的业务问题上?<br /> Maven 出现到现在也有很长时间了Q初识它的感觉至今仍清晰的印在脑中。现在想来,当时?Ant UL Maven 的想法其实很朴素Q就是因?Maven 可以以网站的形式展现与项目相关的信息Q如开发h员列表、各U?Report。这U方式ؓ目的构建带来了极大的方便,其?Report 的。试惛_于生的 Junit-Report、JavaDoc、CheckStyle、PMD {报告,如果没有一个统一的入口,每次切换目录是多么o人厌烦的事情Q?<br /> <br /> Maven 无疑是相当成功的Q这一点从来多的开源项目开始?Maven 可以看出。Maven 取得成功的原因很单:在简化构本的同时Q功能ƈ没有~水Q反而有所增强Q提供汇集项目信息的工具Qƈ以相当友好的方式呈现Q丰富的插g化了工作。如此有力的工具出现Q自然是争相使用?<br /> <br /> 新特?<br /> <br /> 如今 Maven2 已经推出QMaven 的官方网站称QMaven2 相对?Maven1 是一个相当大的{变,甚至不惜牺牲兼容性来辑ֈq一目的。(Z Maven1 的用L惻IMaven1 仍在l箋他的使命。)如此大的变动到底换来了什么样的结果? <br /> <br /> 1Q?更快、更?<br /> <br /> 比v Maven1 那不急不慢的q行速度QMaven2在速度上有了质的飞跃,甚至与Ant相比也毫不逊色Q当Ӟ下蝲不算Q。除此之外,"化工作,使用业界公认的最佛_?也是?Maven2 的另一大主题,其他的新Ҏ无处不在体?Maven2 为简化工作而做出的努力?<br /> <br /> 2Q?更少的配|文?<br /> <br /> Maven1 ?Maven2 主要配置文g的对比: <br /> <br /> Maven1Qproject.xml、maven.xml、project.properties和build.properties?<br /> Maven2Qpom.xml和settings.xml?<br /> POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中用,版本也由3升?。对于项目,一般只需要pom.xmlp了?<br /> <br /> 在Maven2中不需要也不提倡用maven.xmlQ原因如下: <br /> <br /> plugin的易用性的增强?<br /> 散布于maven.xml中的内容难以在不同项目间׃nQ也不利于维护。在Maven2中徏议用自定义的plugin来封装这些内宏V?<br /> 如果仍期望能够用类似maven.xml的功能,?lt;preGoal>Q请参考Inserting non-standard build steps using preGoals and postGoals?<br /> <br /> 在Maven2中,配置使用settings.xmlQ它取代了原有的project.properties和build.properties。配|在Maven2中存在两U别: <br /> <br /> 用户U,针对操作pȝd用户而言。一般在$home/.m2/Q对于windows用户Q就是目录:C:\Documents and Settings\用户名\.m2\settings.xml?<br /> 全局U:一般在%M2_HOME%/conf/settings.xmlQM2_HOME是Maven2的根目录环境变量名?<br /> 在settings.xml中可以配|,如本地Repository、proxy{等Q关于settings.xml的结构可以从Maven的官方网站上获取?<br /> <br /> 3Q?Plugin语言更换 <br /> <br /> 在Maven2中,~写plugin的语a由jelly变更为Java和BeanShell。Java在速度上更有优势,而且开发h员的熟悉E度更高。对于其他的行脚本Q如groovyQMaven的官方网站的意见是,{待其更成熟时再考虑 <br /> <br /> ?<br /> 4Q?提供预定义的目录模板 <br /> <br /> 好的目录l构可以使开发h员更Ҏ理解目Qؓ以后的维护工作也打下良好的基。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>目?  pom.xml src/  main/ 目M目录 java 源代码目? resources 所需 资源目录 fileters 资源qo文g目录 assembly config 配置文g目录 test/  main/  java resources fileters site 与site相关的资源文? target/ 输出目录 classes 目主题输出目录 test-classes 试输出目录 site Ҏsite输出目录 </pre> </td> </tr> </tbody> </table> <br /> <br /> <br /> <br /> 使用目录模板Q可以pom.xml更简z。因为Maven2已经Ҏ~省目录Q预定义了相关的动作Q而无需人工的干预。以resources目录ZQ?<br /> <br /> src/main/resourcesQ负责管理项目主体的资源。在使用Maven2执行compile之后Q这个目录中的所有文件及子目录,会复制到target/classes目录中,Z后的打包提供了方ѝ?<br /> src/test/resourcesQ负责管理项目测试的资源。在使用Maven2执行test-compile之后Q这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后l的试做好了准备?<br /> q些动作?Maven1 中,是需要在 maven.xml 中?lt;preGoal>?lt;postGoal>来完成的。如今,完全不需要在pom.xml中指定就能够自动完成。在src?test都用resourcesQ方便构建和试Q这U方式本已是前人的l验。通过使用Maven2Qɘq个l验在开发团队中得到普及?<br /> <br /> 创徏标准目录模板Q可以通过如下命oQ?<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中的含义一P参数artifactId的g作ؓ目根目录的名字。除了徏立相应的目录之外QMaven2q会创徏~省的pom.xml?<br /> <br /> Maven2也考虑刎ͼ不同cd的项目需要拥有不同的目录l构。如创徏web目Q可以用命令: <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 /> 5Q?生命周期的引?<br /> <br /> 在Maven2中有了明的生命周期概念Q而且都提供与之对应的命oQ得项目构建更加清晰明了。主要的生命周期阶段Q?<br /> <br /> validateQ验证工E是否正,所有需要的资源是否可用?<br /> compileQ编译项目的源代码?<br /> test-compileQ编译项目测试代码?<br /> testQ用已~译的测试代码,试已编译的源代码?<br /> packageQ已发布的格式,如jarQ将已编译的源代码打包?<br /> integration-testQ在集成试可以q行的环境中处理和发布包?<br /> verifyQ运行Q何检查,验证包是否有效且辑ֈ质量标准?<br /> installQ把包安装在本地的repository中,可以被其他工E作Z赖来使用 <br /> deployQ在整合或者发布环境下执行Q将最l版本的包拷贝到q程的repositoryQ得其他的开发者或者工E可以共享?<br /> generate-sourcesQ生应用需要的M额外的源代码Q如xdoclet?<br /> 如果要执行项目编译,那么直接输入Qmvn compile卛_Q对于其他的阶段可以cL。阶D之间是存在依赖关系QdependencyQ的Q如test依赖test-compile。在执行 mvn testӞ会先q行mvn test-compileQ然后才是mvn test?<br /> <br /> 6Q?新增Dependency Scope <br /> <br /> 在POM 4中,<dependency>中还引入?lt;scope>Q它主要理依赖的部|Ӏ目?lt;scope>可以使用5个| <br /> <br /> compileQ缺省|适用于所有阶D,会随着目一起发布?<br /> providedQ类似compileQ期望JDK、容器或使用者会提供q个依赖。如servlet.jar?<br /> runtimeQ只在运行时使用Q如JDBC驱动Q适用q行和测试阶Dc?<br /> testQ只在测试时使用Q用于编译和q行试代码。不会随目发布?<br /> systemQ类似providedQ需要显式提供包含依赖的jarQMaven不会在Repository中查扑֮?<br /> <scope>的用D例: <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><dependency> <groupId>hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.0.3</version> <scope>test</scope> </dependency> </pre> </td> </tr> </tbody> </table> <br /> <br /> 7Q?传递依赖,化依赖管?<br /> <br /> 在Maven1中,需要把依赖所需要的包也一q列出。这对于使用cM如Hibernate的用h说所操的心太多了Q而且也不方便。在Maven2中实C传递依赖,如此对于Hibernate所依赖的包QMaven2会自动下载,开发h员只需兛_Hibernate卛_?<br /> <br /> 注意Q只有得到Maven支持的依赖,通常是plugin形式出现Q才能获得这个特性。而且对于一些老的pluginQ可能由于时间的关系不支持传递依赖。如臛_在Maven 2.0.1中,对于Hibernate 2.1.2Q仍焉要显式列出Hibernate 2.1.2所依赖的包?<br /> <a target="_blank"><img title="点击在新H口打开" 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 class="wmqeeuq" 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 class="wmqeeuq" id="jive-content-rating"> <div class="wmqeeuq" id="jive-content-avgrating"> <div class="wmqeeuq" id="jive-content-avgrating-title" style="padding-right: 38px">q_得分</div> <!--@jive.ratingdisplay meanrating="" /--> <div class="wmqeeuq" id="jive-content-avgrating-score" title="q_? 0"></div> <div class="wmqeeuq" id="jive-content-avgrating-count">(0 ơ评?</div> </div> </div> <br /> <br /> <br /> <br /> </div> <br /> </div> <div id="wmqeeuq" class="Content-body"><img style="margin: 0px 2px -4px 0px" alt="" src="http://sherrydong.blog.chinajavaworld.com/images/From.gif" /><strong>文章来自:</strong> <a target="_blank">developerworks</a></div> <img src ="http://www.aygfsteel.com/libin2722/aggbug/186478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2008-03-15 13:53 <a href="http://www.aygfsteel.com/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.aygfsteel.com/libin2722/archive/2008/02/02/179037.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Sat, 02 Feb 2008 07:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/archive/2008/02/02/179037.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/179037.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/archive/2008/02/02/179037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/179037.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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;"><?</span><span style="color: #ff00ff;">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff;">?></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">project </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 />  xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br />  xsi:schemaLocation</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">></span><span style="color: #000000;">4.0.0</span><span style="color: #0000ff;"></</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;">PM_Member_EAR</span><span style="color: #0000ff;"></</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;">PM_Member_EAR</span><span style="color: #0000ff;"></</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">packaging</span><span style="color: #0000ff;">></span><span style="color: #000000;">ear</span><span style="color: #0000ff;"></</span><span style="color: #800000;">packaging</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">version</span><span style="color: #0000ff;">></span><span style="color: #000000;">0.1-SNAPSHOT</span><span style="color: #0000ff;"></</span><span style="color: #800000;">version</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">description</span><span style="color: #0000ff;">></</span><span style="color: #800000;">description</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"><</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;"></</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;">MemberWeb</span><span style="color: #0000ff;"></</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">version</span><span style="color: #0000ff;">></span><span style="color: #000000;">0.1-SNAPSHOT</span><span style="color: #0000ff;"></</span><span style="color: #800000;">version</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">type</span><span style="color: #0000ff;">></span><span style="color: #000000;">war</span><span style="color: #0000ff;"></</span><span style="color: #800000;">type</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"></</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"><</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;"></</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;">frontWeb</span><span style="color: #0000ff;"></</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">version</span><span style="color: #0000ff;">></span><span style="color: #000000;">0.1-SNAPSHOT</span><span style="color: #0000ff;"></</span><span style="color: #800000;">version</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">type</span><span style="color: #0000ff;">></span><span style="color: #000000;">war</span><span style="color: #0000ff;"></</span><span style="color: #800000;">type</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"></</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"></</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br />  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">build</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"><</span><span style="color: #800000;">finalName</span><span style="color: #0000ff;">></span><span style="color: #000000;">newegg</span><span style="color: #0000ff;"></</span><span style="color: #800000;">finalName</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"><</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />     </span><span style="color: #0000ff;"><</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;">org.apache.maven.plugins</span><span style="color: #0000ff;"></</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />     </span><span style="color: #0000ff;"><</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;">maven-ear-plugin</span><span style="color: #0000ff;"></</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />     </span><span style="color: #0000ff;"><</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />      </span><span style="color: #0000ff;"><</span><span style="color: #800000;">modules</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />       </span><span style="color: #0000ff;"><</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;"></</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;">MemberWeb</span><span style="color: #0000ff;"></</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />         /MemberWeb<br />        </span><span style="color: #0000ff;"></</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        <br />       </span><span style="color: #0000ff;"></</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />       <br />       </span><span style="color: #0000ff;"><</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;">com.newegg.lab</span><span style="color: #0000ff;"></</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;">frontWeb</span><span style="color: #0000ff;"></</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />         /frontWeb<br />        </span><span style="color: #0000ff;"></</span><span style="color: #800000;">contextRoot</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />        <br />       </span><span style="color: #0000ff;"></</span><span style="color: #800000;">webModule</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />      </span><span style="color: #0000ff;"></</span><span style="color: #800000;">modules</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />     </span><span style="color: #0000ff;"></</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;"></</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />   </span><span style="color: #0000ff;"></</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;"></</span><span style="color: #800000;">build</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">project</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span></div> <img src ="http://www.aygfsteel.com/libin2722/aggbug/179037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2008-02-02 15:21 <a href="http://www.aygfsteel.com/libin2722/archive/2008/02/02/179037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再发一个mavenhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174467.htmlC物C物Thu, 10 Jan 2008 15:10:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174467.htmlhttp://www.aygfsteel.com/libin2722/comments/174467.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174467.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174467.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174467.html阅读全文

C物 2008-01-10 23:10 发表评论
]]>
Apache Maven 2 ?最全的文档)http://www.aygfsteel.com/libin2722/archive/2008/01/10/174425.htmlC物C物Thu, 10 Jan 2008 11:59:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174425.htmlhttp://www.aygfsteel.com/libin2722/comments/174425.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174425.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174425.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174425.html阅读全文

C物 2008-01-10 19:59 发表评论
]]>
mvn功能? http://www.aygfsteel.com/libin2722/archive/2008/01/10/174420.htmlC物C物Thu, 10 Jan 2008 11:46:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174420.htmlhttp://www.aygfsteel.com/libin2722/comments/174420.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174420.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174420.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174420.html
一个简单的而完全可操作的pom.xml如下所C:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
      http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <!--maven2-->
<groupId>ctzj_bss</groupId> <!-- q个目所属组的idQ一般是目所在的公司或组l的域名 -->
<artifactId>NRC</artifactId> <!-- 目的id,和groupId一L成这个项目的一个唯一idQ以用在别的maven2工程?-->
<packaging>jar</packaging> <!-- 最后这个工E的打包cd,在这里是打成jar?-->
<version>1.0</version> <!-- 版本?-->
<name>kenan nrc batch</name> <!-- 目? 区别于artifactId-->
<description>insert a nrc in kenan db</description> <!-- 目描述,会出现在生成的工E站点上 -->
<build> <!-- 目的构Z?-->
    <sourceDirectory>src</sourceDirectory>
    <testSourceDirectory>test</testSourceDirectory>
    <outputDirectory>target\classes</outputDirectory>
    <testOutputDirectory>target\test-classes</testOutputDirectory>
    <directory>target</directory> <!-- 构徏后生成文?jar,site{?所在位|?-->
</build>
<dependencies> <!-- 目的依赖外接包,maven的优势之一 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<reporting> <!-- 目报表,有很多插件可供选择 -->
    <outputDirectory>target/site</outputDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
        </plugin>
    </plugins>
</reporting>
</project>

在你配置了你的pom文g后,你就可以使用如下命o来运行maven2

mvn compiler:compile ~译你的原文?br /> mvn jar:jar 打包
mvn site:site 生成目站点


接下来逐个介绍pom.xml的各个要?br /> developor,organization and mail lit
build
dependencies
reporting


1.developor,organization and mail list

可以在pom中加入开发h员列?目所属组l信?邮g列表,q些信息会出现在生成的项目站点上

<organization>
    <name>CTZJ BSS</name>
</organization>
<developers>
    <developer>
        <name>Chen Lin</name>
        <organization>ZJHCsoft</organization>
        <email>chenlin@zjhcsoft.com</email>
    </developer>
</developers>
<mailingLists>
    <mailingList>
        <name>${pom.name} Dev List</name>
    </mailingList>
    <mailingList>
        <name>${pom.name} User List</name>
    </mailingList>
</mailingLists>

2. build

配置目的构Z?主要有指定目?包括源代码、测试源代码、输出目录、资源目录等.如果没有Ҏ需求以上的pom已经_?br />
3. dependencies

配置目要用到的jar?自认为maven对jar包的理是它的一个重要特?下面是一个jar包的配置:

<dependency>
    <groupId>concurrent</groupId>
    <artifactId>concurrent</artifactId>
    <version>1.3.4</version>
    <scope>compile</scope>
</dependency>

groupId: 没有特定的含?一般来自同一l织的jar包会有相同的groupId?br /> artifactId: q个jar的id,一般是q个jar包的名称
version: jar包的版本?一般情况下,artifactId-version.jar是q个jar包的文g?br /> scope: q个jar所影响的范?compile指它会在~译源代码时用到.q有test,provide,runtime{?br />
如果你不知道jar包的groupId和artifactIdQ可以到http://www.mavenregistry.com/ q行查询

一旦指定后,当你q行~译Ӟ它就会到你的本地资源?br />
?如果你引入本地包Q则需要先行将它安装到本地资料?repository),使用如下命o

mvn install:install-file -DgroupId=%groupId% -DartifactId=%artifactId% -DgeneratePom=true -Dfile=%file% -Dpackaging=jar -Dversion=%version%

4. reporting

通过使用相应的report plug-in可以生成各种各样的report.如javadoc,junit test report,代码查等

常用的常见有

<plugin>
    <groupId>org.apache.maven.plugins</groupId> <!--java doc -->
    <artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId> <!-- 代码?-->
    <artifactId>maven-checkstyle-plugin</artifactId>
    <configuration>
        <configLocation>config/sun_checks.xml</configLocation>
    </configuration>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId> <!-- test l果报表 -->
    <artifactId>surefire-report-maven-plugin</artifactId>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId> <!-- 源代码的HTML?-->
    <artifactId>jxr-maven-plugin</artifactId>
</plugin>

在maven的官方网站有可以扑ֈ更多的report plugin


最后一个比较完整的pom.xml看v来像q样Q?br />
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>CutoverModule</name>
<groupId>ctzj_batch</groupId>
<artifactId>eai_cutover</artifactId>
<url>http://134.98.83.137:8081/scarab/issues</url>
<inceptionYear>2006</inceptionYear>
<organization>
    <name>CTZJ BSS</name>
    <url>http://www.zjhcsoft.com</url>
</organization>
<version>1.0</version>
<description>97 cutover batch module:invoke eai-adapter to update the phone number or value of
c4/c5</description>
<developers>
    <developer>
        <name>Chen Lin</name>
        <organization>ZJHCSoft</organization>
        <email>chenlin@zjhcsoft.com</email>
    </developer>
</developers>
<mailingLists>
    <mailingList>
        <name>${pom.name} Dev List</name>
     </mailingList>
</mailingLists>
<build>
    <sourceDirectory>src</sourceDirectory>
    <testSourceDirectory>test</testSourceDirectory>
    <outputDirectory>target\classes</outputDirectory>
    <testOutputDirectory>target\test-classes</testOutputDirectory>
    <directory>target</directory>
    <plugins>
    <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.1</version>
    </plugin>
    <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.1</version>
    </plugin>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0</version>
    </plugin>
    <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.1.2</version>
    </plugin>
    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.0</version>
    </plugin>
    <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.1</version>
    </plugin>
    </plugins>
</build>
<ciManagement>
    <system>continuum</system>
    <url>http://localhost:8080/continuum/servlet/continuum</url>
</ciManagement>
<scm>
    <connection>scm:local|E:/eclipseworkshop|EAIBatch</connection>
</scm>
<dependencies>
    <dependency>
        <groupId>ctzj_batch</groupId>
        <artifactId>Eaiadapter</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>ctzj_batch</groupId>
        <artifactId>ta</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>ctzj_batch</groupId>
        <artifactId>grnds-common</artifactId>
        <version>4.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>concurrent</groupId>
        <artifactId>concurrent</artifactId>
        <version>1.3.4</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
<reporting>
    <outputDirectory>target/site</outputDirectory>
    <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
            <configLocation>config/sun_checks.xml</configLocation>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>surefire-report-maven-plugin</artifactId>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jxr-maven-plugin</artifactId>
    </plugin>
    </plugins>
</reporting>
</project>


C物 2008-01-10 19:46 发表评论
]]>
maven2.0学习W记 http://www.aygfsteel.com/libin2722/archive/2008/01/10/174421.htmlC物C物Thu, 10 Jan 2008 11:46:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174421.htmlhttp://www.aygfsteel.com/libin2722/comments/174421.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174421.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174421.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174421.html阅读全文

C物 2008-01-10 19:46 发表评论
]]>
Maven中文手册 http://www.aygfsteel.com/libin2722/archive/2008/01/10/174419.htmlC物C物Thu, 10 Jan 2008 11:45:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174419.htmlhttp://www.aygfsteel.com/libin2722/comments/174419.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174419.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174419.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174419.html阅读全文

C物 2008-01-10 19:45 发表评论
]]>
Maven使用手册http://www.aygfsteel.com/libin2722/archive/2008/01/10/174417.htmlC物C物Thu, 10 Jan 2008 11:43:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174417.htmlhttp://www.aygfsteel.com/libin2722/comments/174417.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174417.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174417.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174417.html来自:http://www.jieesoft.com/modules.php?name=News&file=article&sid=155

Maven和ANT是Apache 推出的大名鼎鼎的Build和工E管理工P国内有h他做了汉化工作Qƈ推出了maven手册汉化工作Q其中手册已l完工,对广大程序员可是一大帮助?a href="http://http//maven.huangdong.com/">q入该网?/a>
用户手册

  1. 关于手册
  2. POM 插值机?/a>
  3. POM l承机制

  • 使用插g
  • maven.xml文g

    1. 单的maven.xml例子
    2. project节点
    3. 目标
    4. Jelly~程

  • Maven 配置

    1. 属性的处理机制
    2. 行ؓ属?/a>
    3. 使用代理
    4. 使用多个q程Repositories

  • 目讄

    1. 开始一个新目

  • 构徏

    1. 构徏生命周期
    2. 在CVS中存放jar文g
    3. 拯依赖JAR?/a>

  • 命名U定

    1. Maven使用者邮件列?/a>上发?
      感谢选择Maven!

      ?/a>
      Maven最早始于Jarkarta Turbine目Q目的是Z化构E。这个项目下面有 几个子项目,每个子项目都有自qAnt文gQ但是区别很,而且生成的JAR 文g都要check in到CVS中。我们希望有一U标准的方式来构些项目,一U可?清晰描述目的方式,一U易于发布项目信息的方式Q一U在多个目之间׃nJARs 的方式?
      q个l果是产生了一个可以用于构建、管理Q何基于java的项目。我们希望我们创?的这个工具可以让Java开发者的日常工作更加LQƈ有助于理解基于java的项?

      目对象模型
      Maven是基于项目对象模?POM)的概念而创建的。在q个模型中,所有由Maven产生?artifact都是清晰定义的项目模型的l果。构建,文档Q源码度量,源码交叉引用和其?M由Maven plug-in提供的东襉K是由POM来控制的?

      POM 处理机制
      q篇文档单的描述了Maven执行q程中是如何处理POM的。这里有一些简单的POM例子 来展C承机制和插值机制?

      POM 插值机?/a>
      POM(通常以project.xml的名字出?现在已经被当作Jelly脚本来处理了。大部分?候,用户无须兛_project.xml文g是不是真正的Jelly脚本Q但是,如果需要的话, 也可以用内|倹{我也不愿看到逻辑控制语句出现在project.xml中,但是׃ project.xml实际上已l是一个隐含的jelly的脚本,所以它会有_的灵zL?-)?下面是一个简单的例子?
      3
      maven
      maven
      Maven
      1.0-b5-dev

      Apache Software Foundation
      http://jakarta.apache.org/
      /images/jakarta-logo-blue.gif

      2001
      org.apache.${pom.artifactId}
      /images/${pom.artifactId}.jpg

      Maven is a project that was created in ${pom.inceptionYear}.
      ${pom.name} is a Java Project Management Tool

      POM l承机制
      现在有一U简单方式可以用于在POM中进行承,下面是一个简单的例子Q?
      project.xml
      super-extendo
      super-extendo
      Super Extendo

      **/*Test*.java

      **/TestAll.java
      **/*Abstract*.java

      目前对POM父对象的解析q相对较弱,现在对一层以上的l承q没有做qQ何测试。尽如此, 单层l承加上插值机制已l能够给带来很多好处。这些机制的意图在于化构建的q问题?
      你可以这样定义主模板Q?

      3
      commons
      commons-master
      Commons Master Maven POM

      Apache Software Foundation
      http://www.apache.org

      jakarta
      http://jakarta.apache.org/commons/${pom.artifactId}.html
      http://nagoya.apache.org/
      jakarta.apache.org
      /www/jakarta.apache.org/commons/${pom.artifactId}/
      /www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId}/

      scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId}
      http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId}/
      ...

      子POM对象可以q样定义Q?
      commons-betwixt
      commons-betwixt
      Betwixt
      ...

      q样你就可以在父POM对象中,子POM对象?{pom.artifactId}替换q去。有许多目?构徏都以怼的方式进行构建,q样一来,对于目的公共部分,你就可以使用一个主模板Q?然后在子POM对象project.xml中定义有区别的部分,而这部分内容通常很少?
      q种机制实q可以简化那些需要生多个JAR包的目。由于project.xml和标准Ant构徏 不会怺q扰Q我计划在公共部分测试承机制?
      如果你对使用q种机制QDVSL报告会变成什么样感到疑惑Q我要说Q你很上路。我已经修改 了DVSL报告来适应POM本nQ这是说DVSL转换是基于java对象的。在使用l承和插值机制的 时候,Z正确的生DVSL报告Q这是很有必要的。象上面列出的子模板是无法工作的Q我?需要全面的解析POM。我能说的是Q它可以工作了!我所使用的处理方式可能不是最有效率的 方式Q但仍有提升的空间。因为POM只会被处理一?不管怎么_q就它的原理Q我可能漏了 某些东西)Q然后到处用,臛_q就是我以前试图做的事情Q所以我们很有可能会取得q?
      如果你不使用l承和插|那么一切照常工作。maven站点本n一切okQ有几个刚部|的站点 已经使用了我昨晚提交的东西了?

      使用插g
      Maven是一个很紧凑的内核,围绕着它的是许许多多的插g。Maven所有的功能都是由插件来提供 的?

      maven.xml文g
      目中的maven.xml文g是Maven在执行过E中要用的“定制”文g?
      在这个文件中Q你可以加入Maven构徏中需要的额外处理。或者在Maven?#8220;目标”前后附加自己 的代码,如jar ?test?
      Maven使用Jelly 脚本语言, M合法的jelly标签都可以在maven.xml中用?
      Maven所采用的goal功能是由werkz标签库提供。更多的信息L wiki面.

      单的maven.xml例子
      注意׃Mavenq未~省的定?compile'目标Q下面这个例子没法运行?
      q是一个简单的maven.xml例子

      ${goals}
      Now attaining goal number ${goalNumber}, which is ${goal}

      你可能会注意到这里一些有意思的东西Q下面我们将逐一解释?

      project节点
      project节点, , 是Q?maven.xml 文g的根节点?
      目节点有一个缺省的属性:default="nightly-build"Q如果用户只是简单键?没有参数的maven命oQMaven׃用nightly-build 目标作ؓ~省目标?
      接下来是几个名字I间的声明,如:

      1. xmlns:j="jelly:core"
        所有以j:作ؓ前缀的节点,Jelly都会把它视ؓ在core标识?预定义的标签库?
      2. xmlns:u="jelly:util"
        所有以u:作ؓ前缀的节点,Jelly都会把它视ؓ在标识下 预定义的标签库?

        所有在maven.xml文g使用的Jelly标签库,?strong>必须在project节点中定义,q且 分配一个名U空间前~?
        Maven已经预先包含了jeez标签库作为空前缀。这个标{ֺ在一个名U空间内包含?ant ?werkz 标签库。这PMwerkz或ant标签都无dU空?卛_使用Q同时也化了ant的迁U过E?

        目标
        goal是一?a > werkz 标签Q类gAnt的targetQ它是包含了一pd可执行标{容器?
        ׃jeez 标签库已l由maven预先注册了,一个目?goal)可以包含M合法?Ant 标签?
        Z执行在maven.xml中定义的目标Q你只需要在命o行中为Maven指定目标名即可。要执行例子中定 义的nightly-build你只需执行命o:
        maven nightly-build

        Maven插g定义的目标需要在目标前加上插件名Q这样一来,׃会和你自qgoal冲突Q如 jar:jar是 jar 插g定义的目标,用于创徏目的jar包?

        Jelly~程
        在每个目标里Q由Jelly标签提供功能Q让我们来看看例子里的这些代码?
        set

        q行是一个jelly的core标签setQ它使用了project节点中定义的前缀 j:
        set标签讄了一个由var属性定义的Jelly变量Q值由 value 指定。和Ant的proerties不一PJelly变量在被赋值后仍可以改变?
        mkdir

        {同于Antd mkdir, 用于创徏目录Q目录名由变?${maven.build.dir}指定?
        tokenize
        ${goals}
        q行执行的是Jelly tokenize 标签。这是Jelly util 标签库中标签Q?q个标签库已l在目节点中预先定义:u:
        tokenize标签在将节点中的内容分离成一个listQ用于后l的处理?
      • var 属性就是将被于新list的变量?
      • delim 属性是用于分割字符串中的分隔符?
      • 在这个例子中Qtokenize 标签中节点值是一个变量:goals, 在前几行中,q是一个由逗号分隔、compile ?test 的字W串?



      forEach

      Now attaining goal number ${goalNumber}, which is ${goal}


      forEach标签提供单@环功能,节点值就是@环体?


      • items 属性是一个表辑ּQ是在@环过E中需要遍历的值集合?
      • 集合中的D逐个取出Q存攑֜var 属性指定的变量中。你可以?forEach 循环体访问这个变量?
      • indexVar 属性指定了一个计数器(起始基数?)变量Q用于在处理 q程中计数?



      forEach 标签的节点DZ一些在处理q程中的关于目标的文本,q?attainGoal werkz 标签来获?执行?)q些目标?

      Maven 配置

      属性的处理机制
      Maven按下面的序依次dproperties文gQ?

      • ${project.home}/project.properties
      • ${project.home}/build.properties
      • ${user.home}/build.properties


      d的属性遵?#8220;最后的定义有效”原则。也是_Maven依次dproperties文gQ以新的定义 覆盖旧的定义?{user.home}/build.properties是Maven最后处理的文g。我们把 q些文gUCؓMaven处理的标准属性文仉?
      另外Q上qproperties文g处理完毕后,Maven才会开始处理系l属性。所以,如果在命令行中??Dproperty=valueq样的Ş式来指定的属性,它会覆盖先前定义的同名属性?

      插g的属?/a>
      上述属性文件处理完后,Maven才会开始调用插Ӟ但是 PluginManager 会禁止插?覆盖已经讄的属性倹{这和Maven一般的属性处理方式是相反的,q是因ؓ插g只能在Maven内部?其他部分初始化完毕后才能处理Q但是我们又希望以这样顺序去处理属性:

      • 处理Plug-in ~省属?
      • 处理${project.home}/project.properties
      • 处理${project.home}/build.properties
      • 处理${user.home}/build.properties


      q样一来,即插g处于属性处理链的后端,也能覆盖插g的Q何缺省属性。例如,Checkstyle插g 定义了如下~省属性:
      maven.checkstyle.format = sun

      你可能已l猜出来了,Checksytle插g把Sun的编码规范作为缺省的格式。但是我们仍然可以在标准属?文g集的M一个文件中覆盖q个属性。所以如果在${project.home}/project.properties 文g定义了如下属性|
      maven.checkstyle.format = turbine

      Checkstyle׃使用Turbine的编码规范?

      行ؓ属?/a>
      下面的这些属性可以改变Maven?#8220;行ؓ方式”?

      属?
      描述
      ~省?

      maven.build.dest
      目录名,存放~译生成的类
      ${maven.build.dir}/classes

      maven.build.dir
      存放构徏l果的目录,如类文gQ文档,单元试报告{等?
      注意Q?/strong> ?{user.home}/build.properties文g中改变maven.build.dir 的缺省值或怼得到一?较ؓ个性化的目录布局。但是,q会q扰Maven׃源码开始的~译工作Q因为它假设jar?会被创徏?{basedir}/target/目录中?
      ${basedir}/target

      maven.build.src
      源码目录
      ${maven.build.dir}/src

      maven.conf.dir
      配置文g目录
      ${basedir}/conf

      maven.docs.dest
      html格式报告的输出目?
      ${maven.build.dir}/docs

      maven.docs.omitXmlDeclaration
      产生的文档所应包含的xml声明_如:

      false

      maven.docs.outputencoding
      生成文档的缺省编?
      ISO-8859-1

      maven.docs.src
      用户提供的文档目?
      ${basedir}/xdocs

      maven.gen.docs
      xdocs文档转换成html后的输出目录
      ${maven.build.dir}/generated-xdocs

      maven.home.local
      maven用于写入用户信息的本机目录,如解开插g包、缓冲数据?
      ${user.home}/.maven

      maven.mode.online
      是否q接internet
      true

      maven.plugin.dir
      插g的存攄?
      ${maven.home}/plugins

      maven.plugin.unpacked.dir
      用于展开安装插g的目?
      ${maven.home.local}/plugins

      maven.repo.central
      在进行dist:deploy处理的时候,发行包所要部|的目标机器
      login.ibiblio.org

      maven.repo.central.directory
      在进行dist:deploy处理的时候,发行包所要部|的目标目录?
      /public/html/maven

      maven.repo.local
      本机repositoryQ用于存储下载的jar包?
      ${maven.home.local}/repository

      maven.repo.remote
      q程repositoryQ如果本机repository没有的jar包,maven会从q里下蝲?
      http://www.ibiblio.org/maven

      maven.repo.remote.enabled
      是否使用q程repository?
      true

      maven.scp.executable
      用于安全拯的可执行E序
      scp

      maven.src.dir
      基础源代码目?
      ${basedir}/src

      maven.ssh.executable
      q程命o可执行程?
      scp

      使用代理
      如果你只能通过代理讉KQ不要紧QMavenZ提供了下列属性:

      代理属?
      描述

      maven.proxy.host
      代理的IP地址

      maven.proxy.port
      代理端口

      maven.proxy.username
      如果代理需要认证的话,在这里填写用户名?User name if your proxy requires authentication.

      maven.proxy.password
      如果代理需要认证的话,在这里填写密码?
      如果你实在需要代理,最好在${user.home}/build.properties文g中指定?
      ## ----------------------------------------------------------
      ## ${user.home}/build.properties
      ## ----------------------------------------------------------
      .
      .
      maven.proxy.host = my.proxyserver.com
      maven.proxy.port = 8080
      maven.proxy.username = username
      maven.proxy.password = password
      .
      .

      使用多个q程Repositories
      你可以在MMaven可以处理的属性文件中指定使用多个q程RepositoriesQ如Q?
      maven.repo.remote = http://www.ibiblio.org/maven/,http://www.mycompany.com/maven/

      目讄

      开始一个新目
      如果你是W一ơ用MavenQ或者开始一个新的项目,你可以用GenApp来自动创建Maven目树?
      maven -Dpackage=com.mycompany.app genapp

      执行该命令后Q屏q显C如下:
      __ __
      | / |__ Jakarta _ ___
      | |/| / _ V / -_) ' ~ intelligent projects ~
      |_| |___,_|_/___|_||_| v. 1.0-beta-9

      [mkdir] Created dir: /genapp/src/java/com/mycompany/app
      [copy] Copying 1 file to /genapp/src/java/com/mycompany/app
      [mkdir] Created dir: /genapp/src/test/com/mycompany/app
      [copy] Copying 3 files to /genapp/src/test/com/mycompany/app
      [copy] Copying 2 files to /genapp
      [copy] Copying 1 file to /genapp/src/conf
      BUILD SUCCESSFUL
      Total time: 3 seconds

      执行完毕Q即生成下面的完整项目目录树Q?
      .
      |-- project.properties
      |-- project.xml
      `-- src
      |-- conf
      | `-- app.properties
      |-- java
      | `-- com
      | `-- mycompany
      | `-- app
      | `-- App.java
      `-- test
      `-- com
      `-- mycompany
      `-- app
      |-- AbstractTestCase.java
      |-- AppTest.java
      `-- NaughtyTest.java

      构徏
      Maven采用了集中管理库的理c所有用于构建的jar包都是从集中理的中心库上取出。目前, 我们的中心库攑֜q儿 Ibiblio. 在一个典型的Maven目中,构徏所需?jar包会从中心库下蝲。Maven只会取回依赖链条上缺q包。如果你使用Maven来构建几个项目, q些目可能会共享一些依赖包QMaven可以在Q意个目中共享同一个包Q而无d同一pȝ 中保持一个jar包的多个拯?

      构徏生命周期

      在CVS中存放jar文g
      我们不推荐你在CVS中存放jar包。Maven提倡在本机repository中存攄于构建共享的jar包或 和其他项目包。许多项目都依赖于诸如XML解析器、标准例E,q在Ant构徏中,l常会被复制 多䆾。在Maven中,q些标准例程存攑֜本地repository中,供Q何项目构Z用?
      重蝲已声明的依赖?/a>
      你可能会发现Q在某些情况下允讔R载POM中已l声明的依赖包会很方便,甚至很有必要?你可能会希望使用文gpȝ中的某个JAR包,或者你希望单重新指定某个包的版本。对?q样的情况,Maven提供了一U简单的方式Q允怽选择构徏所需的jar包。我们严重徏?) 你设|本机repositoryQ但是在单至上,或在由ant构徏q移的情况下QJAR包重载特?会显得非常方ѝ?
      Z使用JAR包重载特性,你必dmaven.jar.override 属性设|ؓ on?只要讄了这个属性,可以在Mmaven处理的属性文件中重蝲JAR包?
      关于JAR重蝲的指令有两种。第一U允怽指定某个特定的包的\径,作ؓJAR包;的二U?允许你指定某个特定的JAR包(q个jar包必dl存在于本机repositoryQ。下面是q两 U方式:
      maven.jar.artifactId = [path]
      maven.jar.artifactId = [version]

      下面是一个用JAR重蝲指o的属性文件例子:
      # ------------------------------------------------------------------------
      # M A V E N J A R O V E R R I D E
      # ------------------------------------------------------------------------
      maven.jar.override = on
      # ------------------------------------------------------------------------
      # Jars set explicity by path.
      # ------------------------------------------------------------------------
      maven.jar.a = ${basedir}/lib/a.jar
      maven.jar.b = ${basedir}/lib/b.jar

      # ------------------------------------------------------------------------
      # Jars set explicity by version.
      # ------------------------------------------------------------------------
      maven.jar.classworlds = 1.0-beta-1

      使用SNAPSHOT依赖
      在Maven中,SNAPSHOP是某个特定项目的最新构建的jar包。如果你的项目依赖于另一个频J变?的项目,你可以在你的POM中声明SNAPSHOP依赖Q以保持与那个项目的同步。例如,在你的POM?q样写,你可以与Jelly保持 同步更新?
      ...
      commons-jelly
      commons-jelly
      SNAPSHOT
      ...

      上述语句的含义是QL使用Maven repository中最新的Jelly构徏包。SNAPSHOT依赖 MD依赖p|。在q种情况下,Maven׃去Maven repository取得一个SNAPSHOT 依赖包的拯。如果你正在ȝ工作QMaven׃发出警告Q?#8220;SNAPSHO依赖包可能已l?q期”?

      多项目构建和Reactor
      在Maven中,Reactor是一个用于控制多目构徏的工兗Reactor用Werkz?q根据每个项?各自定义的依赖关pL安排构徏序。Reactor的意囑֜于:鼓励创徏/重构h更小、更松散?更有一致性单元的目。r源于面向lg~程Q在向组件编E中Q整个系l由许多松散的个?构成Q这些个体需要聚合v来作Z个整体进行部|Ӏ?
      Reactor可以为某个项目集执行一个Q意编排的目标列表。所以,如果使用Reactor的话Q它 可以用来做项目站点生成,Ljar包生成这L事情?
      目前 db.apache.org 站点是攉了其子项目的 丰富信息、ƈ与一pd?a >Velocity 模板合成的。这一q程是由 Jelly Velocity 标签库来完成的?a > q里是其中的机制Q有兴趣可以看看?
      Plexus(一个基于Avalon的容?lg的manifest是遍历所有Plexuslg、ƈ聚合而成的。这?使用的还是Velocity模板和Jelly Volocity标签库?q里是其中的机制Q有兴趣可以看看?
      q里是一个用Reactor标签Q遍历一pdlgQ最后生项目站点的例子Q?
      ... Do whatever you want with the harvested information ...

      如果你需要聚合N个项目的文档QŞ成一个统一的视图,你可以参?db.apache.org站点Q它从所有的子项目中攉 信息Q最lŞ成一个有D条,邮g列表Q开发者列表和源码repositoryl一的站炏V这解决 了在攉子项目信息过E中的冗余、易于生错误的问题。db.apache.org的子目只需x 自n的信息,却可以自动的集成到高层的目站点中?

      ȝ构徏
      如果你需要离U构建,你得在命令行中用离UK项Q?
      maven -o jar:jar

      q等同于Q?
      maven -Dmaven.mode.online=false jar:jar

      或者你可以?a >属性文?/a>中设|?maven.mode.online 属性ؓfalse?
      在联机模式下QmavenL下蝲 SNAPSHOT 依赖? 请参?使用SNAPSHOT依赖。如果本机repository 上的当前版本比服务器上的q要斎ͼ你也怸想maven覆盖你的当前版本。如果不想下载,你可?讄属性:
      maven.repo.remote.enabled=false

      在maven beta 9版本中,q个属性ƈ没有起作?新版本已l解决了q个问题)。可以这h清空 maven.repo.remote 属性:
      maven.repo.remote.enabled=

      在命令行或属性文件中讄都一栗?
      在下面的情Ş中,你需要同时设|maven.repo.remote.enabled=false maven.mode.online=trueQ希望javadoc插g?-link"选项起作用,而又不希?下蝲M(包括snapshot)包?

      命o行选项介绍
      如果你用命o行来构徏Q这里提供了一个关于命令行选项的快速参考?
      Options:
      -D,--define arg 定义一个系l属?
      -E,--emacs 输出z的日志信息
      -X,--debug 输出debug信息
      -b,--nobanner 止 logo banner
      -d,--dir arg 讄指定的工作目?
      -e,--exception 输出异常堆栈信息
      -f,--find arg 通过搜寻目文g来确定执行的目文g及其工作目录
      -g,--goals 昄可用的目?
      -h,--help 昄帮助信息
      -i,--info 昄pȝ信息
      -o,--offline ȝ构徏
      -p,--pom arg 指定目文g
      -v,--version 昄版本?



      试资源
      通常情况下,你需要在试c\径上为测试指定某些资源。你可以在POM中?
      下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml?properties为扩展名 的文Ӟ
      ...
      ...
      ...

      ${basedir}/src/test
      **/*.xml
      **/*.properties

      下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml?properties为扩展名 的文Ӟ但naughty.properties文g除外。请注意增加的project/build/unitTest/resources/excludes 节点Q?
      ...
      ...
      ...

      ${basedir}/src/test
      **/*.xml
      **/*.properties

      naughty.properties

      q行一个单独的试
      下面的命令运行了一个单独的试Q?
      maven -Dtestcase=org.foo.bar.MyTest test:single-test

      打包
      JAR 资源
      ...

      ${basedir}/src/conf

      *.xml
      *.properties

      ${basedir}/src/messages
      org/apache/maven/messages
      messages*.properties

      部v

      固化SNAPSHOT依赖
      在开发时使用SNAPSHOT依赖包非常方便,但是在部|的时候,你需要把所有的SNAPSHOT依赖?固定下来Q以便发布一个包含固定jar的版本。如果你发布了一个含SNAPSHOT依赖包的目Q?q些SNAPSHOT在项目发布后发生了变_你可能很快就会发现这个版本没法儿工作?
      当SNAPSHOT以时间戳为版本号部v到Maven上时QMaven可以识别foo-SNAPSHOT.jar实际上相?于foo-20030101.010101.jar。当部v的时L_你可以用下面的命令,让Maven把SNAPSHOT 版本号变为时间戳版本受?
      maven convert-snapshots

      Maven会提供交互的方式让你选择哪个SNAPSHOPT依赖包应该固化下来。这一q程l束后,Maven ׃把刚才你的选择写会你的POM?
      如果你希望Maven单的、尽可能最好的固化SNAPSHOT依赖包,你可以用下面的命令:
      maven convert-snapshots-auto

      拯依赖JAR?/a>
      在maven.xmlq样写下面的语句是最单的拯依赖包的Ҏ?
      ...
      ...

      用deploy:copy-deps标签你就可以单的把项目所有的依赖包拷贝到M 目录Q如果希望排除某个依赖包Q需要给Z个依赖包的id列表Q列表中依赖包就不会被拷贝?

      ...
      ...

      命名U定
      q部分将要的描述目对象模型(POM)中命名约定。本文档希望可以统一各式各样jar包命?ҎQ这些jar包一般ؓjava开发者社区广泛用?

      规则和指?/a>

      一个项目必ȝ一个唯一的的标识Q标识由a-z写字母和连U号构成Q其首字母必M写字母 开头?

      bar
      foo
      ...

      所有项目间的引用都qid和包id构成。到现在为止Q在POM与此相关的是下面要Q上面提到的Q)谈到的项目的 依赖声明?
      目的名U应该易于阅读,可用于文档?

      bar
      foo
      The Grand Master Foo
      ...

      目应该有一个组标识Q组标识是名U的基础部分?
      bar
      foo
      The Grand Master Foo

      ...

      所有项目发布的包都应基于项目唯一的标识,q且攑֜Z目的组id的目录中。对于上面的 目来说Q假定发布的包是jarcd的包Q我们就会有如下目录l构Q?
      repository
      |
      +-- bar
      |-- distribution
      `-- jar
      |-- foo-1.0.jar
      `-- foo-2.0.jar


      依赖
      一个理想的典型依赖声明的例子可能会象这P

      yourProject
      yourArtifact
      Your Groovey Machine
      ...

      bar
      foo
      1.0

      q样一来,依赖于id为foo1.0 版本的bar目 属于org.foo.barl。这个依赖会被解析ؓ本地repository中jar文g。上?的情形假定发布的包是Z包id命名的。因此对于上qC赖,Maven׃采用 foo-1.0.jar作ؓjar名?
      像用户反映的那Pq种理想的方式ƈ不能适应所有的目。有几种情Ş我们必须考虑调整 理想的依赖机Ӟ

      • 发布的jar包的q未使用目作ؓ基础名,如xercesImpl是所有发布的jar包的基础?它与gump id和maven中的id都不一栗?
      • 发布的jar包没有用Q何版本声明,如许多commonslgq没有把版本号作为包名的一部分?
      • 有些目x有用项目id作ؓ基础名也没有版本声明。例如,最坏的情Ş是Java Activation Framework 的jar包,它没有遵循其他Sun的命名规则,也没有在jar包中声明 版本P甚至在manifest中都没有M版本信息?

        在多数情形下QQ何例外的情况都可以用 (可选节?、或者是重命名来解决?现在Q许多Jarkata的品在repository已经被重命名Q因为在不久的未来,l大多数的Jarkarta?目用mavenq行构徏。但q不是公司政{,我们不需要解x有情늚问题?

        发布多个包的目
        Maven的依赖机制完全支持Q何Ş式的多项目包?Maven's dependency mechanism completely supports multiple project artifacts of any given type.
        下面的代码包含了ant的主jar包和optional包加上hypothetical包?
        ant
        ant
        1.4.1

      ant
      ant-optional
      1.4.1
      ant
      poorly-named
      1.4.1

      所以A), B) ?C)实际上是指向属于同一l的单个包的指针Q这是_一个单独的依赖是Ҏ个组中的某个 包的引用。目前artifact如果没有特别说明的话Q一般指的是jar包。但是依赖也可能是一个war文g或一?发行包。我们试囑֜提供多数情况?构徏大多需要jar?使用的缺省方式的同时Q也֏灉|性?

      q程Repository布局
      q部分文档将对Maven的远Erepositories做一个概要的说明。目前,主repository位于 IbiblioQ但是你也可以自己创Z 个远ErepositoriesQ其l果描述可以在这部分文档中找到?
      M独立的项目在repository都有自己的目录。每个项目有一个唯一的项目id和同名目录, 目的发行包放在这个目录中?
      目的目录中可以存放各种各样的artifactsQ目前最为广泛用的两种cd是jar包和发行?下面是一个远Erepository快照Q?
      repository
      |
      |-- ant
      | |-- distribution
      | `-- jars
      | |-- ant-1.4.1.jar
      | `-- ant-optional-1.4.1.jar
      +-- jsse
      |-- distribution
      `-- jars
      |-- jsse.jar
      |-- jcert.jar
      `-- jnet.jar

      本地Repository布局
      应该有一个接口集合的紧凑实现使本地repository目录l构更加随意一些。现在我只?了一个类来实玎ͼ昑־有些臃肿。我q是认ؓ本地和远Erepositories应保持相同的l构 但是Z使用更乐于用,我开始设计一些接口,用于满用户自己安排自己本地Repository 布局Q相似的q程Repositor也在设计中。尽目前本地repository仍与q程repository 完全一_我希望听到更多的用户反馈Q以促进q些接口的开发,或者完全抛弃它?

      生成目站点
      Maven可以为项目生一个完成的web站点。这个web站点包含各U各栗由许多Maven插g 产生的报告,如javadocsQ代码度量,单元试QchanglogQ及其它... 本节文档接下来的 部分阐qMaven支持的站点定刉项?

      颜色
      考虑C致性,~省情况下,所有Maven产生的站炚w使用怼的外观。这使用户一眼就?认出由Maven产生的站点,产生熟悉的感觉,更加方便信息的获取。当ӞMaven开发组?考虑到用户可能会希望定制他们的站炏V修改Maven产生的站点,最单的Ҏ是指定你?使用的颜色搭配。这只需要在project.properties单的讄适当的属?卛_。下面是所有可用的属性描q在 xdoc plugin?

      风格
      如果你感觉颜色太q于单,无法满你的要求Q你可以用自qstylesheet。ؓ了重??{basedir}/xdocs/stylesheets/中的maven.css stylesheetQ你可以通过讄maven.javadoc.stylesheet 属性来指定你的 javadoc风格?

      报告
      最后,如果你希望定制哪些报告需要自动生,你需要在你的目描述中包?reports 标签库?到目前ؓ止,如果没有reports标签指定Q所有插件报告都会生。这个标{?允许你选择产生哪些报告而排斥另外一些报告,而且允许你安排顺序?
      目前的标?报告集在xdoc中是编码实现的Q它们是Q?
      maven-changelog-plugin
      maven-changes-plugin
      maven-checkstyle-plugin
      maven-developer-activity-plugin
      maven-file-activity-plugin
      maven-javadoc-plugin
      maven-jdepend-plugin
      maven-junit-report-plugin
      maven-jxr-plugin
      maven-license-plugin
      maven-linkcheck-plugin
      maven-pmd-plugin
      maven-tasklist-plugin

      如果你希望生缺省的报告Q但是还惛_加或删除一两个Q最好的Ҏ是:l?xdoc:register-reports目标写一个前|目?postGoal)?br />
      排除所有Maven产生的内?/a>
      某些情况下,用户需要构建只有文档的站点Q或是构合许多子目的站点,但不希望 在站点上有个整体“目文档”D条。设|?maven.xdoc.includeProjectDocumentation属性gؓno 卛_解决q一问题。缺省的QMaven会包?#8220;目文档”D条,下面挂的是许多Maven 生成的报告?"

       




      C物 2008-01-10 19:43 发表评论
      ]]>maven译一l? http://www.aygfsteel.com/libin2722/archive/2008/01/10/174415.htmlC物C物Thu, 10 Jan 2008 11:42:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174415.htmlhttp://www.aygfsteel.com/libin2722/comments/174415.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174415.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174415.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174415.htmlMAVEN 一l?br />  1.安装Q略
       2. make first Maven 78
        cmd: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
      notice: archetype==template    -D看cmd-> mvn -help
      生一个pom.xml(project object model)文g

      maven工程产生Q?br /> mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app


      文档产生Q?br /> mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
      -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-site
      格式(大概)如下
      project
        modelVersion使用pom的版本号
        groupId  lID 如org.apache.maven.plugins或com.sourceware
        artifactId cM工程名unique
        packaging打包(jar或war,ear由artifactId的extension?br />   version该工E的版本?br />   name昄名称在文档里
        url   url在文档里
        description描述在文档里
        更详l的见maven.htm(?
       
      mvn的命令在maven-command.htm?/p>

      MAVEN与ANT整合如下
      <project>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>my-test-app</artifactId>
        <groupId>my-test-group</groupId>
        <version>1.0-SNAPSHOT</version>
        <build>
          <plugins>
            <plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <executions>
                <execution>
                  <phase>generate-sources</phase>
                  <configuration>
                    <tasks>

                      <!--
                        Place any ant task here. You can add anything
                        you can add between <target> and </target> in a
                        build.xml.
                      -->

                    </tasks>
                  </configuration>
                  <goals>
                    <goal>run</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </project>
      So a concrete example would be something like the following:

      <project>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>my-test-app</artifactId>
        <groupId>my-test-group</groupId>
        <version>1.0-SNAPSHOT</version>
        <build>
          <plugins>
            <plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <executions>
                <execution>
                  <phase>generate-sources</phase>
                  <configuration>
                    <tasks>
                      <exec
                        dir="${basedir}"
                        executable="${basedir}/src/main/sh/do-something.sh"
                        failonerror="true">
                        <arg line="arg1 arg2 arg3 arg4" />
                      </exec>
                    </tasks>
                  </configuration>
                  <goals>
                    <goal>run</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </project>



      C物 2008-01-10 19:42 发表评论
      ]]>
      maven2完全使用手册http://www.aygfsteel.com/libin2722/archive/2008/01/10/174413.htmlC物C物Thu, 10 Jan 2008 11:41:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174413.htmlhttp://www.aygfsteel.com/libin2722/comments/174413.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174413.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174413.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174413.html阅读全文

      C物 2008-01-10 19:41 发表评论
      ]]>
      Chapter 1. Maven2http://www.aygfsteel.com/libin2722/archive/2008/01/10/174412.htmlC物C物Thu, 10 Jan 2008 11:39:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174412.htmlhttp://www.aygfsteel.com/libin2722/comments/174412.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174412.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174412.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174412.htmlMaven2 介绍

      Chapter 1. Maven2

      1.1. Maven2 体验

      声明:本节内容来源?a href="http://www.aygfsteel.com/jbob/" target="_top">blogjava|站jbob的blog 本节的版权归原作者所有,不适用本手册的版权x?/em>

      maven是一个java目理工具Q深化了antQ但又有自己一整套的项目集成策略。目前的版本?.0.2?

      1. maven|站 下蝲maven2Q解压羃

      2. 配置环境变量:maven_home、path

      3. cmd-> mvn --version 查是否安装成?[昄版本P则说明安装成功]

      4. 配置,Maven的配|分Z个层?

        • - pom.xml:针对某个目的配|?/p>

        • Installation

        • User -针对某个用户的配|?/p>

        我们首先配置主要是userU别的,主要包括两点:讄本地的资源库和代理服务器[如果需要的话] ?maven_home%/conf/setting.xml中配|?

        					<localRepository>d:/repo</localRepository>
        					<proxy>
        <id>proxy1</id>
        <active>true</active>
        <protocol>http</protocol>
        <username></username>
        <password></password>
        <host>222.136.91.1</host>
        <port>80</port>
        <nonProxyHosts></nonProxyHosts>
        </proxy>

        修改之后copy一份到${home}/.m2

      5. 建立新的目

        					mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
        • 首先Q程序会从远E下载必要的jar包到你的localRepository,x们刚刚设|的[d:/repo]

        • 然后Q会在当前目录下面生成my-app文g夹,包括单的包结构[java,test]和一个HelloWorldE序及测?以及pom.xml文g?

        注意Qpom.xml contains the Project Object Model (POM) for this project.The POM is the basic unit of work in Maven?

      6. ~译

        mvn compile

        W一ơ运行会下蝲很多jar?而且机器负荷会很重。运行这个命令需要在pom.xml相同目录下面, q个~译只编译主E序Q不会编译test下面的程序。如果需要单独编译test,误行:

        mvn test-compile

        compile之后会生成target文g夹,ȝ序编译在classes下面Q测试程序放在test-classes?/p>

      7. mvn test

        会自动先~译再运行测?/p>

      8. 打包

        mvn package

        打包之前会进行编译,试

      9. 安装

        mvn install

        会将package之后的jar包copy?/p> <local-repository>/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar

      10. 其他

        mvn site

        注意,q可?

        deploy site

        在pom.xml中加?/p>

         <distributionManagement>
        <site>
        <id> website </id>
        < url> scp://www.mycompany.com/www/docs/project/ </url>
        </site>
        </distributionManagement>

        当然你需要设|server

        mvn site-deploy
        mvn clean
        mvn idea:idea [为IDE工具idea生成目文g]
      11. Resource

        ${basedir}/src/main/resources都会~译到jar文g?而且该目录下的内容将直接位于jar文g的顶部?/p>

        试用资源文?> ${basedir}/src/test/resourcesQ引用时如下例:

        InputStream is = getClass().getResourceAsStream( "/test.properties" );

        文g位于 ${basedir}/src/test/resources/test.properties?/p>

      12. 如何filter我们的资源文?/p>

           < build >
        < resources >
        < resource >
        < directory > src/main/resources </ directory >
        < filtering > true </ filtering >
        </ resource >
        </ resources >
        </ build >

        因ؓ原来默认的filter为false所以要加上上面的代?/p>

        eg:我们在src/main/resources下面建立application.properties文g

        # application.properties
        application.name=${pom.name}
        application.version=${pom.version}

        q行Qmvn process-resources 在target/classes下面的application.propertiesl果为:

         # application.properties
        application.name=Maven Quick Start Archetype
        application.version=1.0-SNAPSHOT

        q就是所谓的filter。当然filterq可以用其他的外部文Ӟ不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }]

        e.g src/main/filters/filter.properties:

        # filter.properties
        my.filter.value=hello!

        pom.xml:

         < build >
        < filters >
        < filter > src/main/filters/filter.properties </ filter >
        </ filters >
        < resources >
        < resource >
        < directory > src/main/resources </ directory >
        < filtering > true </ filtering >
        </ resource >
        </ resources >
        </ build >

        # application.properties

        application.name=${pom.name}
        application.version=${pom.version}
        message=${my.filter.value}

        q样在运行mvn process-resources 会得到类似的效果,当然我们也可以直接在pom.xml中定义:

        < build >
        < resources >
        < resource >
        < directory > src/main/resources </ directory >
        < filtering > true </ filtering >
        </ resource >
        </ resources >
        </ build >
        < properties >
        < my .filter.value > hello </ my.filter.value >
        </ properties >

        效果同样Q这样就不需要外部文件了。另外filterq可以来自系l设|以及可以自定义Q?/p>

        # application.properties
        java.version=${java.version}
        command.line.prop=${command.line.prop}
      13. jar包依?/p>

        我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用

        <dependency>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
        </dependency>

        注意scope,q里是compile,如果使用junitQscope是test?/p>

        举例说明Q如果我们的project需要用到log4j包,那么我们可以 先google--"site:www.ibiblio.org maven2 log4j"。Index of /maven2/log4j/log4j 下面有maven-metadata.xml 描述了groupId,artifactId,version{等。获取了q些信息之后Q你 可以在pom.xml中添加依?/p>

        <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
        <scope>compile</scope>
        </dependency>
      14. 如何发布我的jar包到我的remote repository

        你需要在setting.xml中间讄server:

        <servers>
        <server>
        <id>mycompany-repository</id>
        <username>jvanzyl</username>
        <!-- Default value is ~/.ssh/id_dsa -->
        <privateKey>/path/to/identity</privateKey>
        <passphrase>my_key_passphrase</passphrase>
        </server>
        </servers>

        然后在pom.xml中设|远Eurl:

        <distributionManagement>
        <repository>
        <id>mycompany-repository</id>
        <name>MyCompany Repository</name>
        <url>scp://repository.mycompany.com/repository/maven2</url>
        </repository>
        </distributionManagement>

      1.2. Maven2的Eclipse插g安装和?/h2>

      1.2.1. 安装

      你可以从http://m2eclipse.codehaus.orgupdate安装Maven2的Eclipse插gQ具?安装步骤L该网站提供的Flash Demo: http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html

      1.2.2. 使用

      该插件的使用L该网站提供的Flash Demo: http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html

      关于openfan目的Maven操作请参看后l章节?/p>



      C物 2008-01-10 19:39 发表评论
      ]]>
      Maven2 体验http://www.aygfsteel.com/libin2722/archive/2008/01/10/174409.htmlC物C物Thu, 10 Jan 2008 11:35:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174409.htmlhttp://www.aygfsteel.com/libin2722/comments/174409.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174409.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174409.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174409.htmlmaven 是一个java目理工具Q深化了antQ但又有自己一整套的项目集成策略?br /> 目前的版本是2.0.2

      1. 下蝲maven 2 [链接]Q解压羃?
      2. 配置环境变量Qmaven_home, path
      3. cmd-> mvn --version 查是否安装成?[昄版本P则说明安装成功]
      4. 配置
        Maven的配|分Z个层?br />

        Project - pom.xmlQ针Ҏ个项目的配置
        Installation
        User -针对某个用户的配|?br />


        我们首先配置主要是userU别的,主要包括两点
        讄本地的资源库和代理服务器[如果需要的话]
        ?maven_home%/conf/setting.xml中配|?

        <localRepository>d:/repo</localRepository> 

        <proxy>
          
        <id>proxy1</id>
          
        <active>true</active>
          
        <protocol>http</protocol>
          
        <username></username>
          
        <password></password>
          
        <host>222.136.91.1</host>
          
        <port>80</port>
          
        <nonProxyHosts></nonProxyHosts>
        </proxy>


        修改之后copy一份到${home}/.m2 [最新版本不需要此步骤]
      5. 建立新的目
        mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
        首先Q程序会从远E下载必要的jar包到你的localRepository,x们刚刚设|的[d:/repo]
        然后Q会在当前目录下面生成my-app文g夹,包括单的包结构[java,test]和一个HelloWorldE序及测试?br /> 以及pom.xml文g?br /> 注意Qpom.xml contains the Project Object Model (POM) for this project.
        The POM is the basic unit of work in Maven?br />
      6. ~译
        mvn compile
        W一ơ运行会下蝲很多jar包。而且机器负荷会很重?br /> q行q个命o需要在pom.xml相同目录下面
        q个~译指挥~译ȝ序,不会~译test下面的程序?br /> 如果需要单独编译test,误?mvn test-compile
        compile之后会生成target文g夹,ȝ序编译在classes下面Q测试程序放在test-classes?br />

      7. mvn test. 会自动先~译在运行测?br />
      8. 打包
        mvn package
        打包之前会进行编译,试
      9. 装[install]
        mvn install
        会将package之后的jar包copy?br /> <local-repository>/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
      10.  其他
        mvn site
         注意Q还可以deploy site
         在pom.xml中加?
          < distributionManagement >
           
        < site >
             
        < id > website </ id >    
                
        < url > scp://www.mycompany.com/www/docs/project/ </ url >
           
        </ site >
         
        </ distributionManagement >


        当然你需要设|server
        mvn site-deploy
        mvn clean
        mvn idea:idea [为IDE工具idea生成目文g]

      11. Resource
        ${basedir}/src/main/resources都会~译到jar文g?br /> ?{basedir}/src/main/resources 下的内容会直接位于jar文g的顶?br /> 试用资源文?> ${basedir}/src/test/resources
        引用时参照此例:
        InputStream is = getClass().getResourceAsStream( "/test.properties" );
        文g位于 ${basedir}/src/test/resources/test.properties?/p>

      12.  如何filter我们的资源文?br /> 在pom.xml中修改:

        < build >
            
        < resources >
              
        < resource >
                
        < directory > src/main/resources </ directory >
                
        < filtering > true </ filtering >
              
        </ resource >
            
        </ resources >
          
        </ build >


        因ؓ原来默认的filter为false所以要加上上面的代?br /> e.g
        我们在src/main/resources下面建立application.properties文g
         # application.properties
         application.name=${pom.name}
         application.version=${pom.version}
        q行Qmvn process-resources
        在target/classes下面Q?br /> application.properties:
         # application.properties
         application.name=Maven Quick Start Archetype
         application.version=1.0-SNAPSHOT
        q就是所谓的filter.
        当然filterq可以用其他的外部文Ӟ不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }]
        e.g
        src/main/filters/filter.properties
         # filter.properties
         my.filter.value=hello!
        pom.xml

           < build >
            
        < filters >
              
        < filter > src/main/filters/filter.properties </ filter >
            
        </ filters >
            
        < resources >
              
        < resource >
                
        < directory > src/main/resources </ directory >
                
        < filtering > true </ filtering >
              
        </ resource >
            
        </ resources >
          
        </ build >


        # application.properties
        application.name=${pom.name}
        application.version=${pom.version}
        message=${my.filter.value}
        q样在运行mvn process-resources 会得到类似的效果?/p>

        当然我们也可以直接在pom.xml中定义:

        < build >
            
        < resources >
              
        < resource >
                
        < directory > src/main/resources </ directory >
                
        < filtering > true </ filtering >
              
        </ resource >
            
        </ resources >
          
        </ build >
          
        < properties >
            
        < my .filter.value > hello </ my.filter.value >
          
        </ properties >


        效果同样Q这样就不需要外部文件了

        另外filterq可以来自系l设|以及可以自定义Q?br /> # application.properties
        java.version=${java.version}
        command.line.prop=${command.line.prop}

      13. jar包依?br /> 我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用
        <dependency>
              
        <groupId>com.mycompany.app</groupId>
              
        <artifactId>my-app</artifactId>
              
        <version>1.0-SNAPSHOT</version>
              
        <scope>compile</scope>
        </dependency>
        注意scope,q里是compile,如果使用junitQscope是test.

        举例说明
        如果我们的project需要用到log4j包,那么我们可以先google--"site:www.ibiblio.org maven2 log4j".
        Index of /maven2/log4j/log4j  下面有maven-metadata.xml 描述了groupId,artifactId,version{等?br /> 获取了这些信息之后,你就可以在pom.xml中添加依赖了
        <dependency>
              
        <groupId>log4j</groupId>
              
        <artifactId>log4j</artifactId>
              
        <version>1.2.12</version>
              
        <scope>compile</scope>
        </dependency>

        14 如何发布我的jar包到我的remote repository
        你需要在setting.xml中间讄server
        <servers>
            
        <server>
              
        <id>mycompany-repository</id>
              
        <username>jvanzyl</username>
              
        <!-- Default value is ~/.ssh/id_dsa -->
            
        <privateKey>/path/to/identity</privateKey>        
                 
        <passphrase>my_key_passphrase</passphrase>
            
        </server>
        </servers>
        然后在pom.xml中设|远Eurl
        <distributionManagement>
            
        <repository>
              
        <id>mycompany-repository</id>
              
        <name>MyCompany Repository</name>
             
        <url>scp://repository.mycompany.com/repository/maven2</url>
            
        </repository>
          
        </distributionManagement>

        使用maven2 构徏 Webapp应用E序
        Z以下框架Q?br /> spring,hibernate,webwork.2.2.2
        1. mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
        2. dmain/java test/java 文g?br /> 3. 构徏pom.xml.d相关依赖Q?br /> 注意以下几点Q?br />       spring:使用id:org.springframework
              hibernate:  org.hibernate
        中途会出现错误。因为jta下蝲不到Q因为licenese的原?br /> jta需要自׃载:java.sun.com/products/jta
        下蝲回来?使用jar命o打包 攑ֈ本地Repo?br /> 4.配置pom
        <resources>
           <resource>
            <directory>src/main/resources</directory>
           </resource>
           <resource>
            <directory>src/main/java</directory>
            <includes>
             <include>**/*.xml</include>
            </includes>
           </resource>
          </resources>
          <testResources>
           <testResource>
            <directory>src/test/resources</directory>
           </testResource>
           <testResource>
            <directory>src/main/webapp</directory>
            <includes>
             <include>**/*.xml</include>
            </includes>
           </testResource>
          </testResources>
        5.我们用到了jetty6来自动化部v
        <plugins>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty6-plugin</artifactId>
           <version>6.0.0beta14</version>      
           </plugin>
          </plugins>
        mvn package 之后可以mvn jetty6:run
        启动之后Q可以在另一个进E mvn compile.冒死可以热交?br /> 在mvn jetty6:run的console Ctrl+c可以停止q程
        Q?文g攄位置Q?br /> resource/ Q?br /> log4j.xml ,webwork相关Qehcache.xml, spring配置文g的properties文gQ比如jdbc.properties
        webapp/web-inf  Q?br /> applicationContext,web.xml
        hbm攑֜java里面
        7. 其他相关
        在webwork2.2中,不再需要通过ActionAutoWiringInterceptor来给Action注入Spring的bean(q种方式仍然保留在xwork1.1?Q改用了另一U更加方便的方式WebWorkSpringObjectFactoryQ配|方式如下:
        在webwork.properties中加入如下配|内容:

        webwork.objectFactory=spring
        #以下配置可?br /> #webwork.objectFactory.spring.autoWire=nameq样可以了Q?br /> 在Action中声明需要某Spring beanQ就会自动注入进来?/p>

        autowire的方式有四种QnameQtypeQautoQconstructorQ默认方式是nameQautowire语义是Spring的语?br /> 另外不推荐用spring理action

        使用maven2 构徏 Webapp应用E序
        Z以下框架Q?br /> spring,hibernate,webwork.2.2.2
        1. mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
        2. dmain/java test/java 文g?br /> 3. 构徏pom.xml.d相关依赖Q?br /> 注意以下几点Q?br />       spring:使用id:org.springframework
              hibernate:  org.hibernate
        中途会出现错误。因为jta下蝲不到Q因为licenese的原?br /> jta需要自׃载:java.sun.com/products/jta
        下蝲回来?使用jar命o打包 攑ֈ本地Repo?br /> 4.配置pom
        <resources>
           <resource>
            <directory>src/main/resources</directory>
           </resource>
           <resource>
            <directory>src/main/java</directory>
            <includes>
             <include>**/*.xml</include>
            </includes>
           </resource>
          </resources>
          <testResources>
           <testResource>
            <directory>src/test/resources</directory>
           </testResource>
           <testResource>
            <directory>src/main/webapp</directory>
            <includes>
             <include>**/*.xml</include>
            </includes>
           </testResource>
          </testResources>
        5.我们用到了jetty6来自动化部v
        <plugins>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty6-plugin</artifactId>
           <version>6.0.0beta14</version>      
           </plugin>
          </plugins>
        mvn package 之后可以mvn jetty6:run
        启动之后Q可以在另一个进E mvn compile.冒死可以热交?br /> 在mvn jetty6:run的console Ctrl+c可以停止q程
        Q?文g攄位置Q?br /> resource/ Q?br /> log4j.xml ,webwork相关Qehcache.xml, spring配置文g的properties文gQ比如jdbc.properties
        webapp/web-inf  Q?br /> applicationContext,web.xml
        hbm攑֜java里面
        7. 其他相关
        在webwork2.2中,不再需要通过ActionAutoWiringInterceptor来给Action注入Spring的bean(q种方式仍然保留在xwork1.1?Q改用了另一U更加方便的方式WebWorkSpringObjectFactoryQ配|方式如下:
        在webwork.properties中加入如下配|内容:

        webwork.objectFactory=spring
        #以下配置可?br /> #webwork.objectFactory.spring.autoWire=nameq样可以了Q?br /> 在Action中声明需要某Spring beanQ就会自动注入进来?/p>

        autowire的方式有四种QnameQtypeQautoQconstructorQ默认方式是nameQautowire语义是Spring的语?br /> 另外不推荐用spring理action



      C物 2008-01-10 19:35 发表评论
      ]]>
      1.1. Maven2 体验http://www.aygfsteel.com/libin2722/archive/2008/01/10/174403.htmlC物C物Thu, 10 Jan 2008 11:28:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174403.htmlhttp://www.aygfsteel.com/libin2722/comments/174403.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/10/174403.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/174403.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/174403.html

      Chapter 1. Maven2

      1.1. Maven2 体验

      声明:本节内容来源?a href="http://www.aygfsteel.com/jbob/" target="_top">blogjava|站jbob的blog 本节的版权归原作者所有,不适用本手册的版权x?/em>

      maven是一个java目理工具Q深化了antQ但又有自己一整套的项目集成策略。目前的版本?.0.2?

      1. maven|站 下蝲maven2Q解压羃

      2. 配置环境变量:maven_home、path

      3. cmd-> mvn --version 查是否安装成?[昄版本P则说明安装成功]

      4. 配置,Maven的配|分Z个层?

        • - pom.xml:针对某个目的配|?/p>

        • Installation

        • User -针对某个用户的配|?/p>

        我们首先配置主要是userU别的,主要包括两点:讄本地的资源库和代理服务器[如果需要的话] ?maven_home%/conf/setting.xml中配|?

        					<localRepository>d:/repo</localRepository>
        					<proxy>
        <id>proxy1</id>
        <active>true</active>
        <protocol>http</protocol>
        <username></username>
        <password></password>
        <host>222.136.91.1</host>
        <port>80</port>
        <nonProxyHosts></nonProxyHosts>
        </proxy>

        修改之后copy一份到${home}/.m2

      5. 建立新的目

        					mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
        • 首先Q程序会从远E下载必要的jar包到你的localRepository,x们刚刚设|的[d:/repo]

        • 然后Q会在当前目录下面生成my-app文g夹,包括单的包结构[java,test]和一个HelloWorldE序及测?以及pom.xml文g?

        注意Qpom.xml contains the Project Object Model (POM) for this project.The POM is the basic unit of work in Maven?

      6. ~译

        mvn compile

        W一ơ运行会下蝲很多jar?而且机器负荷会很重。运行这个命令需要在pom.xml相同目录下面, q个~译只编译主E序Q不会编译test下面的程序。如果需要单独编译test,误行:

        mvn test-compile

        compile之后会生成target文g夹,ȝ序编译在classes下面Q测试程序放在test-classes?/p>

      7. mvn test

        会自动先~译再运行测?/p>

      8. 打包

        mvn package

        打包之前会进行编译,试

      9. 安装

        mvn install

        会将package之后的jar包copy?/p> <local-repository>/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar

      10. 其他

        mvn site

        注意,q可?

        deploy site

        在pom.xml中加?/p>

         <distributionManagement>
        <site>
        <id> website </id>
        < url> scp://www.mycompany.com/www/docs/project/ </url>
        </site>
        </distributionManagement>

        当然你需要设|server

        mvn site-deploy
        mvn clean
        mvn idea:idea [为IDE工具idea生成目文g]
      11. Resource

        ${basedir}/src/main/resources都会~译到jar文g?而且该目录下的内容将直接位于jar文g的顶部?/p>

        试用资源文?> ${basedir}/src/test/resourcesQ引用时如下例:

        InputStream is = getClass().getResourceAsStream( "/test.properties" );

        文g位于 ${basedir}/src/test/resources/test.properties?/p>

      12. 如何filter我们的资源文?/p>

           < build >
        < resources >
        < resource >
        < directory > src/main/resources </ directory >
        < filtering > true </ filtering >
        </ resource >
        </ resources >
        </ build >

        因ؓ原来默认的filter为false所以要加上上面的代?/p>

        eg:我们在src/main/resources下面建立application.properties文g

        # application.properties
        application.name=${pom.name}
        application.version=${pom.version}

        q行Qmvn process-resources 在target/classes下面的application.propertiesl果为:

         # application.properties
        application.name=Maven Quick Start Archetype
        application.version=1.0-SNAPSHOT

        q就是所谓的filter。当然filterq可以用其他的外部文Ӟ不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }]

        e.g src/main/filters/filter.properties:

        # filter.properties
        my.filter.value=hello!

        pom.xml:

         < build >
        < filters >
        < filter > src/main/filters/filter.properties </ filter >
        </ filters >
        < resources >
        < resource >
        < directory > src/main/resources </ directory >
        < filtering > true </ filtering >
        </ resource >
        </ resources >
        </ build >

        # application.properties

        application.name=${pom.name}
        application.version=${pom.version}
        message=${my.filter.value}

        q样在运行mvn process-resources 会得到类似的效果,当然我们也可以直接在pom.xml中定义:

        < build >
        < resources >
        < resource >
        < directory > src/main/resources </ directory >
        < filtering > true </ filtering >
        </ resource >
        </ resources >
        </ build >
        < properties >
        < my .filter.value > hello </ my.filter.value >
        </ properties >

        效果同样Q这样就不需要外部文件了。另外filterq可以来自系l设|以及可以自定义Q?/p>

        # application.properties
        java.version=${java.version}
        command.line.prop=${command.line.prop}
      13. jar包依?/p>

        我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用

        <dependency>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
        </dependency>

        注意scope,q里是compile,如果使用junitQscope是test?/p>

        举例说明Q如果我们的project需要用到log4j包,那么我们可以 先google--"site:www.ibiblio.org maven2 log4j"。Index of /maven2/log4j/log4j 下面有maven-metadata.xml 描述了groupId,artifactId,version{等。获取了q些信息之后Q你 可以在pom.xml中添加依?/p>

        <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
        <scope>compile</scope>
        </dependency>
      14. 如何发布我的jar包到我的remote repository

        你需要在setting.xml中间讄server:

        <servers>
        <server>
        <id>mycompany-repository</id>
        <username>jvanzyl</username>
        <!-- Default value is ~/.ssh/id_dsa -->
        <privateKey>/path/to/identity</privateKey>
        <passphrase>my_key_passphrase</passphrase>
        </server>
        </servers>

        然后在pom.xml中设|远Eurl:

        <distributionManagement>
        <repository>
        <id>mycompany-repository</id>
        <name>MyCompany Repository</name>
        <url>scp://repository.mycompany.com/repository/maven2</url>
        </repository>
        </distributionManagement>

      1.2. Maven2的Eclipse插g安装和?/h2>

      1.2.1. 安装

      你可以从http://m2eclipse.codehaus.orgupdate安装Maven2的Eclipse插gQ具?安装步骤L该网站提供的Flash Demo: http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html

      1.2.2. 使用

      该插件的使用L该网站提供的Flash Demo: http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html

      关于openfan目的Maven操作请参看后l章节?/p>



      C物 2008-01-10 19:28 发表评论
      ]]>
      Maven2.0:~译、测试、部|Ӏ运?/title><link>http://www.aygfsteel.com/libin2722/archive/2008/01/10/174402.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Thu, 10 Jan 2008 11:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/archive/2008/01/10/174402.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/174402.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/archive/2008/01/10/174402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/174402.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/libin2722/services/trackbacks/174402.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="1" border="0"> <tbody> <tr> <td>来自Q?a >http://www.linuxpk.com/43786.html</a></td> </tr> <tr> <td>联系Qlinuxmine#gmail.com</td> </tr> <tr> <td>分类Q?a >[开发工具]</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 />   摘要QMaven1.0已经历了几年的时_q且作ؓAnt的替代品已被q大的开发h员所接收Q但它ƈ没有在很大程度开发h员从Ant的build.xml文g中解脱出来。Maven1.0速度慢ƈ且笨拙,使用h的困隑ֺq不亚于使用Ant的项目。事实上Q它的核心是ZAnt实现的。在l过了几乎彻底的重写后,Maven2.0诞生了?br /> <br />   一个Java目中最困难的地方就是如何着手启动它。在启动目之前Q我们必配|好所有的逻辑关系。比如,Java源代码应该放在何处?单元试应该在何处进行?依赖的jar包应该如何放|?如何构徏目Q如何Ş成文档,如何试和部|项目?在这U情况下Q开发h员不同的处理选择会影响目的余下部分。您的选择可能会你陷入困境,也可能会在将来证明您是一位Java架构大师。我们假定后者是我们奋斗的目标,接下来就q入我们的正题?br /> <br />   构徏一个Java目可以使用很多工具Q其中包括Ant。Ant作ؓ一Ƒօ有革命性的工具Q一直是众多开发者用工具中的首选,它能使开发h员摆׃用大量make命o的苦对于那些不太熟悉make命o的h来说Q他们有充的理由来表明使用命oq不是构建Java目的最好工P因ؓ它不具备q_独立性ƈ且不易用。Ant的出现解决了以上的问题,它用了一个^台独立的工具Q该工具能够解析XML配置文gQ即build.xml。虽然Ant׃其诸多的优点而备受欢q,但它同样有一些缺炏Vbuild.xml文g׃采用了极其简短的描述方式Q得开发h员需要预先学习它的语法。虽然学习曲U不是很陡峭Q但Java开发h员更应该把时间放在开发上面?br /> <br />   Maven是新一代的生力军,它的境遇正好和几q前的Ant十分cM。Maven1.0已经历了几年的时_q且作ؓAnt的替代品已被q大的开发h员所接收Q但它ƈ没有在很大程度开发h员从Ant的build.xml文g中解脱出来。Maven1.0速度慢ƈ且笨拙,使用h的困隑ֺq不亚于使用Ant的项目。事实上Q它的核心是ZAnt实现的。在l过了几乎彻底的重写后,Maven2.0诞生了?br /> <br />   <span style="color: red">版权声明QQ何获得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有许多很好功能,q些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java目Qƈ且想使该目快速地开展下去,Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点:<br /> <br />   --标准的项目布局和项目结构生成器<br /> <br />   --标准的依赖管理机?br /> <br />   --多项目支?br /> <br />   --在开发者需要的时候及时地下蝲新的插g和功能部?br /> <br />   --生成最新项目信息的|站<br /> <br />   --集成了源代码控制软gQCVS和Subversion<br /> <br />   以上列表展示的只是Maven2.0特点中的一部分。但q以Maven2.0成ؓ一个构建管理系l可靠的选择。既然我们已l知道Maven是个什么东西了Q接下来让我们看看如何用它?br /> <br />   <span style="font-size: 16px">入门<br /> <br />   我们要做的第一件事情就是设|目录结构,但这q不需要让我们手动讄QMaven会根据您开发的目cd来ؓ您做qg事。一旦您下蝲q解压了最新发布的Maven 2.0Q您应该Maven所在目录下面的bin目录d到您的系l\径下。您可以q行命omvn -version来测试您的安装?br /> <br />   既然已经安装上了工具Q让我们看看创徏一个简单的Java目的例子。Maven使用原型来决定目录结构是如何展现的。Maven自带了几个内建的原型Q您也可以自定义原型?br /> <br />   <span style="color: blue">mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app<br /> <br />   您看Q这q成了我们的项目布局?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 />   对,p么简单。这U目录结构可以通过创徏一个新的原型来覆写Q但q不推荐q么做,因ؓMaven的一个优点就是用标准的目录l构。该目录l构包含两个源代码树Q一个是Java应用E序的源代码Q另一个是单元试代码。同时您也许会注意到Q当W一ơ运行Maven的时候,它会q行一些下载工作。当您开始调用工hQMaven会根据您使用的插件来更新自n的一些所需功能。Maven默认会从Ibiblio存储库中得到更新。您可以在Maven安装目录下的conf目录中,或者项目自w中修改Mavenq程存储库的选择?br /> <br />   您会发现Maven在my-app目录下创Z一个pom.xml文g。这是项目的最基本部分。pom.xml文g包含了一l指令,q些指o告诉Maven如何构徏目和包含哪些其它的Ҏ指oQPOM?#8220;目对象模型”的羃写)。在默认的情况下QMaven包含了JUnit的依赖以此来鼓励单元试?br /> <br />    <pre class="overflow"><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"><br /> <br />   <modelVersion>4.0.0</modelVersion><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>my-app</artifactId><br /> <br />   <packaging>jar</packaging><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   <name>Maven Quick Start Archetype</name><br /> <br />   <url>http://maven.apache.org</url><br /> <br />   <dependencies><br /> <br />   <dependency><br /> <br />   <groupId>junit</groupId><br /> <br />   <artifactId>junit</artifactId><br /> <br />   <version>3.8.1</version><br /> <br />   <scope>test</scope><br /> <br />   </dependency><br /> <br />   </dependencies><br /> <br />   </project></pre> <br /> <br />   创徏完项目后Q我们可以往目里添加代码ƈ使用Maven的所有全新技巧。注意以下命令必dpom.xml文g所在的目录中运行?br /> <br />   --mvn testQ运行应用程序中的单元测?br /> <br />   --mvn packageQ依据项目生成jar文g<br /> <br />   --mvn installQ将目的jar文gd到库中,以备依赖此项目时使用<br /> <br />   --mvn siteQ生成项目相关信息的|站<br /> <br />   --mvn cleanQ清除目标目录中的生成结?br /> <br />   --mvn eclipse:eclipseQ生成Eclipse目文g<br /> <br />   接下来我们看看稍微复杂点的地方,我们知道手动开始一个Java web目比手动开始一个简单的Java目更耗时Q然而Maven的用则能化难ؓ易。下面的例子Q实际上是一行命令)展现了项目结构的构造?br /> <br />   <span style="color: blue">mvn archetype:create -DgroupId=com.oreilly<br /> <br />   -DartifactId=Oreilly<br /> <br />   -DarchetypeArtifactId=maven-archetype-webapp<br /> <br />   生成的结果结构如下所C:<br /> <br />   Oreilly<br /> <br />   ----src<br /> <br />   ----main<br /> <br />   ----resources<br /> <br />   ----webapp<br /> <br />   ----WEB-INF<br /> <br />   q一ơ,我们的项目由于支持了包含在war文g中的web资源而设|有所不同。pom.xml文g中将包含一行来表明目应该被打包成war文gQ?lt;packaging>war</packaging>。现在就可以使用mvn package命o来生成war文g。不用担心如何从WEB-INF/lib目录中得C赖项Q在依赖属性D讄成compile的情况下QMaven会自动包含依赖项。也可以以下代码添加到pom.xml文g中来改变war文g的名Uͼ<br /> <br />    <pre class="overflow"><build><br /> <br />   <finalName>PromoteC</finalName><br /> <br />    </build></pre> <br /> <br />   <span style="font-size: 16px">依赖理<br /> <br />   创徏好项目结构,d完一些代码,试q编译好应用E序后,接下来可以看看Maven是如何处理依赖关pȝ。ؓ了给目d一个依赖项Q必d此依赖项d到pom.xml文g中。下ơ运行Maven的时候,它将从Ibiblio存储库中得到q个依赖,q且此依赖Ҏ加到目构徏路径中?br /> <br />   关于依赖的问题有几个重要的事情值得注意。在写这文章的时候,Maven中最大的ȝ之处是不能从Maven存储库中获取Sun的jar文g。这个问题归因于Sun在其代码中设|的许可证限制。解册个问题的办法有两U,一U是下蝲q些代码q将它们安装在您本地的存储库中,另一U是做一个外部声明,q将q个声明指向文gpȝ中依赖项所在的位置。希望Sun能够早地创q存储库,管如此QMaven也会被升U来使之能够下蝲q些资源Q只是在下蝲之前它会提示用户接受许可证协议?br /> <br />   另外一个麻烦的地方是有时候用的最新的库文件可能在q程存储库中不存在。另一U可能是׃无法讉KInternetQ需要所有的依赖w能在本地获取。这些问题的最好解x案就是将jar文g安装到本地的存储库中。将本地的存储库攑֜一台web服务器上也同h个便利之举,q样整个开发团队就能从此获益,每个人都没有必要ȝ理自q存储库了。改变Maven的存储库路径只需单地~辑其安装目录下conf文g夹下面的settings.xml文g卛_?br /> <br />   在Maven中用依赖是单的。让我们看看往上述pom.xml文g中添加一个依赖项的情c我们虽然已l用了JUnitQ但让我们将功能强大的Quartz库添加到目中。Quartz是一ƄUJava~写的关于时间安排的开源项目,它是您时间安排需求方面的很好的选择?br /> <br />    <pre class="overflow"><dependency><br /> <br />    <groupId>quartz</groupId><br /> <br />    <artifactId>quartz</artifactId><br /> <br />    <version>1.5.1</version><br /> <br />    <scope>compile</scope><br /> <br />    </dependency></pre> <br /> <br />   我们仅仅只需d<dependencies>q个元素QMavenp下蝲Quartzq将其作为项目中的一个依赖项。不用担心Quartz的依赖项Q一个Maven的存储库包含依赖项自n依赖的资源信息,当Maven下蝲Quartz的时候,它自w的依赖资源也同样会被下载。ؓ了验证版本ؓ1.5.1的Quartz存在于Ibiblio库中Q我们可以浏览Maven存储库。注意到scope参数的用,它告诉了Maven依赖在何种阶段是所需的。在使用JUnit的情况下Q我们设|scope参数的gؓtest来告诉Mavenq个依赖只是在试阶段所需的,而不是运行时所需的资源。以下是scope参数值的说明Q?br /> <br />   --compileQ默认倹{表明是所有Q务所需的资?br /> <br />   --testQ运行所有的试用例时所需资源<br /> <br />   --runtimeQ表明是q行时所需资源<br /> <br />   --providedQJDK部分或应用服务器的classpath所需的资?br /> <br />   现在Q如何处理那些麻烦的Sun的jar包和那些需要但却不能在q程存储库中扑ֈ的jar包了Q我们必M用Maven来手动将q些jar包安装到本地的存储库中。不用担心,q没有听上去那么困难。ؓ了做个示例,我们安装Java Activation框架的jar包。首先我们必MSun的站点上下蝲此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 />   现在Q新的jar包就像其它的目依赖一样安装到了本地存储库中。在只需d依赖声明后,我们已准备qA了。在djar包和声明它们Z赖项Ӟ必须保版本信息的正性。版本的不匹配会DMaven在寻找资源时的失败。在导入Sun的jar包时Q如果您需要寻求标准命名参数的帮助Q可以参考Sun标准jar包命名。记住,在目前您不能通过存储库来公开发布q些jar包,q将q反Sun的用条ƾ?br /> <br />    <pre class="overflow"><dependency><br /> <br />    <groupId>javax.activation</groupId><br /> <br />    <artifactId>activation</artifactId><br /> <br />    <version>1.0</version><br /> <br />    <scope>compile</scope><br /> <br />    </dependency></pre> <br /> <br />   您或许想依赖项存入一个源代码控制器的库中Q源代码控制器决不能执行q个d。依赖项是经常变化的Qƈ且通常有一套数字方案来标明其版本。这是_您明地希望有一个内部远E存储库的备份,如果您有一个,q将保在存储库服务器崩溃ƈ且不能恢复的情况下,您不会丢失所有的自定义资源。不依赖项攑օ源代码控制器中也会节省源代码控制器的存储库服务器上的大量盘I间?br /> <br />   <span style="font-size: 16px">配置存储?br /> <br />   要求目的每个开发者必dconf目录中配|存储库是不方便的,所以Maven可以同时查看多个存储库ƈ且将它们全部配置在pom.xml文g中。让我们看看一个例子,它展CZ如何在应用程序用使用多个存储库。在以下从pom.xml文g摘录的片断中Q我们设|了两个存储库来让MavenL依赖VIbiblio一直是默认的存储库Q我们又d了Planet Mirror作ؓ后援存储库。我们也可以让团队用的本地web服务器作为第二个存储库?br /> <br />    <pre class="overflow"><repositories><br /> <br />   <repository><br /> <br />   <id>Ibiblio</id><br /> <br />   <name>Ibiblio</name><br /> <br />   <url>http://www.ibiblio.org/maven/</url><br /> <br />   </repository><br /> <br />   <repository><br /> <br />   <id>PlanetMirror</id><br /> <br />   <name>Planet Mirror</name><br /> <br />   <url>http://public.planetmirror.com/pub/maven/</url><br /> <br />   </repository><br /> <br />   </repositories></pre> <br /> <br />   <span style="font-size: 16px">使用pom.xml父文件来构徏多个目<br /> <br />   软g公司通常的一U做法就是将多个目构徏C要品中。维护依赖关p链和一ơ性地构徏整个产品以成ؓ一个挑战,但是如果使用Maven的话Q事情将变得单。如果您创徏了一个指向其它子模块的pom.xml父文ӞMavenؓ您处理整个构E。它分析每个子模块的pom.xml文gQƈ且按照这些子模块的相互依赖顺序来构徏目。如果每个项目明地指明它们的依赖项Q那么子模块在父文g中的攄序是不造成M影响的。但是考虑到其他的开发者,最好保证子模块在pom.xml父文件中的放|顺序和您期望的子项目被构徏的顺序一栗下面我们看个示例?br /> <br />   pom.xmlL件如下:<br /> <br />    <pre class="overflow"><project><br /> <br />   <modelVersion>4.0.0</modelVersion><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   <artifactId>my-app</artifactId><br /> <br />   <packaging>pom</packaging><br /> <br />   <modules><br /> <br />   <module>Common</module><br /> <br />   <module>Utilities</module><br /> <br />   <module>Application</module><br /> <br />    <module>WebApplication</module><br /> <br />   </modules><br /> <br />   </project></pre> <br /> <br />   我们需要确保WebApplication子模块包含了所有的三个jar包,所以需要将q些jar包声明ؓ依赖V在q个例子中,Utilities目依赖于Common目Q所以Utilities目中需要添加一个对Common目的依赖。Application子模块也是同L道理Q因为它依赖于Common和Utilities目QUtilities又赖于Common。如果这个例子中?0个子模块Qƈ且它们都怺依赖Q这会得新开发者难以算Z么项目依赖于其它目Q所以这正好是要求确保pom.xml父文件中目攄序要清除的原因?br /> <br />   以下是Utility模块的依赖项Q?br /> <br />    <pre class="overflow"><dependencies><br /> <br />   <dependency><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>Common</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </dependency><br /> <br />   </dependencies></pre> <br /> <br />   以下是如何声明Application模块的依赖项Q?br /> <br />    <pre class="overflow"><dependencies><br /> <br />   <dependency><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>Common</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </dependency><br /> <br />   <dependency><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>Utilities</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </dependency><br /> <br />   </dependencies></pre> <br /> <br />   最后是WebApplication模块的依赖项Q?br /> <br />    <pre class="overflow"><dependencies><br /> <br />   <dependency><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>Common</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </dependency><br /> <br />   <dependency><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>Utilities</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </dependency><br /> <br />   <dependency><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>Application</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </dependency><br /> <br />   </dependencies></pre> <br /> <br />   现在Q我们只需为每个子模块的pom.xml文gd一个元素来表明它们是一个逻辑构徏的一部分Q?br /> <br />    <pre class="overflow"><parent><br /> <br />   <groupId>com.oreilly</groupId><br /> <br />   <artifactId>my-app</artifactId><br /> <br />   <version>1.0-SNAPSHOT</version><br /> <br />   </parent></pre> <br /> <br />   在pom.xml父文件所在的同一个目录中Q存在有目目录QCommon, Utilities, Application, 和WebApplication。当我们在该目录中运行mvn package命oӞq些目会按照依赖顺序而被构徏?br /> <br />   <span style="font-size: 16px">插g和报?br /> <br />   Maven2.0有大量的插g可以使用。不q的是,׃Maven的重写,Maven1.0的插件不能在2.0中用。尽如此,q是存在一些可以用的Maven2.0的插件。下面pom.xml文g中的插g配置CZ是直接从Maven2.0|站上得来的。这个插件是用来配置~译选项的?br /> <br />    <pre class="overflow"><plugins><br /> <br />   <plugin><br /> <br />   <groupId>org.apache.maven.plugins</groupId><br /> <br />   <artifactId>maven-compiler-plugin</artifactId><br /> <br />   <configuration><br /> <br />   <source>1.5</source><br /> <br />   <target>1.5</target><br /> <br />   </configuration><br /> <br />   </plugin><br /> <br />   </plugins></pre> <br /> <br />   Maven报表插g可以用来生成不同的报表,q些报表是在当你使用mvn site命o生成目的站Ҏ产生的。下面的例子展示了如何?lt;reporting>元素来配|这cL件中的一个?br /> <br />    <pre class="overflow"><reporting><br /> <br />   <plugins><br /> <br />   <plugin><br /> <br />   <groupId>org.apache.maven.plugins</groupId><br /> <br />   <artifactId>maven-project-info-reports-plugin</artifactId><br /> <br />   </plugin><br /> <br />   </plugins><br /> <br />   </reporting></pre> <br /> <br />   Maven Plugin Matrix是一个十分实用的工具Q它能给出哪些Maven插g适合于哪些版本的Maven?br /> <br />   <span style="font-size: 16px">Maven ?Eclipse<br /> <br />   如何能全世界最好的IDE变得更好了?{案是用Maven2的插Ӟ它能帮助您寻找依赖项q自动地它们添加到pom.xml文g中。虽然最好的Ҏ是首先用Maven来创建您的项目,然后再用命omvn eclipse:eclipse来生成Eclipse目文gQ这h初就能得C个好的目录结构,但Maven也可通过其Eclipse插g来管理Q何项目?br /> <br />   您可以在Eclipse自n的升U器中输入站点http://m2eclipse.codehaus.org/来安装插件。在安装完成q启IDE后,您需要在Eclipse的参数选项中配|此插gQ设|本地存储库的位|。这是很重要的一步,因ؓ如果Eclipse默认的存储库不能匚w您默认的需求,Maven会重C载您的依赖项。配|完成后Q将目导入EclipseQ鼠标右击该目Q选择Maven 2 -> Enable。现在您可以回到之前的步骤,您可以有更多的选项比如d依赖,q将弹出一个搜索框Q您可以搜烦依赖ƈd它们Q插件会替你~辑pom.xml文g?br /> <br />   插g会用Maven来构建您的项目,像Eclipse使用Ant来构建项目一栗如果您惌取更多的关于Eclipse整合Maven的信息,可以查阅Maven站点上的Eclipse集成Maven 2.x使用指南?br /> <br />   另一斚wQ如果您是一个IntelliJ使用爱好者,您也能通过q行指omvn idea:idea来完成同Ld。这些IDE工具能够节省开发h员的旉。例如,如果一个开发h员ؓ一个项目添加了一些特征,团队里的其他开发h员只需从源代码控制器的存储库中重新获取目文g卛_Q这p省了每个开发h员必配|IDE的时间?br /> <br />   <span style="font-size: 16px">l论<br /> <br />   Maven2.0有着许多实用的特点,q且完成d十分。Maven中最值得U赞的地方就是用了标准的目录结构和部v。这׃得开发h员能够适应不同的项目,q且不用学习Ml构斚w新的东西Q也不用掌握Ҏ的指令来构徏l构。Maven可以通过U脚本来实现。在文档斚wQ由于用了目站点构徏工具Q所以当目构徏完成后,您可以查看所有开发的当前状态?br /> <br />   毫无疑问Q当提到构徏配置的׾~性,易用性和目理斚wӞMaven2.0_以将Ant取而代之。在接下来的几年内,我们看到Maven作ؓ标准构徏技术更多的使用Q直到有人带来了大家公认?#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软g公司的高UJava工程师? <div></div> <a >本文来自Qhttp://www.linuxpk.com/43786.html</a><br /> </span></span></span></span></span></span></span></span></span></span></span></span> <img src ="http://www.aygfsteel.com/libin2722/aggbug/174402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2008-01-10 19:27 <a href="http://www.aygfsteel.com/libin2722/archive/2008/01/10/174402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2 常用命ohttp://www.aygfsteel.com/libin2722/archive/2008/01/08/173837.htmlC物C物Tue, 08 Jan 2008 15:38:00 GMThttp://www.aygfsteel.com/libin2722/archive/2008/01/08/173837.htmlhttp://www.aygfsteel.com/libin2722/comments/173837.htmlhttp://www.aygfsteel.com/libin2722/archive/2008/01/08/173837.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/173837.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/173837.html阅读全文

      C物 2008-01-08 23:38 发表评论
      ]]>
      վ֩ģ壺 | | | Ȫ| | | Ͽ| ֻ| | ͨ| Ȫ| ɽ| ƽԶ| ľ| ʯ| | | ͬ| ǿ| ں| | ī| ߱| ɽ| | | | Ѱ| ˺| ˱| | Ҷ| | | ɽ| | | Ӽ| گ| | ¡|