??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲2022国产成人精品无码区,亚洲国产精品久久久久秋霞影院,四虎必出精品亚洲高清http://m.tkk7.com/lcs868/category/36668.htmlzh-cnMon, 15 Dec 2008 23:23:24 GMTMon, 15 Dec 2008 23:23:24 GMT60用maven搭徏struts2+spring+hibernatehttp://m.tkk7.com/lcs868/articles/246467.htmllcs868lcs868Mon, 15 Dec 2008 09:50:00 GMThttp://m.tkk7.com/lcs868/articles/246467.htmlhttp://m.tkk7.com/lcs868/comments/246467.htmlhttp://m.tkk7.com/lcs868/articles/246467.html#Feedback0http://m.tkk7.com/lcs868/comments/commentRss/246467.htmlhttp://m.tkk7.com/lcs868/services/trackbacks/246467.html
今天抽空l习下用maven2+myeclipse搭徏一个ssh框架Q把搭徏q程单记录一下,以便以后方便查阅
1.准备工作Qjdk1.6Qmaven2.0.9Qmyeclipse6.0.1Qmysql数据?br />
2.jdk的安装配|,以及maven2在eclipse里的配置|上的例子很多就不在重复

3.用m2搭徏主项目工Es2shdemoQ在myeclipse中点击new-other-maven project-create a simple project输入groupId,ArtifactId,在这里别的地斚w可以Ҏ自己的爱好填写,但打包方式packaging必须选择pom选项。点下一步后点击完成卛_?br />
4.完成web层:我在q里用的是m2的命令行搭徏一个web工程Q进入cmdq行如下命oQ?br /> mvn archetype:create -DgroupId=com.lcsssh.web.action -DartifactId=s2shdemo -DarchetypeGroupId=org.apache.struts -DarchetypeArtifactId=struts2-archetype-starter -DarchetypeVersion=2.0.11.2-SNAPSHOT -DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository 
其中有标志的地方可以Ҏ自己需要修改,q样一个struts2和spring的web工程搭建成功?br /> 5.完成service层:在myeclipse中选择file-other-maven module填写module nameq择父工E,也就是第3部你所建立h的工E。进入下一步就如第三步一样填写所需选项Q记住这里packaging应选择jar或其他不能用pom?br />
6.如第五步搭徏dao层?br />
7.整合Q以上步骤完成后开始配|,我把配置有关的文件全部放到web模块下的resources目录?br />     配置web.xml文gQ加入如下代?br /> <?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
 <display-name>s2shdemo</display-name>  
 <distributable />  
 <context-param>  
  <param-name>contextConfigLocation</param-name>  
  <param-value>classpath:applicationContext.xml</param-value>  
 </context-param>  
 <listener>  
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
 </listener>  
 <filter>  
  <filter-name>struts</filter-name>  
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  <init-param>  
   <param-name>actionPackages</param-name>  
   <param-value>cn.allwap.backend.action</param-value>  
  </init-param>  
 </filter>  
 <servlet>  
  <servlet-name>dwr</servlet-name>  
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  <init-param>  
   <param-name>debug</param-name>  
   <param-value>true</param-value>  
  </init-param>  
 </servlet>    
 <filter>  
  <filter-name>openSession</filter-name>  
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  <init-param>  
   <param-name>singleSession</param-name>  
   <param-value>false</param-value>  
  </init-param>  
 </filter>  
 <filter>  
  <filter-name>struts-cleanup</filter-name>  
  <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>  
 </filter>  
 <filter>  
  <filter-name>encodingFilter</filter-name>  
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  <init-param>  
   <param-name>encoding</param-name>  
   <param-value>UTF-8</param-value>  
  </init-param>  
 </filter>  
 <filter-mapping>  
  <filter-name>encodingFilter</filter-name>  
  <url-pattern>/*</url-pattern>  
 </filter-mapping>  
 <filter-mapping>  
  <filter-name>openSession</filter-name>  
  <url-pattern>/*</url-pattern>  
 </filter-mapping>  
 <servlet-mapping>  
  <servlet-name>dwr</servlet-name>  
  <url-pattern>/dwr/*</url-pattern>  
 </servlet-mapping>  
 <filter-mapping>  
  <filter-name>struts-cleanup</filter-name>  
  <url-pattern>/*</url-pattern>  
 </filter-mapping>  
 <filter-mapping>  
  <filter-name>struts</filter-name>  
  <url-pattern>/*</url-pattern>  
 </filter-mapping>  
   <!-- Spring hIntrospector防止内存泄露 -->  
    <listener>  
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
    </listener>  
  
       
    <!-- session时定义,单位为分?-->  
    <session-config>  
        <session-timeout>10</session-timeout>  
    </session-config>
 <welcome-file-list>  
  <welcome-file>index.jsp</welcome-file>  
  <welcome-file>default.jsp</welcome-file>  
  <welcome-file>index.html</welcome-file>  
 </welcome-file-list>  
</web-app>  
配置web action applicationContext-action.xml文g

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

     <bean id="helloWorldAction" class="com.lcsssh.web.action.HelloWorldAction"  scope="prototype"/>
      <bean id="adminInfoAction" class="com.lcsssh.web.action.AdminInfoAction"  scope="prototype">
       <property name="adminInfoServiceImpl" ref="adminInfoServiceImpl"/>
      </bean>
</beans>

配置业务层applicationContext-service.xml文g
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xmlns:lang="http://www.springframework.org/schema/lang"  
 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"  
 default-autowire="byName">  
  <bean id="adminInfoServiceImpl" class="com.lcsssh.service.impl.AdminInfoServiceImpl" scope="prototype">
   <property name="adminInfoDAO" ref="adminInfoDAO"></property>
  </bean> 
</beans>    
配置dao 层applicationContext-dao.xml文g
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xmlns:lang="http://www.springframework.org/schema/lang"  
 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"  
 default-autowire="byName">    
  <bean id="adminInfoDAO" class="com.lcsssh.dao.impl.AdminInfoDAO">
   <property name="sessionFactory">
    <ref bean="sessionFactory"/>
   </property>
  </bean>
</beans>
配置application.xml
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xmlns:lang="http://www.springframework.org/schema/lang"  
 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">  
 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  <property name="driverClassName">  
   <value>com.mysql.jdbc.Driver</value>  
  </property>  
  <property name="url">  
   <value>jdbc:mysql://localhost/test</value>  
  </property>  
  <property name="username">  
   <value>user</value>  
  </property>  
  <property name="password">  
   <value>123456</value>  
  </property>  
  <property name="maxActive">  
   <value>20</value>  
  </property>  
  <property name="maxIdle">  
   <value>5</value>  
  </property>  
  <property name="maxWait">  
   <value>-1</value>  
  </property>  
  <property name="defaultAutoCommit">  
   <value>true</value>  
  </property>  
 </bean>  
  
    
  
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  <property name="dataSource">  
   <ref local="dataSource" />  
  </property>     
  <property name="mappingDirectoryLocations">  
   <list>  
    <value>classpath:com/lcsssh/bo</value>  
   </list>  
  </property>     
  <property name="hibernateProperties">  
   <props>  
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
    <prop key="hibernate.show_sql">false</prop>  
    <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>  
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>  
    <prop key="hibernate.cache.use_query_cache">true</prop>  
   </props>  
  </property>  
 
 </bean>  
  <!-- dao object defintions -->
  <import resource="applicationContext-dao.xml"></import>
  <!-- business object defintions -->
  <import resource="applicationContext-service.xml"></import>
  <!-- web action object defintions -->
  <import resource="applicationContext-action.xml"></import>  
 <bean id="transactionManager"  
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  <property name="sessionFactory">  
   <ref bean="sessionFactory" />  
  </property>  
 </bean>  
  
 <bean id="transactionInterceptor"  
  class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  <property name="transactionManager" ref="transactionManager"></property>  
  <property name="transactionAttributes">  
   <props>  
    <prop key="save*">PROPAGATION_REQUIRED</prop>  
    <prop key="add*">PROPAGATION_REQUIRED</prop>  
    <prop key="set*">PROPAGATION_REQUIRED</prop>  
    <prop key="update*">PROPAGATION_REQUIRED</prop>  
    <prop key="delete*">PROPAGATION_REQUIRED</prop>  
    <prop key="register">PROPAGATION_REQUIRED</prop>          
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
    <prop key="valid*">PROPAGATION_REQUIRED,readOnly</prop>  
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
   </props>  
  </property>  
 </bean>   
 <bean  
  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  <property name="beanNames">  
   <value>*Service</value>  
  </property>  
  <property name="interceptorNames">  
   <value>transactionInterceptor</value>  
  </property>  
 </bean>   
 <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">  
  <property name="transactionInterceptor" ref="transactionInterceptor">  
  </property>  
 </bean>   
</beans> 
所有配|文仉|完成。然后在父工Epom.xml下加入第4步创建的web模块工程Q主要代码如下所C?br /> <modules>
  <module>webProject</module>
  <module>serviceProject</module>
  <module>daoProject</module>
 </modules>
好了Q到此ؓ止所有的配置完成

8.Ҏ数据库表生成dao 层代码,用myeclipse的生成工L成即可。另外工E中所有依赖包都在web工程下的pom.xml?br /> Z节省幅Q没有截图,希望大家体谅Q本人水qx限,有不当之处敬请包含!Q!
代码下蝲地址Q?font size="2">http://m.tkk7.com/Files/lcs868/s2shdemo.zip


lcs868 2008-12-15 17:50 发表评论
]]>
Maven2 的新Ҏ?/title><link>http://m.tkk7.com/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://m.tkk7.com/lcs868/articles/245924.html</guid><wfw:comment>http://m.tkk7.com/lcs868/comments/245924.html</wfw:comment><comments>http://m.tkk7.com/lcs868/articles/245924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/lcs868/comments/commentRss/245924.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/lcs868/services/trackbacks/245924.html</trackback:ping><description><![CDATA[<blockquote><span style="font-size: 8pt">  <blockquote>本文主要阐述 Maven2 的新Ҏ,q些新特性可以大大地~短了开发管理中的工作量Q得开发h员将_֊集中在实际的业务问题上?/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 出现到现在也有很长时间了Q初识它的感觉至今仍清晰的印在脑中。现在想来,当时?Ant UL Maven 的想法其实很朴素Q就是因?Maven 可以以网站的形式展现与项目相关的信息Q如开发h员列表、各U?Report。这U方式ؓ目的构建带来了极大的方便,其?Report 的。试惛_于生的 Junit-Report、JavaDoc、CheckStyle、PMD {报告,如果没有一个统一的入口,每次切换目录是多么o人厌烦的事情Q?/p> <p>Maven 无疑是相当成功的Q这一点从来多的开源项目开始?Maven 可以看出。Maven 取得成功的原因很单:在简化构本的同时Q功能ƈ没有~水Q反而有所增强Q提供汇集项目信息的工具Qƈ以相当友好的方式呈现Q丰富的插g化了工作。如此有力的工具出现Q自然是争相使用?/p> <p><a name="N1005E"><span id="w08ke00" class="atitle">新特?/span></a></p> <p>如今 Maven2 已经推出QMaven 的官方网站称QMaven2 相对?Maven1 是一个相当大的{变,甚至不惜牺牲兼容性来辑ֈq一目的。(Z Maven1 的用L惻IMaven1 仍在l箋他的使命。)如此大的变动到底换来了什么样的结果?</p> <p><a name="N10067"><span id="sgseeai" class="smalltitle">1Q?更快、更?/span></a></p> <p>比v Maven1 那不急不慢的q行速度QMaven2在速度上有了质的飞跃,甚至与Ant相比也毫不逊色Q当Ӟ下蝲不算Q。除此之外,"化工作,使用业界公认的最佛_?也是?Maven2 的另一大主题,其他的新Ҏ无处不在体?Maven2 为简化工作而做出的努力?/p> <p><a name="N10070"><span id="gyo8w0w" class="smalltitle">2Q?更少的配|文?/span></a></p> <p>Maven1 ?Maven2 主要配置文g的对比:</p> <ul> <li>Maven1Qproject.xml、maven.xml、project.properties和build.properties? <li>Maven2Qpom.xml和settings.xml?</li> </ul> <p>POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中用,版本也由3升?。对于项目,一般只需要pom.xmlp了?/p> <p>在Maven2中不需要也不提倡用maven.xmlQ原因如下:</p> <ul> <li>plugin的易用性的增强? <li>散布于maven.xml中的内容难以在不同项目间׃nQ也不利于维护。在Maven2中徏议用自定义的plugin来封装这些内宏V?</li> </ul> <p>如果仍期望能够用类似maven.xml的功能,?lt;preGoal>Q请参?a cmimpressionsent="1">Inserting non-standard build steps using preGoals and postGoals?/a></p> <p>在Maven2中,配置使用settings.xmlQ它取代了原有的project.properties和build.properties。配|在Maven2中存在两U别:</p> <ul> <li>用户U,针对操作pȝd用户而言。一般在$home/.m2/Q对于windows用户Q就是目录:C:\Documents and Settings\用户名\.m2\settings.xml? <li>全局U:一般在%M2_HOME%/conf/settings.xmlQM2_HOME是Maven2的根目录环境变量名?</li> </ul> <p>在settings.xml中可以配|,如本地Repository、proxy{等Q关于settings.xml的结构可以从Maven的官方网站上获取?/p> <p><a name="N100A6"><span id="6w0mkem" class="smalltitle">3Q?Plugin语言更换</span></a></p> <p>在Maven2中,~写plugin的语a由jelly变更为Java和BeanShell。Java在速度上更有优势,而且开发h员的熟悉E度更高。对于其他的行脚本Q如groovyQMaven的官方网站的意见是,{待其更成熟时再考虑</p> ? <p><a name="N100AF"><span id="80o0imk" class="smalltitle">4Q?提供预定义的目录模板</span></a></p> <p>好的目录l构可以使开发h员更Ҏ理解目Qؓ以后的维护工作也打下良好的基。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>使用目录模板Q可以pom.xml更简z。因为Maven2已经Ҏ~省目录Q预定义了相关的动作Q而无需人工的干预。以resources目录ZQ?/p> <ul> <li>src/main/resourcesQ负责管理项目主体的资源。在使用Maven2执行compile之后Q这个目录中的所有文件及子目录,会复制到target/classes目录中,Z后的打包提供了方ѝ? <li>src/test/resourcesQ负责管理项目测试的资源。在使用Maven2执行test-compile之后Q这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后l的试做好了准备?</li> </ul> <p>q些动作?Maven1 中,是需要在 maven.xml 中?lt;preGoal>?lt;postGoal>来完成的。如今,完全不需要在pom.xml中指定就能够自动完成。在src和test都用resourcesQ方便构建和试Q这U方式本已是前人的l验。通过使用Maven2Qɘq个l验在开发团队中得到普及?/p> <p>创徏标准目录模板Q可以通过如下命oQ?/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中的含义一P参数artifactId的g作ؓ目根目录的名字。除了徏立相应的目录之外QMaven2q会创徏~省的pom.xml?/p> <p>Maven2也考虑刎ͼ不同cd的项目需要拥有不同的目录l构。如创徏web目Q可以用命令:</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 id="m8w0kaq" class="smalltitle">5Q?生命周期的引?/span></a></p> <p>在Maven2中有了明的生命周期概念Q而且都提供与之对应的命oQ得项目构建更加清晰明了。主要的生命周期阶段Q?/p> <ul> <li>validateQ验证工E是否正,所有需要的资源是否可用? <li>compileQ编译项目的源代码? <li>test-compileQ编译项目测试代码? <li>testQ用已~译的测试代码,试已编译的源代码? <li>packageQ已发布的格式,如jarQ将已编译的源代码打包? <li>integration-testQ在集成试可以q行的环境中处理和发布包? <li>verifyQ运行Q何检查,验证包是否有效且辑ֈ质量标准? <li>installQ把包安装在本地的repository中,可以被其他工E作Z赖来使用 <li>deployQ在整合或者发布环境下执行Q将最l版本的包拷贝到q程的repositoryQ得其他的开发者或者工E可以共享? <li>generate-sourcesQ生应用需要的M额外的源代码Q如xdoclet?</li> </ul> <p>如果要执行项目编译,那么直接输入Qmvn compile卛_Q对于其他的阶段可以cL。阶D之间是存在依赖关系QdependencyQ的Q如test依赖test-compile。在执行mvn testӞ会先q行mvn test-compileQ然后才是mvn test?/p> <p><a name="N10120"><span id="800u080" class="smalltitle">6Q?新增Dependency Scope</span></a></p> <p>在POM 4中,<dependency>中还引入?lt;scope>Q它主要理依赖的部|Ӏ目?lt;scope>可以使用5个|</p> <ul> <li>compileQ缺省|适用于所有阶D,会随着目一起发布? <li>providedQ类似compileQ期望JDK、容器或使用者会提供q个依赖。如servlet.jar? <li>runtimeQ只在运行时使用Q如JDBC驱动Q适用q行和测试阶Dc? <li>testQ只在测试时使用Q用于编译和q行试代码。不会随目发布? <li>systemQ类似providedQ需要显式提供包含依赖的jarQMaven不会在Repository中查扑֮?</li> </ul> <p><scope>的用D例:</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"><dependency> <groupId>hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.0.3</version> <scope>test</scope> </dependency> </pre> </td> </tr> </tbody> </table> <br /> <p><a name="N10147"><span id="0msei0y" class="smalltitle">7Q?传递依赖,化依赖管?/span></a></p> <p>在Maven1中,需要把依赖所需要的包也一q列出。这对于使用cM如Hibernate的用h说所操的心太多了Q而且也不方便。在Maven2中实C传递依赖,如此对于Hibernate所依赖的包QMaven2会自动下载,开发h员只需兛_Hibernate卛_?/p> <p>注意Q只有得到Maven支持的依赖,通常是plugin形式出现Q才能获得这个特性。而且对于一些老的pluginQ可能由于时间的关系不支持传递依赖。如臛_在Maven 2.0.1中,对于Hibernate 2.1.2Q仍焉要显式列出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" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N10153"><span id="yq0sqom" class="atitle">使用?/span></a></p> <p>安装Maven2的步骤非常简单:首先从Maven官方|站下蝲相应的Y件包Q目前是Maven 2.0.1Q然后解压,q设|环境变量M2_HOME= Maven2的解压安装目录;最后将%M2_HOME%/bind到path中,方便Maven在Q何目录下q行?/p> <p>Maven2的运行命令是mvnQ用mvn -h可以获得相关的帮助信息。常用情形:</p> <ul> <li>创徏Maven目Qmvn archetype:create <li>~译源代码:mvn compile <li>~译试代码Qmvn test-compile <li>q行试Qmvn test <li>产生siteQmvn site <li>打包Qmvn package <li>在本地Repository中安装jarQmvn install <li>清除产生的项目:mvn clean </li> </ul> <p>或许是由于刚刚推出的~故QMaven2目前q是有一些不如人意的地斏V尤其是Report部分的pluginQ有的是因ؓ目前q没有,如junit-report。有的则是一些莫名其妙的问题Q如checktyle和pmdQ在本地locale下都无法正常工作。以pmd举例Q在产生PMD报告时会抛出如下异常Q?/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) …… </pre> </td> </tr> </tbody> </table> <br /> <p>q运的是QMaven2一出现备受关注,要不了多长时_诸如此类的问题应该就会很快解冟?/p> </span></blockquote> <img src ="http://m.tkk7.com/lcs868/aggbug/245924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/lcs868/" target="_blank">lcs868</a> 2008-12-12 13:05 <a href="http://m.tkk7.com/lcs868/articles/245924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2使用手册http://m.tkk7.com/lcs868/articles/245923.htmllcs868lcs868Fri, 12 Dec 2008 04:57:00 GMThttp://m.tkk7.com/lcs868/articles/245923.htmlhttp://m.tkk7.com/lcs868/comments/245923.htmlhttp://m.tkk7.com/lcs868/articles/245923.html#Feedback0http://m.tkk7.com/lcs868/comments/commentRss/245923.htmlhttp://m.tkk7.com/lcs868/services/trackbacks/245923.html阅读全文

lcs868 2008-12-12 12:57 发表评论
]]>
maven2完全使用手册http://m.tkk7.com/lcs868/articles/245920.htmllcs868lcs868Fri, 12 Dec 2008 04:51:00 GMThttp://m.tkk7.com/lcs868/articles/245920.htmlhttp://m.tkk7.com/lcs868/comments/245920.htmlhttp://m.tkk7.com/lcs868/articles/245920.html#Feedback0http://m.tkk7.com/lcs868/comments/commentRss/245920.htmlhttp://m.tkk7.com/lcs868/services/trackbacks/245920.html阅读全文

lcs868 2008-12-12 12:51 发表评论
]]>
Maven使用手册http://m.tkk7.com/lcs868/articles/245919.htmllcs868lcs868Fri, 12 Dec 2008 04:48:00 GMThttp://m.tkk7.com/lcs868/articles/245919.htmlhttp://m.tkk7.com/lcs868/comments/245919.htmlhttp://m.tkk7.com/lcs868/articles/245919.html#Feedback0http://m.tkk7.com/lcs868/comments/commentRss/245919.htmlhttp://m.tkk7.com/lcs868/services/trackbacks/245919.html来自:http://www.jieesoft.com/modules.php?name=News&file=article&sid=155

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

  1. 关于手册
  2. ?/span>
  3. 目对象模型
  4. POM 处理机制
    1. POM 插值机?/span>
    2. POM l承机制

  5. 使用插g
  6. maven.xml文g

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

  7. Maven 配置

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

  8. 目讄

    1. 开始一个新目

  9. 构徏

    1. 构徏生命周期
    2. 在CVS中存放jar文g
    3. 重蝲已声明的依赖?/span>
    4. 使用SNAPSHOT依赖
    5. 多项目构建和Reactor
    6. ȝ构徏
    7. 命o行选项介绍





    1. 试资源
    2. q行一个单独的试

  10. 打包



    1. JAR 资源

  11. 部v



    1. 固化SNAPSHOT依赖
    2. 拯依赖JAR?/span>

  12. 命名U定

    1. 规则和指?/span>

    2. 依赖
    3. 发布多个包的目

  13. q程Repository布局
  14. 本地Repository布局
  15. 生成目站点

    1. 颜色
    2. 风格
    3. 报告





关于手册
q篇Maven使用手册意在通过提供完整的描q和例子Q帮助开发h员了解Maven?如果你有M或者意见请?
Maven使用者邮件列?/span>上发?
感谢选择Maven!

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

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

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

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

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

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

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

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

**/*Test*.java

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

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

