﻿<?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-lcs868-文章分类-maven2</title><link>http://www.blogjava.net/lcs868/category/36668.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 15 Dec 2008 23:23:24 GMT</lastBuildDate><pubDate>Mon, 15 Dec 2008 23:23:24 GMT</pubDate><ttl>60</ttl><item><title>用maven搭建struts2+spring+hibernate</title><link>http://www.blogjava.net/lcs868/articles/246467.html</link><dc:creator>lcs868</dc:creator><author>lcs868</author><pubDate>Mon, 15 Dec 2008 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/lcs868/articles/246467.html</guid><wfw:comment>http://www.blogjava.net/lcs868/comments/246467.html</wfw:comment><comments>http://www.blogjava.net/lcs868/articles/246467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lcs868/comments/commentRss/246467.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lcs868/services/trackbacks/246467.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt"><br />
今天抽空练习下用maven2+myeclipse搭建一个ssh框架，把搭建过程简单记录一下，以便以后方便查阅<br />
1.准备工作：jdk1.6，maven2.0.9，myeclipse6.0.1，mysql数据库<br />
<br />
2.jdk的安装配置，以及maven2在eclipse里的配置网上的例子很多就不在重复<br />
<br />
3.用m2搭建主项目工程s2shdemo，在myeclipse中点击new-other-maven project-create a simple project输入groupId,ArtifactId,在这里别的地方都可以根据自己的爱好填写，但打包方式packaging必须选择pom选项。点下一步后点击完成即可。<br />
<br />
4.完成web层：我在这里用的是m2的命令行搭建一个web工程，进入cmd运行如下命令：<br />
mvn archetype:create -DgroupId=<span style="color: #ff9900">com.lcsssh.web.action </span>-DartifactId=<span style="color: #ff9900">s2shdemo</span> -DarchetypeGroupId=org.apache.struts -DarchetypeArtifactId=struts2-archetype-starter -DarchetypeVersion=2.0.11.2-SNAPSHOT -DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository&nbsp; <br />
其中有标志的地方可以根据自己需要修改，这样一个struts2和spring的web工程就搭建成功。<br />
5.完成service层：在myeclipse中选择file-other-maven module填写module name并选择父工程，也就是第3部你所建立起来的工程。进入下一步就如第三步一样填写所需选项，记住这里packaging应选择jar或其他不能用pom。<br />
<br />
6.如第五步搭建dao层。<br />
<br />
7.整合：以上步骤完成后开始配置，我把配置有关的文件全部放到web模块下的resources目录下<br />
&nbsp;&nbsp;&nbsp; 配置web.xml文件，加入如下代码<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp; <br />
&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"&nbsp;&nbsp; <br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&nbsp;&nbsp; <br />
&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;display-name&gt;s2shdemo&lt;/display-name&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;distributable /&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;context-param&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;param-value&gt;classpath:applicationContext.xml&lt;/param-value&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/context-param&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;listener&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/listener&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;struts&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-name&gt;actionPackages&lt;/param-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-value&gt;cn.allwap.backend.action&lt;/param-value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;servlet&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;servlet-name&gt;dwr&lt;/servlet-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/servlet&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;filter&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;openSession&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter-class&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-name&gt;singleSession&lt;/param-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-value&gt;false&lt;/param-value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.ActionContextCleanUp&lt;/filter-class&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/init-param&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;openSession&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;servlet-name&gt;dwr&lt;/servlet-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/servlet-mapping&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;filter-name&gt;struts&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;!-- Spring 刷新Introspector防止内存泄露 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;listener&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;org.springframework.web.util.IntrospectorCleanupListener&lt;/listener-class&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/listener&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- session超时定义,单位为分钟 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;session-config&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;session-timeout&gt;10&lt;/session-timeout&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/session-config&gt; <br />
&nbsp;&lt;welcome-file-list&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/welcome-file-list&gt;&nbsp;&nbsp; <br />
&lt;/web-app&gt;&nbsp;&nbsp; <br />
配置web action applicationContext-action.xml文件<br />
</span>
<p><span style="font-size: 10pt">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="font-size: 10pt">&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;xmlns:aop="http://www.springframework.org/schema/aop"<br />
&nbsp;&nbsp;xmlns:tx="http://www.springframework.org/schema/tx"<br />
&nbsp;&nbsp;xsi:schemaLocation="<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&gt;</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="helloWorldAction" class="com.lcsssh.web.action.HelloWorldAction"&nbsp; scope="prototype"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="adminInfoAction" class="com.lcsssh.web.action.AdminInfoAction"&nbsp; scope="prototype"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;property name="adminInfoServiceImpl" ref="adminInfoServiceImpl"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&lt;/beans&gt;<br />
</span></p>
<span style="font-size: 10pt">配置业务层applicationContext-service.xml文件<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp; <br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"&nbsp;&nbsp; <br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&nbsp;&nbsp; <br />
&nbsp;xmlns:lang="http://www.springframework.org/schema/lang"&nbsp;&nbsp; <br />
&nbsp;xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd"&nbsp;&nbsp; <br />
&nbsp;default-autowire="byName"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;bean id="adminInfoServiceImpl" class="com.lcsssh.service.impl.AdminInfoServiceImpl" scope="prototype"&gt;<br />
&nbsp; &nbsp;&lt;property name="adminInfoDAO" ref="adminInfoDAO"&gt;&lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;&nbsp; <br />
&lt;/beans&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
配置dao 层applicationContext-dao.xml文件<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp; <br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"&nbsp;&nbsp; <br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&nbsp;&nbsp; <br />
&nbsp;xmlns:lang="http://www.springframework.org/schema/lang"&nbsp;&nbsp; <br />
&nbsp;xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd"&nbsp;&nbsp; <br />
&nbsp;default-autowire="byName"&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;bean id="adminInfoDAO" class="com.lcsssh.dao.impl.AdminInfoDAO"&gt;<br />
&nbsp; &nbsp;&lt;property name="sessionFactory"&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;ref bean="sessionFactory"/&gt;<br />
&nbsp; &nbsp;&lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&lt;/beans&gt;<br />
配置application.xml<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp; <br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"&nbsp;&nbsp; <br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&nbsp;&nbsp; <br />
&nbsp;xmlns:lang="http://www.springframework.org/schema/lang"&nbsp;&nbsp; <br />
&nbsp;xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd"&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="driverClassName"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="url"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;jdbc:mysql://localhost/test&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="username"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;user&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="password"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;123456&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="maxActive"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;20&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="maxIdle"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;5&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="maxWait"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;-1&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="defaultAutoCommit"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="dataSource"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;ref local="dataSource" /&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="mappingDirectoryLocations"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;list&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;classpath:com/lcsssh/bo&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/list&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="hibernateProperties"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;props&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.show_sql"&gt;false&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.cglib.use_reflection_optimizer"&gt;true&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.cache.use_query_cache"&gt;true&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/props&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!-- dao object defintions --&gt;<br />
&nbsp; &lt;import resource="applicationContext-dao.xml"&gt;&lt;/import&gt;<br />
&nbsp; &lt;!-- business object defintions --&gt;<br />
&nbsp; &lt;import resource="applicationContext-service.xml"&gt;&lt;/import&gt;<br />
&nbsp; &lt;!-- web action object defintions --&gt;<br />
&nbsp; &lt;import resource="applicationContext-action.xml"&gt;&lt;/import&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;bean id="transactionManager"&nbsp;&nbsp; <br />
&nbsp; class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="sessionFactory"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;ref bean="sessionFactory" /&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&lt;bean id="transactionInterceptor"&nbsp;&nbsp; <br />
&nbsp; class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="transactionManager" ref="transactionManager"&gt;&lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="transactionAttributes"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;props&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="add*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="set*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="update*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="delete*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="register"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="find*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="valid*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/props&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&lt;bean&nbsp;&nbsp; <br />
&nbsp; class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="beanNames"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;*Service&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="interceptorNames"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;value&gt;transactionInterceptor&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&lt;bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property name="transactionInterceptor" ref="transactionInterceptor"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp;&nbsp;<br />
&lt;/beans&gt;&nbsp; <br />
所有配置文件配置完成。然后在父工程pom.xml下加入第4步创建的web模块工程，主要代码如下所示<br />
&lt;modules&gt;<br />
&nbsp;&nbsp;&lt;module&gt;webProject&lt;/module&gt;<br />
&nbsp;&nbsp;&lt;module&gt;serviceProject&lt;/module&gt;<br />
&nbsp;&nbsp;&lt;module&gt;daoProject&lt;/module&gt;<br />
&nbsp;&lt;/modules&gt;<br />
好了，到此为止所有的配置完成<br />
<br />
8.根据数据库表生成dao 层代码，用myeclipse的生成工具生成即可。另外工程中所有依赖包都在web工程下的pom.xml中<br />
为了节省篇幅，没有截图，希望大家体谅，本人水平有限，有不当之处敬请包含！！！<br />
代码下载地址：<font size="2">http://www.blogjava.net/Files/lcs868/s2shdemo.zip</font></span> 
<img src ="http://www.blogjava.net/lcs868/aggbug/246467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lcs868/" target="_blank">lcs868</a> 2008-12-15 17:50 <a href="http://www.blogjava.net/lcs868/articles/246467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2 的新特性</title><link>http://www.blogjava.net/lcs868/articles/245924.html</link><dc:creator>lcs868</dc:creator><author>lcs868</author><pubDate>Fri, 12 Dec 2008 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/lcs868/articles/245924.html</guid><wfw:comment>http://www.blogjava.net/lcs868/comments/245924.html</wfw:comment><comments>http://www.blogjava.net/lcs868/articles/245924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lcs868/comments/commentRss/245924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lcs868/services/trackbacks/245924.html</trackback:ping><description><![CDATA[<blockquote><span style="font-size: 8pt">&nbsp;
<blockquote>本文主要阐述 Maven2 的新特性，这些新特性可以大大地缩短了开发管理中的工作量，使得开发人员将精力集中在实际的业务问题上。</blockquote><!--start RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--end RESERVED FOR FUTURE USE INCLUDE FILES-->
<p>Maven 出现到现在也有很长时间了，初识它的感觉至今仍清晰的印在脑海中。现在想来，当时从 Ant 移情 Maven 的想法其实很朴素，就是因为 Maven 可以以网站的形式展现与项目相关的信息，如开发人员列表、各种 Report。这种方式为项目的构建带来了极大的方便，尤其是 Report 的。试想对于产生的 Junit-Report、JavaDoc、CheckStyle、PMD 等报告，如果没有一个统一的入口，每次切换目录是多么令人厌烦的事情！</p>
<p>Maven 无疑是相当成功的，这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven 取得成功的原因很简单：在简化构建脚本的同时，功能并没有缩水，反而有所增强；提供汇集项目信息的工具，并以相当友好的方式呈现；丰富的插件简化了工作。如此有力的工具出现，自然是争相使用。</p>
<p><a name="N1005E"><span class="atitle">新特性</span></a></p>
<p>如今 Maven2 已经推出，Maven 的官方网站称，Maven2 相对于 Maven1 是一个相当大的转变，甚至不惜牺牲兼容性来达到这一目的。（为了 Maven1 的用户着想，Maven1 仍在继续他的使命。）如此大的变动到底换来了什么样的结果？</p>
<p><a name="N10067"><span class="smalltitle">1． 更快、更简单</span></a></p>
<p>比起 Maven1 那不急不慢的运行速度，Maven2在速度上有了质的飞跃，甚至与Ant相比也毫不逊色（当然，下载不算）。除此之外，"简化工作，使用业界公认的最佳实践"也是是 Maven2 的另一大主题，其他的新特性无处不在体现 Maven2 为简化工作而做出的努力。</p>
<p><a name="N10070"><span class="smalltitle">2． 更少的配置文件</span></a></p>
<p>Maven1 和 Maven2 主要配置文件的对比：</p>
<ul>
    <li>Maven1：project.xml、maven.xml、project.properties和build.properties。
    <li>Maven2：pom.xml和settings.xml。 </li>
