﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-esoa-文章分类-g.ant/maven2</title><link>http://www.blogjava.net/esoa/category/17504.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:34:06 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:34:06 GMT</pubDate><ttl>60</ttl><item><title>Maven的相关链接</title><link>http://www.blogjava.net/esoa/articles/95835.html</link><dc:creator>comchyi</dc:creator><author>comchyi</author><pubDate>Thu, 25 Jan 2007 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/esoa/articles/95835.html</guid><wfw:comment>http://www.blogjava.net/esoa/comments/95835.html</wfw:comment><comments>http://www.blogjava.net/esoa/articles/95835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/esoa/comments/commentRss/95835.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/esoa/services/trackbacks/95835.html</trackback:ping><description><![CDATA[
		<u>
				<font color="#800080">用Maven做项目管理      </font>
		</u>
		<a href="/pesome/archive/2006/09/21/71045.html">http://www.blogjava.net/pesome/archive/2006/09/21/71045.html<br /></a>
		<br />
		<br />Maven起步-教你开始使用Maven      http://www.matrix.org.cn/resource/article/43/43661_Maven.html<br /><br /><a href="http://www.360doc.com/showweb/0/0/312622.aspx">http://www.360doc.com/showweb/0/0/312622.aspx</a><br /><br /><h1><font size="4"> <a href="http://genesis.blogdriver.com/genesis/820342.html">浅尝MAVEN</a>  <a href="http://genesis.blogdriver.com/genesis/">http://genesis.blogdriver.com/genesis/</a></font></h1><p>Maven学习笔记四(续) <a href="http://jwenlong.spaces.live.com/">http://jwenlong.spaces.live.com/</a></p><u><font color="#0000ff">Maven入门--概念与实例</font></u>  <a href="http://blog.csdn.net/icefishchwd/archive/2007/01/16/1484246.aspx">http://blog.csdn.net/icefishchwd/archive/2007/01/16/1484246.aspx</a><br /><br /><u><font color="#800080">maven2.0学习笔记</font></u>  <a href="http://blog.csdn.net/srx/archive/2006/04/17/666204.aspx">http://blog.csdn.net/srx/archive/2006/04/17/666204.aspx</a><br /><br /><font color="#000080">maven翻译一结</font><a href="http://blog.csdn.net/yingwu0579/archive/2006/02/22/606460.aspx">http://blog.csdn.net/yingwu0579/archive/2006/02/22/606460.aspx</a><br /><br />Quick Start - 使用Maven构建项目 <a href="http://blog.csdn.net/tehcon/archive/2005/03/27/332184.aspx">http://blog.csdn.net/tehcon/archive/2005/03/27/332184.aspx</a><br /><br /><font color="#000080">Maven中文手册</font><a href="http://blog.csdn.net/qiquan36/archive/2005/04/15/348197.aspx">http://blog.csdn.net/qiquan36/archive/2005/04/15/348197.aspx</a><br /><img src ="http://www.blogjava.net/esoa/aggbug/95835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/esoa/" target="_blank">comchyi</a> 2007-01-25 09:13 <a href="http://www.blogjava.net/esoa/articles/95835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初试Maven2 </title><link>http://www.blogjava.net/esoa/articles/94702.html</link><dc:creator>comchyi</dc:creator><author>comchyi</author><pubDate>Thu, 18 Jan 2007 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/esoa/articles/94702.html</guid><wfw:comment>http://www.blogjava.net/esoa/comments/94702.html</wfw:comment><comments>http://www.blogjava.net/esoa/articles/94702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/esoa/comments/commentRss/94702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/esoa/services/trackbacks/94702.html</trackback:ping><description><![CDATA[一个Maven2工程的核心就是这一个pom.xml，它包含了你的工程详细信息，如：版本、配置、依赖、测试、项目成员等等。学习maven2主要就是学习如何配置pom.xml。<br /><br />一个简单的而完全可操作的pom.xml如下所示：<br /><br />&lt;project xmlns="http://maven.apache.org/POM/4.0.0"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xsi:schemaLocation="http://maven.apache.org/POM/4.0.0<br /><a href="http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;">http://maven.apache.org/maven-v4_0_0.xsd"&gt;</a><br />&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;!--maven2--&gt;<br />&lt;groupId&gt;ctzj_bss&lt;/groupId&gt; &lt;!-- 这个项目所属组的id，一般是项目所在的公司或组织的域名 --&gt;<br />&lt;artifactId&gt;NRC&lt;/artifactId&gt; &lt;!-- 项目的id,和groupId一起组成这个项目的一个唯一id，以用在别的maven2工程中 --&gt;<br />&lt;packaging&gt;jar&lt;/packaging&gt; &lt;!-- 最后这个工程的打包类型,在这里是打成jar包 --&gt;<br />&lt;version&gt;1.0&lt;/version&gt; &lt;!-- 版本号 --&gt;<br />&lt;name&gt;kenan nrc batch&lt;/name&gt; &lt;!-- 项目名, 区别于artifactId--&gt;<br />&lt;description&gt;insert a nrc in kenan db&lt;/description&gt; &lt;!-- 项目描述,会出现在生成的工程站点上 --&gt;<br />&lt;build&gt; &lt;!-- 项目的构建信息 --&gt;<br />&lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;<br />&lt;testSourceDirectory&gt;test&lt;/testSourceDirectory&gt;<br />&lt;outputDirectory&gt;target\classes&lt;/outputDirectory&gt;<br />&lt;testOutputDirectory&gt;target\test-classes&lt;/testOutputDirectory&gt;<br />&lt;directory&gt;target&lt;/directory&gt; &lt;!-- 构建后生成文件(jar,site等)所在位置 --&gt;<br />&lt;/build&gt;<br />&lt;dependencies&gt; &lt;!-- 项目的依赖外接包,maven的优势之一 --&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;junit&lt;/groupId&gt;<br />&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />&lt;version&gt;3.8.1&lt;/version&gt;<br />&lt;scope&gt;test&lt;/scope&gt;<br />&lt;/dependency&gt;<br />&lt;/dependencies&gt;<br />&lt;reporting&gt; &lt;!-- 项目报表,有很多插件可供选择 --&gt;<br />&lt;outputDirectory&gt;target/site&lt;/outputDirectory&gt;<br />&lt;plugins&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />&lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br />&lt;/plugins&gt;<br />&lt;/reporting&gt;<br />&lt;/project&gt;<br /><br /><br />在你配置了你的pom文件后，你就可以使用如下命令来运行maven2<br /><br />mvn compiler:compile 编译你的原文件<br />mvn jar:jar 打包<br />mvn site:site 生成项目站点<br /><br /><br />接下来逐个介绍pom.xml的各个要素<br /><br />developor,organization and mail lit<br />build<br />dependencies<br />reporting<br /><br />1.developor,organization and mail list<br /><br />可以在pom中加入开发人员列表,项目所属组织信息,邮件列表,这些信息会出现在生成的项目站点上<br /><br />&lt;organization&gt;<br />&lt;name&gt;CTZJ BSS&lt;/name&gt;<br />&lt;/organization&gt;<br />&lt;developers&gt;<br />&lt;developer&gt;<br />&lt;name&gt;Chen Lin&lt;/name&gt;<br />&lt;organization&gt;ZJHCsoft&lt;/organization&gt;<br />&lt;email&gt;chenlin@zjhcsoft.com&lt;/email&gt;<br />&lt;/developer&gt;<br />&lt;/developers&gt;<br />&lt;mailingLists&gt;<br />&lt;mailingList&gt;<br />&lt;name&gt;${pom.name} Dev List&lt;/name&gt;<br />&lt;/mailingList&gt;<br />&lt;mailingList&gt;<br />&lt;name&gt;${pom.name} User List&lt;/name&gt;<br />&lt;/mailingList&gt;<br />&lt;/mailingLists&gt;<br /><br />2. build<br /><br />配置项目的构建信息,主要有指定目录,包括源代码、测试源代码、输出目录、资源目录等.如果没有特殊需求以上的pom已经足够了<br /><br />3. dependencies<br /><br />配置项目要用到的jar包.自认为maven对jar包的管理是它的一个重要特色.下面是一个jar包的配置:<br /><br />&lt;dependency&gt;<br />&lt;groupId&gt;concurrent&lt;/groupId&gt;<br />&lt;artifactId&gt;concurrent&lt;/artifactId&gt;<br />&lt;version&gt;1.3.4&lt;/version&gt;<br />&lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;<br /><br />groupId: 没有特定的含义,一般来自同一组织的jar包会有相同的groupId值<br />artifactId: 这个jar的id,一般是这个jar包的名称<br />version: jar包的版本号,一般情况下,artifactId-version.jar就是这个jar包的文件名<br />scope: 这个jar所影响的范围,compile指它会在编译源代码时用到.还有test,provide,runtime等值<br /><br />如果你不知道jar包的groupId和artifactId，可以到http://www.mavenregistry.com/ 进行查询<br /><br />一旦指定后,当你进行编译时，它就会到你的本地资源库<br /><br />另,如果你引入本地包，则需要先行将它安装到本地资料库(repository),使用如下命令<br /><br />mvn install:install-file -DgroupId=%groupId% -DartifactId=%artifactId% -DgeneratePom=true -Dfile=%file% -Dpackaging=jar -Dversion=%version%<br /><br />4. reporting<br /><br />通过使用相应的report plug-in可以生成各种各样的report.如javadoc,junit test report,代码检查等<br /><br />常用的常见有<br /><br />&lt;plugin&gt;<br />&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;!--java doc --&gt;<br />&lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;!-- 代码检查 --&gt;<br />&lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;<br />&lt;configuration&gt;<br />&lt;configLocation&gt;config/sun_checks.xml&lt;/configLocation&gt;<br />&lt;/configuration&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt; &lt;!-- test 结果报表 --&gt;<br />&lt;artifactId&gt;surefire-report-maven-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt; &lt;!-- 源代码的HTML化 --&gt;<br />&lt;artifactId&gt;jxr-maven-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br /><br />在maven的官方网站有可以找到更多的report plugin<br /><br /><br />最后一个比较完整的pom.xml看起来像这样：<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 <a href="http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;">http://maven.apache.org/maven-v4_0_0.xsd"&gt;</a><br />&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />&lt;name&gt;CutoverModule&lt;/name&gt;<br />&lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />&lt;artifactId&gt;eai_cutover&lt;/artifactId&gt;<br />&lt;url&gt;http://134.98.83.137:8081/scarab/issues&lt;/url&gt;<br />&lt;inceptionYear&gt;2006&lt;/inceptionYear&gt;<br />&lt;organization&gt;<br />&lt;name&gt;CTZJ BSS&lt;/name&gt;<br />&lt;url&gt;http://www.zjhcsoft.com&lt;/url&gt;<br />&lt;/organization&gt;<br />&lt;version&gt;1.0&lt;/version&gt;<br />&lt;description&gt;97 cutover batch module:invoke eai-adapter to update the phone number or value of<br />c4/c5&lt;/description&gt;<br />&lt;developers&gt;<br />&lt;developer&gt;<br />&lt;name&gt;Chen Lin&lt;/name&gt;<br />&lt;organization&gt;ZJHCSoft&lt;/organization&gt;<br />&lt;email&gt;chenlin@zjhcsoft.com&lt;/email&gt;<br />&lt;/developer&gt;<br />&lt;/developers&gt;<br />&lt;mailingLists&gt;<br />&lt;mailingList&gt;<br />&lt;name&gt;${pom.name} Dev List&lt;/name&gt;<br />&lt;/mailingList&gt;<br />&lt;/mailingLists&gt;<br />&lt;build&gt;<br />&lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;<br />&lt;testSourceDirectory&gt;test&lt;/testSourceDirectory&gt;<br />&lt;outputDirectory&gt;target\classes&lt;/outputDirectory&gt;<br />&lt;testOutputDirectory&gt;target\test-classes&lt;/testOutputDirectory&gt;<br />&lt;directory&gt;target&lt;/directory&gt;<br />&lt;plugins&gt;<br />&lt;plugin&gt;<br />&lt;artifactId&gt;maven-clean-plugin&lt;/artifactId&gt;<br />&lt;version&gt;2.1&lt;/version&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;artifactId&gt;maven-resources-plugin&lt;/artifactId&gt;<br />&lt;version&gt;2.1&lt;/version&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />&lt;version&gt;2.0&lt;/version&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;<br />&lt;version&gt;2.1.2&lt;/version&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;<br />&lt;version&gt;2.0&lt;/version&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;artifactId&gt;maven-install-plugin&lt;/artifactId&gt;<br />&lt;version&gt;2.1&lt;/version&gt;<br />&lt;/plugin&gt;<br />&lt;/plugins&gt;<br />&lt;/build&gt;<br />&lt;ciManagement&gt;<br />&lt;system&gt;continuum&lt;/system&gt;<br />&lt;url&gt;http://localhost:8080/continuum/servlet/continuum&lt;/url&gt;<br />&lt;/ciManagement&gt;<br />&lt;scm&gt;<br />&lt;connection&gt;scm:local|E:/eclipseworkshop|EAIBatch&lt;/connection&gt;<br />&lt;/scm&gt;<br />&lt;dependencies&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />&lt;artifactId&gt;Eaiadapter&lt;/artifactId&gt;<br />&lt;version&gt;1.0&lt;/version&gt;<br />&lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />&lt;artifactId&gt;ta&lt;/artifactId&gt;<br />&lt;version&gt;1.0&lt;/version&gt;<br />&lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;ctzj_batch&lt;/groupId&gt;<br />&lt;artifactId&gt;grnds-common&lt;/artifactId&gt;<br />&lt;version&gt;4.1&lt;/version&gt;<br />&lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;junit&lt;/groupId&gt;<br />&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />&lt;version&gt;3.8.1&lt;/version&gt;<br />&lt;scope&gt;test&lt;/scope&gt;<br />&lt;/dependency&gt;<br />&lt;dependency&gt;<br />&lt;groupId&gt;concurrent&lt;/groupId&gt;<br />&lt;artifactId&gt;concurrent&lt;/artifactId&gt;<br />&lt;version&gt;1.3.4&lt;/version&gt;<br />&lt;scope&gt;compile&lt;/scope&gt;<br />&lt;/dependency&gt;<br />&lt;/dependencies&gt;<br />&lt;reporting&gt;<br />&lt;outputDirectory&gt;target/site&lt;/outputDirectory&gt;<br />&lt;plugins&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />&lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />&lt;artifactId&gt;maven-checkstyle-plugin&lt;/artifactId&gt;<br />&lt;configuration&gt;<br />&lt;configLocation&gt;config/sun_checks.xml&lt;/configLocation&gt;<br />&lt;/configuration&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />&lt;artifactId&gt;surefire-report-maven-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br />&lt;plugin&gt;<br />&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />&lt;artifactId&gt;jxr-maven-plugin&lt;/artifactId&gt;<br />&lt;/plugin&gt;<br />&lt;/plugins&gt;<br />&lt;/reporting&gt;<br />&lt;/project&gt;<br /><br />from <a href="http://blog.matrix.org.cn/page/">http://blog.matrix.org.cn/page/</a><img src ="http://www.blogjava.net/esoa/aggbug/94702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/esoa/" target="_blank">comchyi</a> 2007-01-18 17:08 <a href="http://www.blogjava.net/esoa/articles/94702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2.0:编译、测试、部署、运行</title><link>http://www.blogjava.net/esoa/articles/94701.html</link><dc:creator>comchyi</dc:creator><author>comchyi</author><pubDate>Thu, 18 Jan 2007 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/esoa/articles/94701.html</guid><wfw:comment>http://www.blogjava.net/esoa/comments/94701.html</wfw:comment><comments>http://www.blogjava.net/esoa/articles/94701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/esoa/comments/commentRss/94701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/esoa/services/trackbacks/94701.html</trackback:ping><description><![CDATA[ 摘要：Maven1.0已经历了几年的时间，并且作为Ant的替代品已被广大的开发人员所接收，但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。Maven1.0速度慢并且笨拙，使用起来的困难度并不亚于使用Ant的项目。事实上，它的核心是基于Ant实现的。在经过了几乎彻底的重写后，Maven2.0诞生了。<br /><p>一个Java项目中最困难的地方就是如何着手启动它。在启动项目之前，我们必须配置好所有的逻辑关系。比如，Java源代码应该放在何处？单元测试应该在何处进行？依赖的jar包应该如何放置？如何构建项目，如何形成文档，如何测试和部署项目？在这种情况下，开发人员不同的处理选择将会影响项目的余下部分。您的选择可能会使你陷入困境，也可能会在将来证明您是一位Java架构大师。我们假定后者是我们奋斗的目标，接下来就进入我们的正题。<br /><br />构建一个Java项目可以使用很多工具，其中包括Ant。Ant作为一款具有革命性的工具，一直是众多开发者使用工具中的首选，它能使开发人员摆脱使用大量make命令的苦海。对于那些不太熟悉make命令的人来说，他们有充足的理由来表明使用命令并不是构建Java项目的最好工具，因为它不具备平台独立性并且不易使用。Ant的出现解决了以上的问题，它使用了一个平台独立的工具，该工具能够解析XML配置文件，即build.xml。虽然Ant由于其诸多的优点而备受欢迎，但它同样有一些缺点。build.xml文件由于采用了极其简短的描述方式，使得开发人员需要预先学习它的语法。虽然学习曲线不是很陡峭，但Java开发人员更应该把时间放在开发上面。<br /><br />Maven是新一代的生力军，它的境遇正好和几年前的Ant十分类似。Maven1.0已经历了几年的时间，并且作为Ant的替代品已被广大的开发人员所接收，但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。Maven1.0速度慢并且笨拙，使用起来的困难度并不亚于使用Ant的项目。事实上，它的核心是基于Ant实现的。在经过了几乎彻底的重写后，Maven2.0诞生了。<br /><br /><span style="COLOR: red">版权声明：任何获得Matrix授权的网站，转载时请务必保留以下作者信息和链接</span><br />作者:Chris Hardin;mycj(作者的blog:http://blog.matrix.org.cn/page/mycj)<br />原文:http://www.onjava.com/pub/a/onjava/2006/03/29/maven-2-0.html<br />Matrix:http://www.matrix.org.cn/resource/article/44/44475_Maven2.html<br />关键字:Maven2<br /><br /><span style="FONT-SIZE: 16px">Maven2.0的优点</span><br /><br />Maven2.0有许多很好功能，这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java项目，并且想使该项目快速地开展下去，Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点：<br />--标准的项目布局和项目结构生成器<br />--标准的依赖管理机制<br />--多项目支持<br />--在开发者需要的时候及时地下载新的插件和功能部件<br />--生成最新项目信息的网站<br />--集成了源代码控制软件：CVS和Subversion<br /><br />以上列表展示的只是Maven2.0特点中的一小部分。但这足以使Maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道Maven是个什么东西了，接下来让我们看看如何使用它。<br /><br /><span style="FONT-SIZE: 16px">入门</span><br /><br />我们要做的第一件事情就是设置目录结构，但这并不需要让我们手动设置，Maven会根据您开发的项目类型来为您做这件事。一旦您下载并解压了最新发布的Maven 2.0，您应该将Maven所在目录下面的bin目录添加到您的系统路径下。您可以运行命令mvn -version来测试您的安装。<br /><br />既然已经安装上了工具，让我们看看创建一个简单的Java项目的例子。Maven使用原型来决定目录结构是如何展现的。Maven自带了几个内建的原型，您也可以自定义原型。<br /><br /><span style="COLOR: blue">mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app</span><br /><br />您看，这就生成了我们的项目布局。<br />my-app<br />----src<br />    ----main<br />        ----java<br />           ----com<br />               ----oreilly<br />    ----test<br />        ----java<br />            ----com<br />                ----oreilly<br /><br />对，就这么简单。这种目录结构可以通过创建一个新的原型来覆写，但并不推荐这么做，因为Maven的一个优点就是使用标准的目录结构。该目录结构包含两个源代码树，一个是Java应用程序的源代码，另一个是单元测试代码。同时您也许会注意到，当第一次运行Maven的时候，它会进行一些下载工作。当您开始调用工具时，Maven会根据您使用的插件来更新自身的一些所需功能。Maven默认会从Ibiblio存储库中得到更新。您可以在Maven安装目录下的conf目录中，或者项目自身中修改Maven远程存储库的选择。<br />您会发现Maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部分。pom.xml文件包含了一组指令，这些指令告诉Maven如何构建项目和包含哪些其它的特殊指令（POM是“项目对象模型”的缩写）。在默认的情况下，Maven包含了JUnit的依赖以此来鼓励单元测试。<br /><br /></p><pre class="overflow">&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />  &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />  &lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />  &lt;packaging&gt;jar&lt;/packaging&gt;<br />  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />  &lt;name&gt;Maven Quick Start Archetype&lt;/name&gt;<br />  &lt;url&gt;http://maven.apache.org&lt;/url&gt;<br />  &lt;dependencies&gt;<br />    &lt;dependency&gt;<br />      &lt;groupId&gt;junit&lt;/groupId&gt;<br />      &lt;artifactId&gt;junit&lt;/artifactId&gt;<br />      &lt;version&gt;3.8.1&lt;/version&gt;<br />      &lt;scope&gt;test&lt;/scope&gt;<br />    &lt;/dependency&gt;<br />  &lt;/dependencies&gt;<br />&lt;/project&gt;</pre><br /><p><br /><br />创建完项目后，我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。<br />--mvn test：运行应用程序中的单元测试<br />--mvn package：依据项目生成jar文件<br />--mvn install：将项目的jar文件添加到库中，&amp;#61548;        以备依赖此项目时使用<br />--mvn site：生成项目相关信息的网站<br />--mvn clean：清除目标目录中的生成结果<br />--mvn eclipse:eclipse：生成Eclipse项目文件<br /><br />接下来我们看看稍微复杂点的地方，我们知道手动开始一个Java web项目比手动开始一个简单的Java项目更耗时，然而Maven的使用则能化难为易。下面的例子（实际上是一行命令）展现了项目结构的构造。<br /><span style="COLOR: blue">mvn archetype:create -DgroupId=com.oreilly<br />    -DartifactId=Oreilly<br />    -DarchetypeArtifactId=maven-archetype-webapp</span><br /><br />生成的结果结构如下所示：<br />Oreilly<br />----src<br />    ----main<br />        ----resources<br />        ----webapp<br />            ----WEB-INF<br /><br />这一次，我们的项目由于支持了将包含在war文件中的web资源而设置有所不同。pom.xml文件中将包含一行来表明项目应该被打包成war文件：&lt;packaging&gt;war&lt;/packaging&gt;。现在就可以使用mvn package命令来生成war文件。不用担心如何从WEB-INF/lib目录中得到依赖项，在依赖属性值被设置成compile的情况下，Maven会自动包含依赖项。也可以将以下代码添加到pom.xml文件中来改变war文件的名称：<br /></p><pre class="overflow">&lt;build&gt;<br />    &lt;finalName&gt;PromoteC&lt;/finalName&gt;<br /> &lt;/build&gt;</pre><br /><p><br /><br /><span style="FONT-SIZE: 16px">依赖管理</span><br /><br />创建好项目结构，添加完一些代码，测试并编译好应用程序后，接下来可以看看Maven是如何处理依赖关系的。为了给项目添加一个依赖项，必须将此依赖项添加到pom.xml文件中。下次运行Maven的时候，它将从Ibiblio存储库中得到这个依赖项，并且将此依赖项添加到项目构建路径中。<br /><br />关于依赖的问题有几个重要的事情值得注意。在写这篇文章的时候，Maven中最大的麻烦之处就是不能从Maven存储库中获取Sun的jar文件。这个问题归因于Sun在其代码中设置的许可证限制。解决这个问题的办法有两种，一种是下载这些代码并将它们安装在您本地的存储库中，另一种是做一个外部声明，并将这个声明指向文件系统中依赖项所在的位置。希望Sun能够尽早地创建自己的存储库，尽管如此，Maven也会被升级来使之能够下载这些资源，只是在下载之前它会提示用户接受许可证协议。<br /><br />另外一个麻烦的地方就是有时候使用的最新的库文件可能在远程存储库中不存在。另一种可能是由于无法访问Internet，需要所有的依赖项都能在本地获取。这些问题的最好解决方案就是将jar文件安装到本地的存储库中。将本地的存储库放在一台web服务器上也同样是个便利之举，这样整个开发团队就能从此获益，每个人都没有必要去管理自己的存储库了。改变Maven的存储库路径只需简单地编辑其安装目录下conf文件夹下面的settings.xml文件即可。<br /><br />在Maven中使用依赖是简单的。让我们看看往上述pom.xml文件中添加一个依赖项的情况。我们虽然已经使用了JUnit，但让我们将功能强大的Quartz库添加到项目中。Quartz是一款用纯Java编写的关于时间安排的开源项目，它是您时间安排需求方面的很好的选择。<br /></p><pre class="overflow">&lt;dependency&gt;<br />   &lt;groupId&gt;quartz&lt;/groupId&gt;<br />   &lt;artifactId&gt;quartz&lt;/artifactId&gt;<br />   &lt;version&gt;1.5.1&lt;/version&gt;<br />   &lt;scope&gt;compile&lt;/scope&gt;<br /> &lt;/dependency&gt;</pre><br /><p><br /><br />我们仅仅只需添加&lt;dependencies&gt;这个元素，Maven就能下载Quartz并将其作为项目中的一个依赖项。不用担心Quartz的依赖项，一个Maven的存储库将包含依赖项自身依赖的资源信息，当Maven下载Quartz的时候，它自身的依赖资源也同样会被下载。为了验证版本为1.5.1的Quartz存在于Ibiblio库中，我们可以浏览Maven存储库。注意到scope参数的使用，它告诉了Maven依赖项在何种阶段是所需的。在使用JUnit的情况下，我们设置scope参数的值为test来告诉Maven这个依赖项只是在测试阶段所需的，而不是运行时所需的资源。以下是scope参数值的说明：<br />--compile：默认值。表明是所有任务所需的资源<br />--test：运行所有的测试用例时所需资源<br />--runtime：表明是运行时所需资源<br />--provided：JDK部分或应用服务器的classpath所需的资源<br /><br />现在，如何处理那些麻烦的Sun的jar包和那些需要但却不能在远程存储库中找到的jar包了？我们必须使用Maven来手动将这些jar包安装到本地的存储库中。不用担心，这没有听上去那么困难。为了做个示例，我们将安装Java Activation框架的jar包。首先我们必须从Sun的站点上下载此jar包，接着我们使用Maven将它导入本地的存储库中。您自己也可以按照Maven上传资源指南中的指导将缺少的jar包安装到Ibiblio中。<br /><span style="COLOR: blue">mvn install:install-file -Dfile=activation.jar<br />    -DgroupId=javax.activation -DartifactId=activation<br />    -Dversion=1.0 -Dpackaging=jar</span><br /><br />现在，新的jar包就像其它的项目依赖项一样安装到了本地存储库中。在只需添加依赖声明后，我们就已准备就绪了。在添加jar包和声明它们为依赖项时，必须确保版本信息的正确性。版本的不匹配会导致Maven在寻找资源时的失败。在导入Sun的jar包时，如果您需要寻求标准命名参数的帮助，可以参考Sun标准jar包命名。记住，在目前您不能通过存储库来公开发布这些jar包，这将违反Sun的使用条款。<br /></p><pre class="overflow">&lt;dependency&gt;<br />   &lt;groupId&gt;javax.activation&lt;/groupId&gt;<br />   &lt;artifactId&gt;activation&lt;/artifactId&gt;<br />   &lt;version&gt;1.0&lt;/version&gt;<br />   &lt;scope&gt;compile&lt;/scope&gt;<br /> &lt;/dependency&gt;</pre><br /><p><br /><br />您或许想将依赖项存入一个源代码控制器的库中，源代码控制器决不能执行这个任务。依赖项是经常变化的，并且通常有一套数字方案来标明其版本。这就是说，您明确地希望有一个内部远程存储库的备份，如果您有一个，这将确保在存储库服务器崩溃并且不能恢复的情况下，您不会丢失所有的自定义资源。不将依赖项放入源代码控制器中也会节省源代码控制器的存储库服务器上的大量磁盘空间。<br /><br /><span style="FONT-SIZE: 16px">配置存储库</span><br /><br />要求项目的每个开发者必须在conf目录中配置存储库是不方便的，所以Maven可以同时查看多个存储库并且将它们全部配置在pom.xml文件中。让我们看看一个例子，它展示了如何在应用程序用使用多个存储库。在以下从pom.xml文件摘录的片断中，我们设置了两个存储库来让Maven寻找依赖项。Ibiblio一直是默认的存储库，我们又添加了Planet Mirror作为后援存储库。我们也可以让团队使用的本地web服务器作为第二个存储库。<br /></p><pre class="overflow">&lt;repositories&gt;<br />    &lt;repository&gt;<br />      &lt;id&gt;Ibiblio&lt;/id&gt;<br />      &lt;name&gt;Ibiblio&lt;/name&gt;<br />      &lt;url&gt;http://www.ibiblio.org/maven/&lt;/url&gt;<br />    &lt;/repository&gt;<br />    &lt;repository&gt;<br />      &lt;id&gt;PlanetMirror&lt;/id&gt;<br />      &lt;name&gt;Planet Mirror&lt;/name&gt;<br />      &lt;url&gt;http://public.planetmirror.com/pub/maven/&lt;/url&gt;<br />    &lt;/repository&gt;<br />  &lt;/repositories&gt;</pre><br /><p><br /><br /><span style="FONT-SIZE: 16px">使用pom.xml父文件来构建多个项目</span><br /><br />软件公司通常的一种做法就是将多个项目构建到主要产品中。维护依赖关系链和一次性地构建整个产品足以成为一个挑战，但是如果使用Maven的话，事情将变得简单。如果您创建了一个指向其它子模块的pom.xml父文件，Maven将为您处理整个构建过程。它将分析每个子模块的pom.xml文件，并且按照这些子模块的相互依赖顺序来构建项目。如果每个项目明确地指明它们的依赖项，那么子模块在父文件中的放置顺序是不造成任何影响的。但是考虑到其他的开发者，最好保证子模块在pom.xml父文件中的放置顺序和您期望的子项目被构建的顺序一样。下面我们看个示例。<br />pom.xml主文件如下：<br /></p><pre class="overflow">&lt;project&gt;<br />  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />  &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />  &lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />  &lt;packaging&gt;pom&lt;/packaging&gt;<br />  &lt;modules&gt;<br />    &lt;module&gt;Common&lt;/module&gt;<br />    &lt;module&gt;Utilities&lt;/module&gt;<br />    &lt;module&gt;Application&lt;/module&gt;<br />     &lt;module&gt;WebApplication&lt;/module&gt;<br />  &lt;/modules&gt;<br />&lt;/project&gt;</pre><br /><p><br /><br />我们需要确保WebApplication子模块包含了所有的三个jar包，所以需要将这些jar包声明为依赖项。在这个例子中，Utilities项目依赖于Common项目，所以Utilities项目中需要添加一个对Common项目的依赖。Application子模块也是同样的道理，因为它依赖于Common和Utilities项目，Utilities又赖于Common。如果这个例子中有60个子模块，并且它们都相互依赖，这会使得新开发者难以算出什么项目依赖于其它项目，所以这正好是要求确保pom.xml父文件中项目放置顺序要清除的原因。<br /><br />以下是Utility模块的依赖项：<br /></p><pre class="overflow">&lt;dependencies&gt;<br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />      &lt;artifactId&gt;Common&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />    &lt;/dependency&gt;<br />  &lt;/dependencies&gt;</pre><br /><p><br /><br />以下是如何声明Application模块的依赖项：<br /></p><pre class="overflow">&lt;dependencies&gt;<br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />      &lt;artifactId&gt;Common&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />    &lt;/dependency&gt;<br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />      &lt;artifactId&gt;Utilities&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />    &lt;/dependency&gt;<br />  &lt;/dependencies&gt;</pre><br /><p><br /><br />最后是WebApplication模块的依赖项：<br /></p><pre class="overflow">&lt;dependencies&gt;<br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />      &lt;artifactId&gt;Common&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />    &lt;/dependency&gt;<br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />      &lt;artifactId&gt;Utilities&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />    &lt;/dependency&gt;<br />    <br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />      &lt;artifactId&gt;Application&lt;/artifactId&gt;<br />      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />    &lt;/dependency&gt;<br />    <br /> &lt;/dependencies&gt;</pre><br /><p><br /><br />现在，我们只需为每个子模块的pom.xml文件添加一个元素来表明它们是一个逻辑构建的一部分：<br /></p><pre class="overflow">&lt;parent&gt;<br />    &lt;groupId&gt;com.oreilly&lt;/groupId&gt;<br />    &lt;artifactId&gt;my-app&lt;/artifactId&gt;<br />    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />  &lt;/parent&gt;</pre><br /><p><br /><br />在pom.xml父文件所在的同一个目录中，存在有项目目录：Common, Utilities, Application, 和WebApplication。当我们在该目录中运行mvn package命令时，这些项目会按照依赖顺序而被构建。<br /><br /><span style="FONT-SIZE: 16px">插件和报表</span><br /><br />Maven2.0有大量的插件可以使用。不幸的是，由于Maven的重写，Maven1.0的插件不能在2.0中使用。尽管如此，还是存在一些可以使用的Maven2.0的插件。下面pom.xml文件中的插件配置示例是直接从Maven2.0网站上得来的。这个插件是用来配置编译选项的。<br /></p><pre class="overflow">&lt;plugins&gt;<br />    &lt;plugin&gt;<br />      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />      &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />      &lt;configuration&gt;<br />        &lt;source&gt;1.5&lt;/source&gt;<br />        &lt;target&gt;1.5&lt;/target&gt;<br />      &lt;/configuration&gt;<br />    &lt;/plugin&gt;<br />  &lt;/plugins&gt;</pre><br /><p><br /><br />Maven报表插件可以用来生成不同的报表，这些报表是在当你使用mvn site命令生成项目的站点时产生的。下面的例子展示了如何使用&lt;reporting&gt;元素来配置这类插件中的一个。<br /></p><pre class="overflow">&lt;reporting&gt;<br />    &lt;plugins&gt;<br />      &lt;plugin&gt;<br />        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />        &lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;<br />      &lt;/plugin&gt;<br />    &lt;/plugins&gt;<br />  &lt;/reporting&gt;</pre><br /><p><br /><br />Maven Plugin Matrix是一个十分实用的工具，它能给出哪些Maven插件适合于哪些版本的Maven。<br /><br /><span style="FONT-SIZE: 16px">Maven 和 Eclipse</span><br /><br />如何能使全世界最好的IDE变得更好了？答案是使用Maven2的插件，它能帮助您寻找依赖项并自动地将它们添加到pom.xml文件中。虽然最好的方法是首先使用Maven来创建您的项目，然后再用命令mvn eclipse:eclipse来生成Eclipse项目文件，这样最初就能得到一个好的目录结构，但Maven也可通过其Eclipse插件来管理任何项目。<br /><br />您可以在Eclipse自身的升级器中输入站点http://m2eclipse.codehaus.org/来安装插件。在安装完成并重启IDE后，您需要在Eclipse的参数选项中配置此插件，设置本地存储库的位置。这是很重要的一步，因为如果Eclipse默认的存储库不能匹配您默认的需求，Maven会重新下载您的依赖项。配置完成后，将项目导入Eclipse，鼠标右击该项目，选择Maven 2 -&gt; Enable。现在您可以回到之前的步骤，您可以有更多的选项比如添加依赖项，这将弹出一个搜索框，您可以搜索依赖项并添加它们，插件会替你编辑pom.xml文件。<br /><br />插件会使用Maven来构建您的项目，就像Eclipse使用Ant来构建项目一样。如果您想获取更多的关于Eclipse整合Maven的信息，可以查阅Maven站点上的Eclipse集成Maven 2.x使用指南。<br /><br />另一方面，如果您是一个IntelliJ使用爱好者，您也能通过运行指令mvn idea:idea来完成同样的任务。这些IDE        工具能够节省开发人员的时间。例如，如果一个开发人员为一个项目添加了一些特征，团队里的其他开发人员只需从源代码控制器的存储库中重新获取项目文件即可，这就节省了每个开发人员必须配置IDE的时间。<br /><br /><span style="FONT-SIZE: 16px">结论</span><br /><br />Maven2.0有着许多实用的特点，并且完成任务十分出色。Maven中最值得称赞的地方就是使用了标准的目录结构和部署。这就使得开发人员能够适应不同的项目，并且不用学习任何结构方面新的东西，也不用掌握特殊的指令来构建结构。Maven可以通过纯脚本来实现。在文档方面，由于使用了项目站点构建工具，所以当项目构建完成后，您可以查看所有开发的当前状态。<br /><br />毫无疑问，当提到构建配置的伸缩性，易用性和项目管理方面时，Maven2.0足可以将Ant取而代之。在接下来的几年内，我们将看到Maven作为标准构建技术更多的使用，直到有人带来了大家公认的“高级捕鼠器”。您可以从下面列出的Maven项目站点上下载Maven。<br /><br />资源<br />Matrix:http://www.matrix.org.cn<br />Onjava:http://www.onjava.com<br />Maven项目站点<br /></p><br /><p>Chris Hardin 是McLeod软件公司的高级Java工程师。</p><img src ="http://www.blogjava.net/esoa/aggbug/94701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/esoa/" target="_blank">comchyi</a> 2007-01-18 17:01 <a href="http://www.blogjava.net/esoa/articles/94701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant链接</title><link>http://www.blogjava.net/esoa/articles/82328.html</link><dc:creator>comchyi</dc:creator><author>comchyi</author><pubDate>Mon, 20 Nov 2006 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/esoa/articles/82328.html</guid><wfw:comment>http://www.blogjava.net/esoa/comments/82328.html</wfw:comment><comments>http://www.blogjava.net/esoa/articles/82328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/esoa/comments/commentRss/82328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/esoa/services/trackbacks/82328.html</trackback:ping><description><![CDATA[1.http://www.water-season.com/forum/viewthread.php?tid=2242（ Ant使用指南（一））<br />2.http://jiter.spaces.live.com（ANT学习笔记）<br />3.http://www.chinageren.com/jc/HTML/114423.html（Ant介绍以及基本使用指南）<br />4.http://blog.51766.com/comments/zsc/Weblog/1141058307404（ANT学习笔记<br />）<img src ="http://www.blogjava.net/esoa/aggbug/82328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/esoa/" target="_blank">comchyi</a> 2006-11-20 17:00 <a href="http://www.blogjava.net/esoa/articles/82328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>