3
commons
commons-master
Commons Master Maven POM

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



forEach

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


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


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



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

Maven 配置

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

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


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

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

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


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

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

Checkstyle׃使用Turbine的编码规范?

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

属?
描述
~省?

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

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

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

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

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

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

false

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

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

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

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

maven.mode.online
是否q接internet
true

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

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

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

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

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

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

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

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

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

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

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

代理属?
描述

maven.proxy.host
代理的IP地址

maven.proxy.port
代理端口

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

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

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

目讄

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

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

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

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

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

构徏生命周期

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

naughty.properties

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

打包
JAR 资源
...

${basedir}/src/conf

*.xml
*.properties

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

部v

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

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

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

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

...
...

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

规则和指?/span>

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

bar
foo
...

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

bar
foo
The Grand Master Foo
...

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

...

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


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

yourProject
yourArtifact
Your Groovey Machine
...

bar
foo
1.0

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

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

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

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

ant
ant-optional
1.4.1
ant
poorly-named
1.4.1

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

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

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

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

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

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

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

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



lcs868 2008-12-12 12:48 发表评论
]]>
վ֩ģ壺 һëƬѲ| ޹һ| ޾Ʒһ23Ŀ| ѾƷAVƬ߹ۿ| vaþþþ| aɫëƬƵ| Ʒ޾Ʒ| йͽxxxxxѿ| ˵һ | ˴ֳսŮ2021ƷƵ | ĻӰѹۿ| һƷƵ| ҳѵվֱӽ| ַ߹ۿ| ޾Ʒվ| 츾V߲| 쿴ѸӰ| AVһ| Ļ߾Ʒѹۿַ| Ůվ| ѹһػƾþ| һȫƵ| ޵һAAAAAƬ| 88xxѹۿ| Ʒ޳AV| ŮƷƵѹۿ| һëƬƵ| AV˿߹ۿ| ĻƵ| ŷۺһ| ĻŮһ| þþþƷƵ| AVɫ˿| ޾Ʒ뼤AV| 99þùĻ| | Ƶһ| 8x8Ƶ| ƷƵ| ޡvþþ뾫Ʒ| ձҹѸƵ|