</ul>
<p>POM是Maven的核心对象模型，在Maven2中POM已由project.xml转移到pom.xml中使用，版本也由3升级为4。对于项目，一般只需要pom.xml就行了。</p>
<p>在Maven2中不需要也不提倡使用maven.xml，原因如下：</p>
<ul>
    <li>plugin的易用性的增强。
    <li>散布于maven.xml中的内容难以在不同项目间共享，也不利于维护。在Maven2中建议使用自定义的plugin来封装这些内容。 </li>
</ul>
<p>如果仍期望能够使用类似maven.xml的功能，如&lt;preGoal&gt;，请参考<a href="http://docs.codehaus.org/display/MAVEN/Maven2+Goal+Decoration" cmimpressionsent="1">Inserting non-standard build steps using preGoals and postGoals。</a></p>
<p>在Maven2中，配置使用settings.xml，它取代了原有的project.properties和build.properties。配置在Maven2中存在两种级别：</p>
<ul>
    <li>用户级，针对操作系统登录用户而言。一般在$home/.m2/，对于windows用户，就是目录：C:\Documents and Settings\用户名\.m2\settings.xml。
    <li>全局级：一般在%M2_HOME%/conf/settings.xml，M2_HOME是Maven2的根目录环境变量名。 </li>
</ul>
<p>在settings.xml中可以配置，如本地Repository、proxy等等，关于settings.xml的结构可以从Maven的官方网站上获取。</p>
<p><a name="N100A6"><span class="smalltitle">3． Plugin语言更换</span></a></p>
<p>在Maven2中，编写plugin的语言由jelly变更为Java和BeanShell。Java在速度上更有优势，而且开发人员的熟悉程度更高。对于其他的流行脚本，如groovy，Maven的官方网站的意见是，等待其更成熟时再考虑</p>
。
<p><a name="N100AF"><span class="smalltitle">4． 提供预定义的目录模板</span></a></p>
<p>好的目录结构可以使开发人员更容易理解项目，为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构，为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下：</p>
<br />
<img height="581" alt="" src="http://www.ibm.com/developerworks/cn/opensource/os-maven2/images/table1.gif" width="319" border="0" /> <br />
<p>使用目录模板，可以使pom.xml更简洁。因为Maven2已经根据缺省目录，预定义了相关的动作，而无需人工的干预。以resources目录为例：</p>
<ul>
    <li>src/main/resources，负责管理项目主体的资源。在使用Maven2执行compile之后，这个目录中的所有文件及子目录，会复制到target/classes目录中，为以后的打包提供了方便。
    <li>src/test/resources，负责管理项目测试的资源。在使用Maven2执行test-compile之后，这个目录中的所有文件及子目录，会复制到target/test-classes目录中，为后续的测试做好了准备。 </li>
</ul>
<p>这些动作在 Maven1 中，是需要在 maven.xml 中使用&lt;preGoal&gt;或&lt;postGoal&gt;来完成的。如今，完全不需要在pom.xml中指定就能够自动完成。在src和test都使用resources，方便构建和测试，这种方式本就已是前人的经验。通过使用Maven2，使这个经验在开发团队中得到普及。</p>
<p>创建标准目录模板，可以通过如下命令：</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>groupId和artifactId的含义与Maven1中的含义一样，参数artifactId的值会作为项目根目录的名字。除了建立相应的目录之外，Maven2还会创建缺省的pom.xml。</p>
<p>Maven2也考虑到：不同类型的项目需要拥有不同的目录结构。如创建web项目，可以使用命令：</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mvn archetype:create -DgroupId=com.mycompany.app
            -DartifactId=my-webapp
            -DarchetypeArtifactId=maven-archetype-webapp
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><a name="N100F3"><span class="smalltitle">5． 生命周期的引入</span></a></p>
<p>在Maven2中有了明确的生命周期概念，而且都提供与之对应的命令，使得项目构建更加清晰明了。主要的生命周期阶段：</p>
<ul>
    <li>validate，验证工程是否正确，所有需要的资源是否可用。
    <li>compile，编译项目的源代码。
    <li>test-compile，编译项目测试代码。
    <li>test，使用已编译的测试代码，测试已编译的源代码。
    <li>package，已发布的格式，如jar，将已编译的源代码打包。
    <li>integration-test，在集成测试可以运行的环境中处理和发布包。
    <li>verify，运行任何检查，验证包是否有效且达到质量标准。
    <li>install，把包安装在本地的repository中，可以被其他工程作为依赖来使用
    <li>deploy，在整合或者发布环境下执行，将最终版本的包拷贝到远程的repository，使得其他的开发者或者工程可以共享。
    <li>generate-sources，产生应用需要的任何额外的源代码，如xdoclet。 </li>
</ul>
<p>如果要执行项目编译，那么直接输入：mvn compile即可，对于其他的阶段可以类推。阶段之间是存在依赖关系（dependency）的，如test依赖test-compile。在执行mvn test时，会先运行mvn test-compile，然后才是mvn test。</p>
<p><a name="N10120"><span class="smalltitle">6． 新增Dependency Scope</span></a></p>
<p>在POM 4中，&lt;dependency&gt;中还引入了&lt;scope&gt;，它主要管理依赖的部署。目前&lt;scope&gt;可以使用5个值：</p>
<ul>
    <li>compile，缺省值，适用于所有阶段，会随着项目一起发布。
    <li>provided，类似compile，期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    <li>runtime，只在运行时使用，如JDBC驱动，适用运行和测试阶段。
    <li>test，只在测试时使用，用于编译和运行测试代码。不会随项目发布。
    <li>system，类似provided，需要显式提供包含依赖的jar，Maven不会在Repository中查找它。 </li>
</ul>
<p>&lt;scope&gt;的使用举例：</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">&lt;dependency&gt;
            &lt;groupId&gt;hibernate&lt;/groupId&gt;
            &lt;artifactId&gt;hibernate&lt;/artifactId&gt;
            &lt;version&gt;3.0.3&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
            &lt;/dependency&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><a name="N10147"><span class="smalltitle">7． 传递依赖，简化依赖管理</span></a></p>
<p>在Maven1中，需要把依赖所需要的包也一并列出。这对于使用类似如Hibernate的用户来说所操的心太多了，而且也不方便。在Maven2中实现了传递依赖，如此对于Hibernate所依赖的包，Maven2会自动下载，开发人员只需关心Hibernate即可。</p>
<p>注意：只有得到Maven支持的依赖，通常是plugin形式出现，才能获得这个特性。而且对于一些老的plugin，可能由于时间的关系不支持传递依赖。如至少在Maven 2.0.1中，对于Hibernate 2.1.2，仍然需要显式列出Hibernate 2.1.2所依赖的包。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br />
                        </td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html#main" cmimpressionsent="1"><strong>回页首</strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="N10153"><span class="atitle">使用简介</span></a></p>
<p>安装Maven2的步骤非常简单：首先从Maven官方网站下载相应的软件包，目前是Maven 2.0.1；然后解压，并设置环境变量M2_HOME= Maven2的解压安装目录；最后将%M2_HOME%/bin添加到path中，方便Maven在任何目录下运行。</p>
<p>Maven2的运行命令是mvn，使用mvn -h可以获得相关的帮助信息。常用情形：</p>
<ul>
    <li>创建Maven项目：mvn archetype:create
    <li>编译源代码：mvn compile
    <li>编译测试代码：mvn test-compile
    <li>运行测试：mvn test
    <li>产生site：mvn site
    <li>打包：mvn package
    <li>在本地Repository中安装jar：mvn install
    <li>清除产生的项目：mvn clean </li>
</ul>
<p>或许是由于刚刚推出的缘故，Maven2目前还是有一些不尽如人意的地方。尤其是Report部分的plugin，有的是因为目前还没有，如junit-report。有的则是一些莫名其妙的问题，如checktyle和pmd，在本地locale下都无法正常工作。以pmd举例，在产生PMD报告时会抛出如下异常：</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">java.util.MissingResourceException: Can't find bundle for base name pmd-report,
            locale zh_CN
            at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle
            .java:839)
            at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:808)
            at java.util.ResourceBundle.getBundle(ResourceBundle.java:702)
            &#8230;&#8230;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>幸运的是，Maven2一出现就备受关注，要不了多长时间，诸如此类的问题应该就会很快解决。</p>
</span></blockquote>
<img src ="http://www.blogjava.net/lcs868/aggbug/245924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lcs868/" target="_blank">lcs868</a> 2008-12-12 13:05 <a href="http://www.blogjava.net/lcs868/articles/245924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2使用手册</title><link>http://www.blogjava.net/lcs868/articles/245923.html</link><dc:creator>lcs868</dc:creator><author>lcs868</author><pubDate>Fri, 12 Dec 2008 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/lcs868/articles/245923.html</guid><wfw:comment>http://www.blogjava.net/lcs868/comments/245923.html</wfw:comment><comments>http://www.blogjava.net/lcs868/articles/245923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lcs868/comments/commentRss/245923.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lcs868/services/trackbacks/245923.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 级别: 中级Sing Li (westmakaha@yahoo.com), 作家, Wrox Press2007 年 1 月 08 日现代软件项目不再是单个本地团队独立开发的产物。随着健壮的企业级开源组件的可用性日益提高，当今的软件项目需要项目团队间的动态协作，往往也需要混合使用在全球范围内创建和维护的组件。如今，Apache Maven 构建系统步入了第二代，它和由 Intern...&nbsp;&nbsp;<a href='http://www.blogjava.net/lcs868/articles/245923.html'>阅读全文</a><img src ="http://www.blogjava.net/lcs868/aggbug/245923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lcs868/" target="_blank">lcs868</a> 2008-12-12 12:57 <a href="http://www.blogjava.net/lcs868/articles/245923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2完全使用手册</title><link>http://www.blogjava.net/lcs868/articles/245920.html</link><dc:creator>lcs868</dc:creator><author>lcs868</author><pubDate>Fri, 12 Dec 2008 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/lcs868/articles/245920.html</guid><wfw:comment>http://www.blogjava.net/lcs868/comments/245920.html</wfw:comment><comments>http://www.blogjava.net/lcs868/articles/245920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lcs868/comments/commentRss/245920.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lcs868/services/trackbacks/245920.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: maven2 起步&nbsp;&nbsp;&nbsp; 相信maven1 大家都已经很熟悉了，具体maven能做什么，就不详细说了。个人觉得maven在开源项目中用的还是比较多的，公司内部，就不太清楚了。我以前的公司用过一段时间，不过后来就没有下文了。&nbsp;&nbsp;&nbsp; 与maven1 相比，maven2可算是几乎重写了，不过从速度来说应该更快。&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/lcs868/articles/245920.html'>阅读全文</a><img src ="http://www.blogjava.net/lcs868/aggbug/245920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lcs868/" target="_blank">lcs868</a> 2008-12-12 12:51 <a href="http://www.blogjava.net/lcs868/articles/245920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven使用手册</title><link>http://www.blogjava.net/lcs868/articles/245919.html</link><dc:creator>lcs868</dc:creator><author>lcs868</author><pubDate>Fri, 12 Dec 2008 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/lcs868/articles/245919.html</guid><wfw:comment>http://www.blogjava.net/lcs868/comments/245919.html</wfw:comment><comments>http://www.blogjava.net/lcs868/articles/245919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lcs868/comments/commentRss/245919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lcs868/services/trackbacks/245919.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt">来自:http://www.jieesoft.com/modules.php?name=News&amp;file=article&amp;sid=155</span></p>
<p><span style="font-size: 10pt">Maven和ANT是Apache 推出的大名鼎鼎的Build和工程管理工具，国内有人将他做了汉化工作，并推出了maven手册汉化工作，其中手册已经完工，对广大程序员可是一大帮助。</span><a href="http://http//maven.huangdong.com/"><span style="font-size: 10pt">进入该网站</span></a><span style="font-size: 10pt"> <br />
</span><a><span style="font-size: 10pt">用户手册</span></a><span style="font-size: 10pt"> </span></p>
<ol>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#关于手册"><span style="font-size: 10pt">关于手册</span></a><span style="font-size: 10pt"> <br />
    </span>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#简介"><span style="font-size: 10pt">简介</span></a><span style="font-size: 10pt"> <br />
    </span>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#项目对象模型"><span style="font-size: 10pt">项目对象模型</span></a><span style="font-size: 10pt"> <br />
    </span>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#POM_处理机制"><span style="font-size: 10pt">POM 处理机制</span></a><span style="font-size: 10pt"> </span>
    <ol>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#POM_插值机制"><span style="font-size: 10pt">POM 插值机制</span></a><span style="font-size: 10pt"> </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#POM_继承机制"><span style="font-size: 10pt">POM 继承机制</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用插件"><span style="font-size: 10pt">使用插件</span></a><span style="font-size: 10pt"> <br />
    </span>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#maven_xml文件"><span style="font-size: 10pt">maven.xml文件</span></a><span style="font-size: 10pt"> <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#简单的maven_xml例子"><span style="font-size: 10pt">简单的maven.xml例子</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#project节点"><span style="font-size: 10pt">project节点</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#目标"><span style="font-size: 10pt">目标</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#Jelly编程"><span style="font-size: 10pt">Jelly编程</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#Maven_配置"><span style="font-size: 10pt">Maven 配置</span></a><span style="font-size: 10pt"> <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#属性的处理机制"><span style="font-size: 10pt">属性的处理机制</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#插件的属性"><span style="font-size: 10pt">插件的属性</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#行为属性"><span style="font-size: 10pt">行为属性</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用代理"><span style="font-size: 10pt">使用代理</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用多个远程Repositories"><span style="font-size: 10pt">使用多个远程Repositories</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#项目设置"><span style="font-size: 10pt">项目设置</span></a><span style="font-size: 10pt"> <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#开始一个新项目"><span style="font-size: 10pt">开始一个新项目</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#构建"><span style="font-size: 10pt">构建</span></a><span style="font-size: 10pt"> <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#构建生命周期"><span style="font-size: 10pt">构建生命周期</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#在CVS中存放jar文件"><span style="font-size: 10pt">在CVS中存放jar文件</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#重载已声明的依赖包"><span style="font-size: 10pt">重载已声明的依赖包</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#使用SNAPSHOT依赖"><span style="font-size: 10pt">使用SNAPSHOT依赖</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#多项目构建和Reactor"><span style="font-size: 10pt">多项目构建和Reactor</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#离线构建"><span style="font-size: 10pt">离线构建</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#命令行选项介绍"><span style="font-size: 10pt">命令行选项介绍</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#测试"><span style="font-size: 10pt">测试</span></a><span style="font-size: 10pt"> <br />
    <br />
    <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#测试资源"><span style="font-size: 10pt">测试资源</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#运行一个单独的测试"><span style="font-size: 10pt">运行一个单独的测试</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#打包"><span style="font-size: 10pt">打包</span></a><span style="font-size: 10pt"> <br />
    <br />
    <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#JAR_资源"><span style="font-size: 10pt">JAR 资源</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#部署"><span style="font-size: 10pt">部署</span></a><span style="font-size: 10pt"> <br />
    <br />
    <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#固化SNAPSHOT依赖"><span style="font-size: 10pt">固化SNAPSHOT依赖</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#拷贝依赖JAR包"><span style="font-size: 10pt">拷贝依赖JAR包</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#命名约定"><span style="font-size: 10pt">命名约定</span></a><span style="font-size: 10pt"> <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#规则和指南"><span style="font-size: 10pt">规则和指南</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#项目"><span style="font-size: 10pt">项目</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#依赖"><span style="font-size: 10pt">依赖</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#发布多个包的项目"><span style="font-size: 10pt">发布多个包的项目</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    <br />
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#远程Repository布局"><span style="font-size: 10pt">远程Repository布局</span></a><span style="font-size: 10pt"> <br />
    </span>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#本地Repository布局"><span style="font-size: 10pt">本地Repository布局</span></a><span style="font-size: 10pt"> <br />
    </span>
    <li><a href="http://maven.huangdong.com/reference/user-guide.html#生成项目站点"><span style="font-size: 10pt">生成项目站点</span></a><span style="font-size: 10pt"> <br />
    </span>
    <ol><br />
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#颜色"><span style="font-size: 10pt">颜色</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#风格"><span style="font-size: 10pt">风格</span></a><span style="font-size: 10pt"> <br />
        </span>
        <li><a href="http://maven.huangdong.com/reference/user-guide.html#报告"><span style="font-size: 10pt">报告</span></a><span style="font-size: 10pt"> </span></li>
    </ol>
    </li>
</ol>
<p><br />
<br />
<br />
<br />
<a><span style="font-size: 10pt">关于手册</span></a><span style="font-size: 10pt"> <br />
这篇Maven使用手册意在通过提供完整的描述和例子，帮助开发人员了解Maven。 如果你有任何建议或者意见请在 </span><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#115;&#64;&#109;&#97;&#118;&#101;&#110;&#46;&#97;&#112;&#97;&#99;&#104;&#101;&#46;&#111;&#114;&#103;"><span style="font-size: 10pt">Maven使用者邮件列表</span></a><span style="font-size: 10pt">上发表. <br />
感谢选择Maven! <br />
<br />
</span><a><span style="font-size: 10pt">简介</span></a><span style="font-size: 10pt"> <br />
Maven最早始于Jarkarta Turbine项目，目的是为了简化构建过程。这个项目下面有 几个子项目，每个子项目都有自己的Ant文件，但是区别很小，而且生成的JAR 文件都要check in到CVS中。我们希望有一种标准的方式来构建这些项目，一种可以 清晰描述项目的方式，一种易于发布项目信息的方式，一种在多个项目之间共享JARs 的方式。 <br />
这个结果就是产生了一个可以用于构建、管理任何基于java的项目。我们希望我们创造 的这个工具可以让Java开发者的日常工作更加轻松，并有助于理解基于java的项目. <br />
<br />
</span><a><span style="font-size: 10pt">项目对象模型</span></a><span style="font-size: 10pt"> <br />
Maven是基于项目对象模型(POM)的概念而创建的。在这个模型中，所有由Maven产生的 artifact都是清晰定义的项目模型的结果。构建，文档，源码度量，源码交叉引用和其他 任何由Maven plug-in提供的东西都是由POM来控制的。 <br />
<br />
</span><a><span style="font-size: 10pt">POM 处理机制</span></a><span style="font-size: 10pt"> <br />
这篇文档简单的描述了Maven执行过程中是如何处理POM的。这里有一些简单的POM例子 来展示继承机制和插值机制。 <br />
<br />
</span><a><span style="font-size: 10pt">POM 插值机制</span></a><span style="font-size: 10pt"> <br />
POM(通常以project.xml的名字出现)现在已经被当作Jelly脚本来处理了。大部分时 候，用户无须关心project.xml文件是不是真正的Jelly脚本，但是，如果需要的话， 也可以使用内置值。我也不愿看到逻辑控制语句出现在project.xml中，但是由于 project.xml实际上已经是一个隐含的jelly的脚本，所以它会有足够的灵活性:-)。 下面是一个简单的例子。 <br />
3 <br />
maven <br />
maven <br />
Maven <br />
1.0-b5-dev <br />
<br />
Apache Software Foundation <br />
http://jakarta.apache.org/ <br />
/images/jakarta-logo-blue.gif <br />
<br />
2001 <br />
org.apache.${pom.artifactId} <br />
/images/${pom.artifactId}.jpg <br />
<br />
Maven is a project that was created in ${pom.inceptionYear}. <br />
${pom.name} is a Java Project Management Tool <br />
<br />
</span><a><span style="font-size: 10pt">POM 继承机制</span></a><span style="font-size: 10pt"> <br />
现在有一种简单方式可以用于在POM中进行继承，下面是一个简单的例子： <br />
project.xml <br />
super-extendo <br />
super-extendo <br />
Super Extendo <br />
<br />
**/*Test*.java <br />
<br />
**/TestAll.java <br />
**/*Abstract*.java <br />
<br />
目前对POM父对象的解析还相对较弱，现在对一层以上的继承还没有做过任何测试。尽管如此， 单层继承加上插值机制已经能够给带来很多好处。这些机制的意图在于简化构建的共用问题。 <br />
你可以这样定义主模板： <br />
<br />
3 <br />
commons <br />
commons-master <br />
Commons Master Maven POM <br />
<br />
Apache Software Foundation <br />
http://www.apache.org <br />
<br />
jakarta <br />
http://jakarta.apache.org/commons/${pom.artifactId}.html <br />
http://nagoya.apache.org/ <br />
jakarta.apache.org <br />
/www/jakarta.apache.org/commons/${pom.artifactId}/ <br />
/www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId}/ <br />
<br />
scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId} <br />
http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId}/ <br />
... <br />
<br />
子POM对象可以这样定义： <br />
commons-betwixt <br />
commons-betwixt <br />
Betwixt <br />
... <br />
<br />
这样你就可以在父POM对象中，将子POM对象的${pom.artifactId}替换进去。有许多项目的 构建都以相似的方式进行构建，这样一来，对于项目的公共部分，你就可以使用一个主模板， 然后在子POM对象project.xml中定义有区别的部分，而这部分内容通常很少。 <br />
这种机制确实还可以简化那些需要产生多个JAR包的项目。由于project.xml和标准Ant构建 不会相互干扰，我计划在公共部分测试继承机制。 <br />
如果你对使用这种机制，DVSL报告会变成什么样感到疑惑，我要说，你很上路。我已经修改 了DVSL报告来适应POM本身，这就是说DVSL转换是基于java对象的。在使用继承和插值机制的 时候，为了正确的产生DVSL报告，这是很有必要的。象上面列出的子模板是无法工作的，我们 需要全面的解析POM。我能说的是，它可以工作了！我所使用的处理方式可能不是最有效率的 方式，但仍有提升的空间。因为POM只会被处理一次(不管怎么说，这就它的原理，我可能漏了 某些东西)，然后到处使用，至少这就是我以前试图做的事情，所以我们很有可能会取得平衡。 <br />
如果你不使用继承和插值，那么一切照常工作。maven站点本身一切ok，有几个刚部署的站点 已经使用了我昨晚提交的东西了。 <br />
<br />
</span><a><span style="font-size: 10pt">使用插件</span></a><span style="font-size: 10pt"> <br />
Maven是一个很紧凑的内核，围绕着它的是许许多多的插件。Maven所有的功能都是由插件来提供 的。 <br />
<br />
</span><a><span style="font-size: 10pt">maven.xml文件</span></a><span style="font-size: 10pt"> <br />
项目中的maven.xml文件是Maven在执行过程中要使用的&#8220;定制&#8221;文件。 <br />
在这个文件中，你可以加入Maven构建中需要的额外处理。或者在Maven的&#8220;目标&#8221;前后附加自己 的代码，如jar 或 test。 <br />
Maven使用</span><a href="http://jakarta.apache.org/commons/sandbox/jelly"><span style="font-size: 10pt">Jelly</span></a><span style="font-size: 10pt"> 脚本语言, 任何合法的jelly标签都可以在maven.xml中使用。 <br />
Maven所采用的goal功能是由werkz标签库提供。更多的信息请看 </span><a href="http://wiki.codehaus.org/maven/WerkzTagDocumentation"><span style="font-size: 10pt">wiki页面</span></a><span style="font-size: 10pt">. <br />
<br />
</span><a><span style="font-size: 10pt">简单的maven.xml例子</span></a><span style="font-size: 10pt"> <br />
<strong>注意</strong>由于Maven并未缺省的定义'compile'目标，下面这个例子没法运行。 <br />
这是一个简单的maven.xml例子 <br />
<br />
${goals} <br />
Now attaining goal number ${goalNumber}, which is ${goal} <br />
<br />
你可能会注意到这里一些有意思的东西，下面我们将逐一解释。 <br />
<br />
</span><a><span style="font-size: 10pt">project节点</span></a><span style="font-size: 10pt"> <br />
project节点, , 是任何 maven.xml 文件的根节点。 <br />
项目节点有一个缺省的属性：default="nightly-build"，如果用户只是简单键入 没有参数的maven命令，Maven就会用nightly-build 目标作为缺省目标。 <br />
接下来是几个名字空间的声明，如： </span></p>
<ol>
    <li><span style="font-size: 10pt">xmlns:j="jelly:core" <br />
    所有以j:作为前缀的节点，Jelly都会把它视为在core标识下 预定义的标签库。 </span>
    <li><span style="font-size: 10pt">xmlns:u="jelly:util" <br />
    所有以u:作为前缀的节点，Jelly都会把它视为在标识下 预定义的标签库。 <br />
    <br />
    所有在maven.xml文件使用的Jelly标签库，都<strong>必须</strong>在project节点中定义，并且 分配一个名称空间前缀。 <br />
    Maven已经预先包含了jeez标签库作为空前缀。这个标签库在一个名称空间内包含了 ant 和 werkz 标签库。这样，任何werkz或ant标签都无须名称空间 即可使用，同时也简化了ant的迁移过程。 <br />
    <br />
    </span><a><span style="font-size: 10pt">目标</span></a><span style="font-size: 10pt"> <br />
    goal是一个</span><a href="http://jakarta.apache.org/commons/jelly/tags.html#jelly:werkz"><span style="font-size: 10pt"> werkz 标签</span></a><span style="font-size: 10pt">，类似于Ant的target；它是包含了一系列可执行标签的容器。 <br />
    由于jeez 标签库已经由maven预先注册了，一个目标(goal)可以包含任何合法的 Ant 标签。 <br />
    为了执行在maven.xml中定义的目标，你只需要在命令行中为Maven指定目标名即可。要执行例子中定 义的nightly-build你只需执行命令: <br />
    maven nightly-build <br />
    <br />
    Maven插件定义的目标需要在目标前加上插件名，这样一来，就不会和你自己的goal冲突，如 jar:jar就是 jar 插件定义的目标，用于创建项目的jar包。 <br />
    <br />
    </span><a><span style="font-size: 10pt">Jelly编程</span></a><span style="font-size: 10pt"> <br />
    在每个目标里，由Jelly标签提供功能，让我们来看看例子里的这些代码。 <br />
    set <br />
    <br />
    这行就是一个jelly的core标签set，它使用了project节点中定义的前缀 j: <br />
    set标签设置了一个由var属性定义的Jelly变量，值由 value 指定。和Ant的proerties不一样，Jelly变量在被赋值后仍可以改变。 <br />
    mkdir <br />
    <br />
    等同于Ant任务 mkdir, 用于创建目录，目录名由变量 ${maven.build.dir}指定。 <br />
    tokenize <br />
    ${goals} <br />
    这行执行的是Jelly tokenize 标签。这是Jelly util 标签库中标签， 这个标签库已经在项目节点中预先定义：u: <br />
    tokenize标签在将节点中的内容分离成一个list，用于后续的处理。 <br />
    </span></li>
</ol>
<ul>
    <li><span style="font-size: 10pt">var 属性就是将被于新list的变量。 </span>
    <li><span style="font-size: 10pt">delim 属性是用于分割字符串中的分隔符。 <br />
    </span>
    <li><span style="font-size: 10pt">在这个例子中，tokenize 标签中节点值是一个变量：goals, 在前几行中，这是一个由逗号分隔、compile 与 test 的字符串。 </span></li>
</ul>
<p><br />
<br />
<span style="font-size: 10pt">forEach <br />
<br />
Now attaining goal number ${goalNumber}, which is ${goal} <br />
<br />
<br />
forEach标签提供简单循环功能，节点值就是循环体。 <br />
</span></p>
<ul><br />
    <li><span style="font-size: 10pt">items 属性是一个表达式，是在循环过程中需要遍历的值集合。 <br />
    </span>
    <li><span style="font-size: 10pt">集合中的值被逐个取出，存放在var 属性指定的变量中。你可以在 forEach 循环体访问这个变量。 <br />
    </span>
    <li><span style="font-size: 10pt">indexVar 属性指定了一个计数器(起始基数为0)变量，用于在处理 过程中计数。 </span></li>
</ul>
<p><br />
<br />
<span style="font-size: 10pt">forEach 标签的节点值输出了一些在处理过程中的关于目标的文本，并使用 attainGoal werkz 标签来获得(执行?)这些目标。 <br />
<br />
</span><a><span style="font-size: 10pt">Maven 配置</span></a><span style="font-size: 10pt"> <br />
<br />
</span><a><span style="font-size: 10pt">属性的处理机制</span></a><span style="font-size: 10pt"> <br />
Maven按下面的顺序依次读入properties文件： </span></p>
<ul>
    <li><span style="font-size: 10pt">${project.home}/project.properties </span>
    <li><span style="font-size: 10pt">${project.home}/build.properties </span>
    <li><span style="font-size: 10pt">${user.home}/build.properties </span></li>
</ul>
<p><br />
<span style="font-size: 10pt">读入的属性遵循&#8220;最后的定义有效&#8221;原则。也就是说，Maven依次读入properties文件，以新的定义 覆盖旧的定义。${user.home}/build.properties是Maven最后处理的文件。我们把 这些文件称为Maven处理的标准属性文件集。 <br />
另外，上述properties文件处理完毕后，Maven才会开始处理系统属性。所以，如果在命令行中使用 象-Dproperty=value这样的形式来指定的属性，它会覆盖先前定义的同名属性。 <br />
<br />
</span><a><span style="font-size: 10pt">插件的属性</span></a><span style="font-size: 10pt"> <br />
上述属性文件处理完后，Maven才会开始调用插件，但是 PluginManager 会禁止插件 覆盖已经设置的属性值。这和Maven一般的属性处理方式是相反的，这是因为插件只能在Maven内部的 其他部分初始化完毕后才能处理，但是我们又希望以这样顺序去处理属性： <br />
</span></p>
<ul>
    <li><span style="font-size: 10pt">处理Plug-in 缺省属性 </span>
    <li><span style="font-size: 10pt">处理${project.home}/project.properties </span>
    <li><span style="font-size: 10pt">处理${project.home}/build.properties </span>
    <li><span style="font-size: 10pt">处理${user.home}/build.properties </span></li>
</ul>
<p><br />
<span style="font-size: 10pt">这样一来，即使插件处于属性处理链的后端，也能覆盖插件的任何缺省属性。例如，Checkstyle插件 就定义了如下缺省属性： <br />
maven.checkstyle.format = sun <br />
<br />
你可能已经猜出来了，Checksytle插件把Sun的编码规范作为缺省的格式。但是我们仍然可以在标准属性 文件集的任何一个文件中覆盖这个属性。所以如果在${project.home}/project.properties 文件定义了如下属性值： <br />
maven.checkstyle.format = turbine <br />
<br />
Checkstyle就会使用Turbine的编码规范。 <br />
<br />
</span><a><span style="font-size: 10pt">行为属性</span></a><span style="font-size: 10pt"> <br />
下面的这些属性可以改变Maven的&#8220;行为方式&#8221;。 <br />
<br />
属性 <br />
描述 <br />
缺省值 <br />
<br />
maven.build.dest <br />
目录名，存放编译生成的类 <br />
${maven.build.dir}/classes <br />
<br />
maven.build.dir <br />
存放构建结果的目录，如类文件，文档，单元测试报告等等。 <br />
<strong>注意：</strong> 在${user.home}/build.properties文件中改变maven.build.dir 的缺省值或许会得到一个 较为个性化的目录布局。但是，这会干扰Maven由从源码开始的编译工作，因为它假设jar包 会被创建到${basedir}/target/目录中。 <br />
${basedir}/target <br />
<br />
maven.build.src <br />
源码目录 <br />
${maven.build.dir}/src <br />
<br />
maven.conf.dir <br />
配置文件目录 <br />
${basedir}/conf <br />
<br />
maven.docs.dest <br />
html格式报告的输出目录 <br />
${maven.build.dir}/docs <br />
<br />
maven.docs.omitXmlDeclaration <br />
产生的文档所应包含的xml声明头，如： <br />
<br />
false <br />
<br />
maven.docs.outputencoding <br />
生成文档的缺省编码 <br />
ISO-8859-1 <br />
<br />
maven.docs.src <br />
用户提供的文档目录 <br />
${basedir}/xdocs <br />
<br />
maven.gen.docs <br />
xdocs文档转换成html后的输出目录 <br />
${maven.build.dir}/generated-xdocs <br />
<br />
maven.home.local <br />
maven用于写入用户信息的本机目录，如解开插件包、缓冲数据。 <br />
${user.home}/.maven <br />
<br />
maven.mode.online <br />
是否连接internet <br />
true <br />
<br />
maven.plugin.dir <br />
插件的存放目录 <br />
${maven.home}/plugins <br />
<br />
maven.plugin.unpacked.dir <br />
用于展开安装插件的目录 <br />
${maven.home.local}/plugins <br />
<br />
maven.repo.central <br />
在进行dist:deploy处理的时候，发行包所要部署的目标机器 <br />
login.ibiblio.org <br />
<br />
maven.repo.central.directory <br />
在进行dist:deploy处理的时候，发行包所要部署的目标目录。 <br />
/public/html/maven <br />
<br />
maven.repo.local <br />
本机repository，用于存储下载的jar包。 <br />
${maven.home.local}/repository <br />
<br />
maven.repo.remote <br />
远程repository，如果本机repository没有的jar包，maven会从这里下载。 <br />
http://www.ibiblio.org/maven <br />
<br />
maven.repo.remote.enabled <br />
是否使用远程repository。 <br />
true <br />
<br />
maven.scp.executable <br />
用于安全拷贝的可执行程序 <br />
scp <br />
<br />
maven.src.dir <br />
基础源代码目录 <br />
${basedir}/src <br />
<br />
maven.ssh.executable <br />
远程命令可执行程序 <br />
scp <br />
<br />
</span><a><span style="font-size: 10pt">使用代理</span></a><span style="font-size: 10pt"> <br />
如果你只能通过代理访问，不要紧，Maven为你提供了下列属性： <br />
<br />
代理属性 <br />
描述 <br />
<br />
maven.proxy.host <br />
代理的IP地址 <br />
<br />
maven.proxy.port <br />
代理端口 <br />
<br />
maven.proxy.username <br />
如果代理需要认证的话，在这里填写用户名。 User name if your proxy requires authentication. <br />
<br />
maven.proxy.password <br />
如果代理需要认证的话，在这里填写密码。 <br />
如果你实在需要代理，最好在${user.home}/build.properties文件中指定。 <br />
## ---------------------------------------------------------- <br />
## ${user.home}/build.properties <br />
## ---------------------------------------------------------- <br />
. <br />
. <br />
maven.proxy.host = my.proxyserver.com <br />
maven.proxy.port = 8080 <br />
maven.proxy.username = username <br />
maven.proxy.password = password <br />
. <br />
. <br />
<br />
</span><a><span style="font-size: 10pt">使用多个远程Repositories</span></a><span style="font-size: 10pt"> <br />
你可以在任何Maven可以处理的属性文件中指定使用多个远程Repositories，如： <br />
maven.repo.remote = http://www.ibiblio.org/maven/,http://www.mycompany.com/maven/ <br />
<br />
</span><a><span style="font-size: 10pt">项目设置</span></a><span style="font-size: 10pt"> <br />
<br />
</span><a><span style="font-size: 10pt">开始一个新项目</span></a><span style="font-size: 10pt"> <br />
如果你是第一次使用Maven，或者开始一个新的项目，你可以使用GenApp来自动创建Maven项目树。 <br />
maven -Dpackage=com.mycompany.app genapp <br />
<br />
执行该命令后，屏幕显示如下： <br />
__ __ <br />
| / |__ Jakarta _ ___ <br />
| |/| / _ V / -_) ' ~ intelligent projects ~ <br />
|_| |___,_|_/___|_||_| v. 1.0-beta-9 <br />
<br />
[mkdir] Created dir: /genapp/src/java/com/mycompany/app <br />
[copy] Copying 1 file to /genapp/src/java/com/mycompany/app <br />
[mkdir] Created dir: /genapp/src/test/com/mycompany/app <br />
[copy] Copying 3 files to /genapp/src/test/com/mycompany/app <br />
[copy] Copying 2 files to /genapp <br />
[copy] Copying 1 file to /genapp/src/conf <br />
BUILD SUCCESSFUL <br />
Total time: 3 seconds <br />
<br />
执行完毕，即生成下面的完整项目目录树： <br />
. <br />
|-- project.properties <br />
|-- project.xml <br />
`-- src <br />
|-- conf <br />
| `-- app.properties <br />
|-- java <br />
| `-- com <br />
| `-- mycompany <br />
| `-- app <br />
| `-- App.java <br />
`-- test <br />
`-- com <br />
`-- mycompany <br />
`-- app <br />
|-- AbstractTestCase.java <br />
|-- AppTest.java <br />
`-- NaughtyTest.java <br />
<br />
</span><a><span style="font-size: 10pt">构建</span></a><span style="font-size: 10pt"> <br />
Maven采用了集中管理库的理念。所有用于构建的jar包都是从集中管理的中心库上取出。目前， 我们的中心库放在</span><a href="http://www.ibiblio.org/maven"><span style="font-size: 10pt">这儿</span></a><span style="font-size: 10pt"> </span><a href="http://www.ibiblio.org/"><span style="font-size: 10pt">Ibiblio</span></a><span style="font-size: 10pt">. 在一个典型的Maven项目中，构建所需的 jar包会从中心库下载。Maven只会取回依赖链条上缺失的包。如果你使用Maven来构建几个项目， 这些项目可能会共享一些依赖包：Maven可以在任意个项目中共享同一个包，而无须在同一系统 中保持一个jar包的多个拷贝。 <br />
<br />
</span><a><span style="font-size: 10pt">构建生命周期</span></a><span style="font-size: 10pt"> <br />
<br />
</span><a><span style="font-size: 10pt">在CVS中存放jar文件</span></a><span style="font-size: 10pt"> <br />
我们不推荐你在CVS中存放jar包。Maven提倡在本机repository中存放用于构建共享的jar包或 和其他项目包。许多项目都依赖于诸如XML解析器、标准例程，这在Ant构建中，经常会被复制 多份。在Maven中，这些标准例程就存放在本地repository中，供任何项目构建使用。 <br />
</span><a><span style="font-size: 10pt">重载已声明的依赖包</span></a><span style="font-size: 10pt"> <br />
你可能会发现，在某些情况下允许重载POM中已经声明的依赖包会很方便，甚至很有必要。 你可能会希望使用文件系统中的某个JAR包，或者你希望简单重新指定某个包的版本。对于 这样的情况，Maven提供了一种简单的方式，允许你选择构建所需的jar包。我们严重建议;) 你设置本机repository，但是在简单至上，或在由ant构建迁移的情况下，JAR包重载特性 会显得非常方便。 <br />
为了使用JAR包重载特性，你必须将maven.jar.override 属性设置为 on。 只要设置了这个属性，就可以在任何maven处理的属性文件中重载JAR包。 <br />
关于JAR重载的指令有两种。第一种允许你指定某个特定的包的路径，作为JAR包；的二种 允许你指定某个特定的JAR包（这个jar包必须已经存在于本机repository）。下面是这两 种方式： <br />
maven.jar.artifactId = [path] <br />
maven.jar.artifactId = [version] <br />
<br />
下面是一个使用JAR重载指令的属性文件例子： <br />
# ------------------------------------------------------------------------ <br />
# M A V E N J A R O V E R R I D E <br />
# ------------------------------------------------------------------------ <br />
maven.jar.override = on <br />
# ------------------------------------------------------------------------ <br />
# Jars set explicity by path. <br />
# ------------------------------------------------------------------------ <br />
maven.jar.a = ${basedir}/lib/a.jar <br />
maven.jar.b = ${basedir}/lib/b.jar <br />
<br />
# ------------------------------------------------------------------------ <br />
# Jars set explicity by version. <br />
# ------------------------------------------------------------------------ <br />
maven.jar.classworlds = 1.0-beta-1 <br />
<br />
</span><a><span style="font-size: 10pt">使用SNAPSHOT依赖</span></a><span style="font-size: 10pt"> <br />
在Maven中，SNAPSHOP是某个特定项目的最新构建的jar包。如果你的项目依赖于另一个频繁变更 的项目，你可以在你的POM中声明SNAPSHOP依赖，以保持与那个项目的同步。例如，在你的POM中 这样写，你可以与</span><a href="http://jakarta.apache.org/commons/jelly/"><span style="font-size: 10pt">Jelly</span></a><span style="font-size: 10pt">保持 同步更新。 <br />
... <br />
commons-jelly <br />
commons-jelly <br />
SNAPSHOT <br />
... <br />
<br />
上述语句的含义是：总是使用Maven repository中最新的Jelly构建包。SNAPSHOT依赖 总会导致依赖失败。在这种情况下，Maven就会去Maven repository取得一个SNAPSHOT 依赖包的拷贝。如果你正在离线工作，Maven就会发出警告：&#8220;SNAPSHO依赖包可能已经 过期&#8221;。 <br />
<br />
</span><a><span style="font-size: 10pt">多项目构建和Reactor</span></a><span style="font-size: 10pt"> <br />
在Maven中，Reactor是一个用于控制多项目构建的工具。Reactor用Werkz包,并根据每个项目 各自定义的依赖关系来安排构建顺序。Reactor的意图在于：鼓励创建/重构具有更小、更松散、 更有一致性单元的项目。r源于面向组件编程，在向组件编程中，整个系统由许多松散的个体 构成，这些个体需要聚合起来作为一个整体进行部署。 <br />
Reactor可以为某个项目集执行一个任意编排的目标列表。所以，如果使用Reactor的话，它 可以用来做项目站点生成，任意jar包生成这样的事情。 <br />
目前 </span><a href="http://db.apache.org/"><span style="font-size: 10pt">db.apache.org</span></a><span style="font-size: 10pt"> 站点就是收集了其子项目的 丰富信息、并与一系列的</span><a href="http://jakarta.apache.org/velocity/"><span style="font-size: 10pt">Velocity</span></a><span style="font-size: 10pt"> 模板合成的。这一过程是由 </span><a href="http://jakarta.apache.org/commons/jelly/"><span style="font-size: 10pt">Jelly</span></a><span style="font-size: 10pt"> Velocity 标签库来完成的。</span><a href="http://cvs.apache.org/viewcvs.cgi/db-site/"><span style="font-size: 10pt"> 这里</span></a><span style="font-size: 10pt">是其中的机制，有兴趣可以看看。 <br />
Plexus(一个基于Avalon的容器)组件的manifest是遍历所有Plexus组件、并聚合而成的。这里 使用的还是Velocity模板和Jelly Volocity标签库。 </span><a href="http://cvs.werken.com/viewcvs.cgi/plexus-components/?cvsroot=plexus"><span style="font-size: 10pt">这里</span></a><span style="font-size: 10pt">是其中的机制，有兴趣可以看看。 <br />
这里是一个使用Reactor标签，遍历一系列组件，最后产生项目站点的例子： <br />
... Do whatever you want with the harvested information ... <br />
<br />
如果你需要聚合N个项目的文档，形成一个统一的视图，你可以参考 </span><a href="http://db.apache.org/"><span style="font-size: 10pt">db.apache.org</span></a><span style="font-size: 10pt">站点，它从所有的子项目中收集 信息，最终形成一个有导航条，邮件列表，开发者列表和源码repository统一的站点。这解决 了在收集子项目信息过程中的冗余、易于产生错误的问题。db.apache.org的子项目只需关注 自身的信息，却可以自动的集成到高层的项目站点中。 <br />
<br />
</span><a><span style="font-size: 10pt">离线构建</span></a><span style="font-size: 10pt"> <br />
如果你需要离线构建，你得在命令行中使用离线选项： <br />
maven -o jar:jar <br />
<br />
这等同于： <br />
maven -Dmaven.mode.online=false jar:jar <br />
<br />
或者你可以在</span><a href="http://maven.huangdong.com/reference/user-guide.html#Properties_Processing"><span style="font-size: 10pt">属性文件</span></a><span style="font-size: 10pt">中设置 maven.mode.online 属性为false。 <br />
在联机模式下，maven总是下载 SNAPSHOT 依赖包, 请参考 </span><a href="http://maven.huangdong.com/reference/user-guide.html#使用SNAPSHOT依赖"><span style="font-size: 10pt">使用SNAPSHOT依赖</span></a><span style="font-size: 10pt">。如果本机repository 上的当前版本比服务器上的还要新，你也许不想maven覆盖你的当前版本。如果不想下载，你可以 设置属性： <br />
maven.repo.remote.enabled=false <br />
<br />
在maven beta 9版本中，这个属性并没有起作用(新版本已经解决了这个问题)。可以这样来清空 maven.repo.remote 属性： <br />
maven.repo.remote.enabled= <br />
<br />
在命令行或属性文件中设置都一样。 <br />
在下面的情形中，你需要同时设置maven.repo.remote.enabled=false maven.mode.online=true：希望javadoc插件的"-link"选项起作用，而又不希望 下载任何(包括snapshot)包。 <br />
<br />
</span><a><span style="font-size: 10pt">命令行选项介绍</span></a><span style="font-size: 10pt"> <br />
如果你用命令行来构建，这里提供了一个关于命令行选项的快速参考。 <br />
Options: <br />
-D,--define arg 定义一个系统属性 <br />
-E,--emacs 输出简洁的日志信息 <br />
-X,--debug 输出debug信息 <br />
-b,--nobanner 禁止 logo banner <br />
-d,--dir arg 设置指定的工作目录 <br />
-e,--exception 输出异常堆栈信息 <br />
-f,--find arg 通过搜寻项目文件来确定执行的项目文件及其工作目录 <br />
-g,--goals 显示可用的目标 <br />
-h,--help 显示帮助信息 <br />
-i,--info 显示系统信息 <br />
-o,--offline 离线构建 <br />
-p,--pom arg 指定项目文件 <br />
-v,--version 显示版本号 <br />
<br />
</span><a><span style="font-size: 10pt">测试</span></a><span style="font-size: 10pt"> <br />
<br />
</span><a><span style="font-size: 10pt">测试资源</span></a><span style="font-size: 10pt"> <br />
通常情况下，你需要在测试类路径上为测试指定某些资源。你可以在POM中使用 <br />
下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml和.properties为扩展名 的文件： <br />
... <br />
... <br />
... <br />
<br />
${basedir}/src/test <br />
**/*.xml <br />
**/*.properties <br />
<br />
下面的例子说明了如何递归的包含在${basedir}/src/test目录中所有以.xml和.properties为扩展名 的文件，但naughty.properties文件除外。请注意增加的project/build/unitTest/resources/excludes 节点： <br />
... <br />
... <br />
... <br />
<br />
${basedir}/src/test <br />
**/*.xml <br />
**/*.properties <br />
<br />
naughty.properties <br />
<br />
</span><a><span style="font-size: 10pt">运行一个单独的测试</span></a><span style="font-size: 10pt"> <br />
下面的命令运行了一个单独的测试： <br />
maven -Dtestcase=org.foo.bar.MyTest test:single-test <br />
<br />
</span><a><span style="font-size: 10pt">打包</span></a><span style="font-size: 10pt"> <br />
</span><a><span style="font-size: 10pt">JAR 资源</span></a><span style="font-size: 10pt"> <br />
... <br />
<br />
${basedir}/src/conf <br />
<br />
*.xml <br />
*.properties <br />
<br />
${basedir}/src/messages <br />
org/apache/maven/messages <br />
messages*.properties <br />
<br />
</span><a><span style="font-size: 10pt">部署</span></a><span style="font-size: 10pt"> <br />
<br />
</span><a><span style="font-size: 10pt">固化SNAPSHOT依赖</span></a><span style="font-size: 10pt"> <br />
在开发时使用SNAPSHOT依赖包非常方便，但是在部署的时候，你需要把所有的SNAPSHOT依赖包 固定下来，以便发布一个包含固定jar的版本。如果你发布了一个含SNAPSHOT依赖包的项目，而 这些SNAPSHOT在项目发布后发生了变更，你可能很快就会发现这个版本没法儿工作。 <br />
当SNAPSHOT以时间戳为版本号部署到Maven上时，Maven可以识别foo-SNAPSHOT.jar实际上相当 于foo-20030101.010101.jar。当部署的时刻来临，你可以用下面的命令，让Maven把SNAPSHOT 版本号变为时间戳版本号。 <br />
maven convert-snapshots <br />
<br />
Maven会提供交互的方式让你选择哪个SNAPSHOPT依赖包应该固化下来。这一过程结束后，Maven 就会把刚才你的选择写会你的POM。 <br />
如果你希望Maven简单的、尽可能最好的固化SNAPSHOT依赖包，你可以用下面的命令： <br />
maven convert-snapshots-auto <br />
<br />
</span><a><span style="font-size: 10pt">拷贝依赖JAR包</span></a><span style="font-size: 10pt"> <br />
在maven.xml这样写下面的语句是最简单的拷贝依赖包的方法。 <br />
... <br />
... <br />
<br />
用deploy:copy-deps标签你就可以简单的把项目所有的依赖包拷贝到任何 目录，如果希望排除某个依赖包，需要给出一个依赖包的id列表，列表中依赖包就不会被拷贝。 <br />
<br />
... <br />
... <br />
<br />
</span><a><span style="font-size: 10pt">命名约定</span></a><span style="font-size: 10pt"> <br />
这部分将简要的描述项目对象模型(POM)中命名约定。本篇文档希望可以统一各式各样jar包命名 方法，这些jar包一般为java开发者社区广泛使用。 <br />
<br />
</span><a><span style="font-size: 10pt">规则和指南</span></a><span style="font-size: 10pt"> <br />
</span><a><span style="font-size: 10pt">项目</span></a><span style="font-size: 10pt"> <br />
一个项目必须由一个唯一的的标识，标识由a-z小写字母和连线号构成，其首字母必须以小写字母 开头。 <br />
<br />
bar <br />
foo <br />
... <br />
<br />
所有项目间的引用都由组id和包id构成。到现在为止，在POM与此相关的是下面将要（上面提到的？）谈到的项目的 依赖声明。 <br />
项目的名称应该易于阅读，可用于文档。 <br />
<br />
bar <br />
foo <br />
The Grand Master Foo <br />
... <br />
<br />
项目应该有一个组标识，组标识是名称的基础部分。 <br />
bar <br />
foo <br />
The Grand Master Foo </span></p>
<p><span style="font-size: 10pt">... <br />
<br />
所有项目发布的包都应基于项目唯一的标识，并且放在基于项目的组id的目录中。对于上面的 项目来说，假定发布的包是jar类型的包，我们就会有如下目录结构： <br />
repository <br />
| <br />
+-- bar <br />
|-- distribution <br />
`-- jar <br />
|-- foo-1.0.jar <br />
`-- foo-2.0.jar <br />
<br />
<br />
</span><a><span style="font-size: 10pt">依赖</span></a><span style="font-size: 10pt"> <br />
一个理想的典型依赖声明的例子可能会象这样： <br />
<br />
yourProject <br />
yourArtifact <br />
Your Groovey Machine <br />
... <br />
<br />
bar <br />
foo <br />
1.0 <br />
<br />
这样一来，依赖于id为foo1.0 版本的bar项目 属于org.foo.bar组。这个依赖会被解析为本地repository中jar文件。上面 的情形假定发布的包是基于包id命名的。因此对于上述依赖，Maven就会采用 foo-1.0.jar作为jar名。 <br />
就像用户反映的那样，这种理想的方式并不能适应所有的项目。有几种情形我们必须考虑调整 理想的依赖机制： </span></p>
<ul>
    <li><span style="font-size: 10pt">发布的jar包的并未使用项目作为基础名，如xercesImpl就是所有发布的jar包的基础名 它与gump id和maven中的id都不一样。 <br />
    </span>
    <li><span style="font-size: 10pt">发布的jar包没有使用任何版本声明，如许多commons组件并没有把版本号作为包名的一部分。 <br />
    </span>
    <li><span style="font-size: 10pt">有些项目即没有使用项目id作为基础名也没有版本声明。例如，最坏的情形是Java Activation Framework 的jar包，它没有遵循其他Sun的命名规则，也没有在jar包中声明 版本号，甚至在manifest中都没有任何版本信息。 <br />
    <br />
    在多数情形下，任何例外的情况都可以用 (可选节点)、或者是重命名来解决。 现在，许多Jarkata的产品在repository已经被重命名，因为在不久的未来，绝大多数的Jarkarta的 项目将用maven进行构建。但这不是公司政策，我们不需要解决所有情况的问题。 <br />
    <br />
    </span><a><span style="font-size: 10pt">发布多个包的项目</span></a><span style="font-size: 10pt"> <br />
    Maven的依赖机制完全支持任何形式的多项目包。 Maven's dependency mechanism completely supports multiple project artifacts of any given type. <br />
    下面的代码包含了ant的主jar包和optional包加上hypothetical包。 <br />
    ant <br />
    ant <br />
    1.4.1 </span></li>
</ul>
<p><span style="font-size: 10pt">ant <br />
ant-optional <br />
1.4.1 <br />
ant <br />
poorly-named <br />
1.4.1 <br />
<br />
所以A), B) 和 C)实际上是指向属于同一组的单个包的指针，这就是说，一个单独的依赖就是对某个组中的某个 包的引用。目前artifact如果没有特别说明的话，一般指的是jar包。但是依赖也可能是一个war文件或一个 发行包。我们试图在提供多数情况下(构建大多需要jar包)使用的缺省方式的同时，也顾及灵活性。 <br />
<br />
</span><a><span style="font-size: 10pt">远程Repository布局</span></a><span style="font-size: 10pt"> <br />
这部分文档将对Maven的远程repositories做一个概要的说明。目前，主repository位于 </span><a href="http://www.ibiblio.org/maven/"><span style="font-size: 10pt">Ibiblio</span></a><span style="font-size: 10pt">，但是你也可以自己创建一 个远程repositories，其结果描述可以在这部分文档中找到。 <br />
任何独立的项目在repository都有自己的目录。每个项目有一个唯一的项目id和同名目录， 项目的发行包就放在这个目录中。 <br />
项目的目录中可以存放各种各样的artifacts，目前最为广泛使用的两种类型是jar包和发行包 下面是一个远程repository快照： <br />
repository <br />
| <br />
|-- ant <br />
| |-- distribution <br />
| `-- jars <br />
| |-- ant-1.4.1.jar <br />
| `-- ant-optional-1.4.1.jar <br />
+-- jsse <br />
|-- distribution <br />
`-- jars <br />
|-- jsse.jar <br />
|-- jcert.jar <br />
`-- jnet.jar <br />
<br />
</span><a><span style="font-size: 10pt">本地Repository布局</span></a><span style="font-size: 10pt"> <br />
应该有一个接口集合的紧凑实现使本地repository目录结构更加随意一些。现在我只使用 了一个类来实现，显得有些臃肿。我还是认为本地和远程repositories应保持相同的结构 但是为了使用更乐于使用，我开始设计一些接口，用于满足用户自己安排自己本地Repository 布局，相似的远程Repositor也在设计中。尽管目前本地repository仍与远程repository 完全一致，我希望听到更多的用户反馈，以促进这些接口的开发，或者完全抛弃它。 <br />
<br />
</span><a><span style="font-size: 10pt">生成项目站点</span></a><span style="font-size: 10pt"> <br />
Maven可以为项目产生一个完成的web站点。这个web站点将包含各种各样、由许多Maven插件 产生的报告，如javadocs，代码度量，单元测试，changlog，及其它... 本节文档接下来的 部分将阐述Maven支持的站点定制选项。 <br />
<br />
</span><a><span style="font-size: 10pt">颜色</span></a><span style="font-size: 10pt"> <br />
考虑到一致性，缺省情况下，所有Maven产生的站点都使用相似的外观。这使用户一眼就能 认出由Maven产生的站点，产生熟悉的感觉，更加方便信息的获取。当然，Maven开发组也 考虑到用户可能会希望定制他们的站点。修改Maven产生的站点，最简单的方法是指定你要 使用的颜色搭配。这只需要在project.properties简单的设置适当的属性 即可。下面是所有可用的属性描述在</span><a href="http://maven.huangdong.com/reference/plugins/xdoc/properties.html"><span style="font-size: 10pt"> xdoc plugin</span></a><span style="font-size: 10pt">。 <br />
<br />
</span><a><span style="font-size: 10pt">风格</span></a><span style="font-size: 10pt"> <br />
如果你感觉颜色太过于简单，无法满足你的要求，你可以用自己的stylesheet。为了重载 在${basedir}/xdocs/stylesheets/中的maven.css stylesheet，你可以通过设置maven.javadoc.stylesheet 属性来指定你的 javadoc风格。 <br />
<br />
</span><a><span style="font-size: 10pt">报告</span></a><span style="font-size: 10pt"> <br />
最后，如果你希望定制哪些报告需要自动产生，你需要在你的项目描述中包含 </span><a href="http://maven.huangdong.com/reference/project-descriptor.html#reports"><span style="font-size: 10pt">reports</span></a><span style="font-size: 10pt"> 标签库。 到目前为止，如果没有reports标签指定，所有插件报告都会产生。这个标签 允许你选择产生哪些报告而排斥另外一些报告，而且允许你安排顺序。 <br />
目前的标准 报告集在xdoc中是硬编码实现的，它们是： <br />
maven-changelog-plugin <br />
maven-changes-plugin <br />
maven-checkstyle-plugin <br />
maven-developer-activity-plugin <br />
maven-file-activity-plugin <br />
maven-javadoc-plugin <br />
maven-jdepend-plugin <br />
maven-junit-report-plugin <br />
maven-jxr-plugin <br />
maven-license-plugin <br />
maven-linkcheck-plugin <br />
maven-pmd-plugin <br />
maven-tasklist-plugin <br />
<br />
如果你希望产生缺省的报告，但是还想增加或删除一两个，最好的方法是：给 xdoc:register-reports目标写一个前置目标(postGoal)。<br />
<br />
</span><a><span style="font-size: 10pt">排除所有Maven产生的内容</span></a><span style="font-size: 10pt"> <br />
某些情况下，用户需要构建只有文档的站点，或是构建聚合许多子项目的站点，但不希望 在站点上有个整体&#8220;项目文档&#8221;导航条。设置 maven.xdoc.includeProjectDocumentation属性值为no 即可解决这一问题。缺省的，Maven会包含&#8220;项目文档&#8221;导航条，下面挂的是许多Maven 生成的报告。 " </span></p>
<img src ="http://www.blogjava.net/lcs868/aggbug/245919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lcs868/" target="_blank">lcs868</a> 2008-12-12 12:48 <a href="http://www.blogjava.net/lcs868/articles/245919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>