pom.xml之(二)

 pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
快速察看:

<project>
<modelVersion>4.0.0</modelVersion>

<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>

<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>

<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>

<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>

基本内容:
    POM包括了所有的项目信息。
maven 相关:
pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素

groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
artifactId: 项目的通用名称
version:项目的版本
packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
classifier: 分类
POM关系:
主要为依赖,继承,合成
依赖关系:
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
</dependencies>

groupId, artifactId, version:描述了依赖的项目唯一标志
可以通过以下方式进行安装:

使用以下的命令安装:
mvn install:install-file –Dfile=non-maven-proj.jar –DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1
创建自己的库,并配置,使用deploy:deploy-file
设置此依赖范围为system,定义一个系统路径。不提倡。
type:相应的依赖产品包形式,如jar,war
scope:用于限制相应的依赖范围,包括以下的几种变量:
compile :默认范围,用于编译
provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
runtime:在执行时,需要使用
test:用于test任务时使用
system:需要外在提供相应得元素。通过systemPath来取得
systemPath: 仅用于范围为system。提供相应的路径
optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用
   独占性  
   外在告诉maven你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题
<dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-embedder</artifactId>
      <version>2.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core

继承关系
    另一个强大的变化,maven带来的是项目继承。主要的设置:
定义父项目
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<packaging>pom</packaging>
</project>
    packaging 类型,需要pom用于parent和合成多个项目。我们需要增加相应的值给父pom,用于子项目继承。主要的元素如下:

依赖型
开发者和合作者
插件列表
报表列表
插件执行使用相应的匹配ids
插件配置
子项目配置
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>my-parent</artifactId>
    <version>2.0</version>
    <relativePath>../my-parent</relativePath>
</parent>
<artifactId>my-project</artifactId>
</project>
relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

dependencyManagement:
用于父项目配置共同的依赖关系,主要配置依赖包相同因素,如版本,scope。

合成(或者多个模块)
    一个项目有多个模块,也叫做多重模块,或者合成项目。
如下的定义:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/2008920/143858.html)


 

Java代码 复制代码
  1. Distribution Management   
  2. 用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置   
  3. 1  配置到文件系统   
  4.  <distributionManagement>    
  5.   <repository>     
  6.   <id>proficio-repository<id>    
  7.   <name>Proficio Repository</name>    
  8.   <url>file://${basedir}/target/deploy</url>    
  9.   </repository>    
  10.   </distributionManagement>      
Distribution Management
用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
1 配置到文件系统
 <distributionManagement> 
  <repository>  
  <id>proficio-repository<id> 
  <name>Proficio Repository</name> 
  <url>file://${basedir}/target/deploy</url> 
  </repository> 
  </distributionManagement>    




Java代码 复制代码
  1. <?xml version="1.0"  encoding="ISO-8859-1" ?>   
  2. <project>   
  3.  <modelVersion>4.0 .0 </modelVersion>   
  4.  <groupId>tudu</groupId>   
  5.  <artifactId>tudu</artifactId>   
  6.  <packaging>war</packaging>   
  7.  <name>Tudu Lists</name>   
  8.  <version>1.1 -rc-1 </version>   
  9.  <description>   
  10.   A Web application for  managing todo lists.   
  11.  </description>   
  12.  <url>http://sourceforge.net/projects/tudu/</url>   
  13.  <issueManagement>   
  14.   <system>SourceForge</system>   
  15.   <url>http://sourceforge.net/tracker/?group_id=131842</url>   
  16.  </issueManagement>   
  17.  <inceptionYear>2005 </inceptionYear>   
  18.  <repositories>   
  19.   <repository>   
  20.    <id>maven2</id>   
  21.    <name>Default Maven2 repository</name>   
  22.    <url>http://repo1.maven.org/maven2</url>   
  23.   </repository>   
  24.   <repository>   
  25.    <id>julien.dubois.private .repo</id>   
  26.    <name>   
  27.     Julien Dubois private  Maven repository - personnal use   
  28.     only   
  29.    </name>   
  30.    <url>http://julien.dubois.free.fr/maven2</url>   
  31.   </repository>   
  32.  </repositories>   
  33.  <developers>   
  34.   <developer>   
  35.    <name>Julien Dubois</name>   
  36.    <id>roullian</id>   
  37.    <email></email>   
  38.    <url>http://www.julien-dubois.com</url>   
  39.    <organization></organization>   
  40.   </developer>   
  41.   <developer>   
  42.    <name>Jerome Morille</name>   
  43.    <id>jmorille</id>   
  44.    <email></email>   
  45.    <organization></organization>   
  46.   </developer>   
  47.   <developer>   
  48.    <name>Jean-Philippe Retaille</name>   
  49.    <id>retaille</id>   
  50.    <email></email>   
  51.    <organization></organization>   
  52.   </developer>   
  53.   <developer>   
  54.    <name>Ralph Schaer</name>   
  55.    <id>rasch</id>   
  56.    <email></email>   
  57.    <organization></organization>   
  58.   </developer>   
  59.   <developer>   
  60.    <name>Thierry Templier</name>   
  61.    <id>templth</id>   
  62.    <email></email>   
  63.    <organization></organization>   
  64.   </developer>   
  65.  </developers>   
  66.  <licenses>   
  67.   <license>   
  68.    <name>GNU General Public License</name>   
  69.    <url>http://www.gnu.org/copyleft/gpl.html</url>   
  70.   </license>   
  71.  </licenses>   
  72.  <dependencies>   
  73.   <dependency>   
  74.    <groupId>aspectj</groupId>   
  75.    <artifactId>aspectjrt</artifactId>   
  76.    <version>1.5 .0 </version>   
  77.    <scope>runtime</scope>   
  78.   </dependency>   
  79.   <dependency>   
  80.    <groupId>aspectj</groupId>   
  81.    <artifactId>aspectjweaver</artifactId>   
  82.    <version>1.5 .0 </version>   
  83.    <scope>runtime</scope>   
  84.   </dependency>   
  85.   <dependency>   
  86.    <groupId>axis</groupId>   
  87.    <artifactId>axis-ant</artifactId>   
  88.    <version>1.3 </version>   
  89.    <scope>compile</scope>   
  90.   </dependency>   
  91.   <dependency>   
  92.    <groupId>axis</groupId>   
  93.    <artifactId>axis-ant</artifactId>   
  94.    <version>1.3 </version>   
  95.    <scope>compile</scope>   
  96.   </dependency>   
  97.   <dependency>   
  98.    <groupId>axis</groupId>   
  99.    <artifactId>axis</artifactId>   
  100.    <version>1.3 </version>   
  101.    <scope>compile</scope>   
  102.   </dependency>   
  103.   <dependency>   
  104.    <groupId>axis</groupId>   
  105.    <artifactId>axis-saaj</artifactId>   
  106.    <version>1.3 </version>   
  107.    <scope>compile</scope>   
  108.   </dependency>   
  109.   <dependency>   
  110.    <groupId>axis</groupId>   
  111.    <artifactId>axis-wsdl4j</artifactId>   
  112.    <version>1.3 </version>   
  113.    <scope>compile</scope>   
  114.   </dependency>   
  115.   <dependency>   
  116.    <groupId>com.jamonapi</groupId>   
  117.    <artifactId>jamon</artifactId>   
  118.    <version>1.0 </version>   
  119.    <scope>compile</scope>   
  120.   </dependency>   
  121.   <dependency>   
  122.    <groupId>commons-lang</groupId>   
  123.    <artifactId>commons-lang</artifactId>   
  124.    <version>2.1 </version>   
  125.    <scope>compile</scope>   
  126.   </dependency>   
  127.   <dependency>   
  128.    <groupId>commons-logging</groupId>   
  129.    <artifactId>commons-logging</artifactId>   
  130.    <version>1.0 .4 </version>   
  131.    <scope>compile</scope>   
  132.    <exclusions>   
  133.     <exclusion>   
  134.      <groupId>logkit</groupId>   
  135.      <artifactId>logkit</artifactId>   
  136.     </exclusion>   
  137.     <exclusion>   
  138.      <groupId>junit</groupId>   
  139.      <artifactId>junit</artifactId>   
  140.     </exclusion>   
  141.     <exclusion>   
  142.      <groupId>avalon-framework</groupId>   
  143.      <artifactId>avalon-framework</artifactId>   
  144.     </exclusion>   
  145.    </exclusions>   
  146.   </dependency>   
  147.   <dependency>   
  148.    <groupId>dbunit</groupId>   
  149.    <artifactId>dbunit</artifactId>   
  150.    <version>2.1 </version>   
  151.    <scope>compile</scope>   
  152.   </dependency>   
  153.   <dependency>   
  154.    <groupId>dom4j</groupId>   
  155.    <artifactId>dom4j</artifactId>   
  156.    <version>1.6 </version>   
  157.    <exclusions>   
  158.     <exclusion>   
  159.      <groupId>jaxme</groupId>   
  160.      <artifactId>jaxme-api</artifactId>   
  161.     </exclusion>   
  162.     <exclusion>   
  163.      <groupId>jaxen</groupId>   
  164.      <artifactId>jaxen</artifactId>   
  165.     </exclusion>   
  166.     <exclusion>   
  167.      <groupId>msv</groupId>   
  168.      <artifactId>xsdlib</artifactId>   
  169.     </exclusion>   
  170.     <exclusion>   
  171.      <groupId>msv</groupId>   
  172.      <artifactId>relaxngDatatype</artifactId>   
  173.     </exclusion>   
  174.     <exclusion>   
  175.      <groupId>pull-parser</groupId>   
  176.      <artifactId>pull-parser</artifactId>   
  177.     </exclusion>   
  178.     <exclusion>   
  179.      <groupId>xpp3</groupId>   
  180.      <artifactId>xpp3</artifactId>   
  181.     </exclusion>   
  182.     <exclusion>   
  183.      <groupId>stax</groupId>   
  184.      <artifactId>stax-api</artifactId>   
  185.     </exclusion>   
  186.     <exclusion>   
  187.      <groupId>xml-apis</groupId>   
  188.      <artifactId>xml-apis</artifactId>   
  189.     </exclusion>   
  190.     <exclusion>   
  191.      <groupId>junitperf</groupId>   
  192.      <artifactId>junitperf</artifactId>   
  193.     </exclusion>   
  194.     <exclusion>   
  195.      <groupId>stax</groupId>   
  196.      <artifactId>stax-ri</artifactId>   
  197.     </exclusion>   
  198.     <exclusion>   
  199.      <groupId>xalan</groupId>   
  200.      <artifactId>xalan</artifactId>   
  201.     </exclusion>   
  202.    </exclusions>   
  203.   </dependency>   
  204.   <dependency>   
  205.    <groupId>ehcache</groupId>   
  206.    <artifactId>ehcache</artifactId>   
  207.    <version>1.1 </version>   
  208.    <scope>compile</scope>   
  209.   </dependency>   
  210.   <dependency>   
  211.    <groupId>hsqldb</groupId>   
  212.    <artifactId>hsqldb</artifactId>   
  213.    <version>1.8 .0.1 </version>   
  214.    <scope>test</scope>   
  215.   </dependency>   
  216.   <dependency>   
  217.    <groupId>javax.activation</groupId>   
  218.    <artifactId>activation</artifactId>   
  219.    <version>1.0 .2 </version>   
  220.    <scope>provided</scope>   
  221.   </dependency>   
  222.   <dependency>   
  223.    <groupId>javax.mail</groupId>   
  224.    <artifactId>mail</artifactId>   
  225.    <version>1.3 .2 </version>   
  226.    <scope>provided</scope>   
  227.   </dependency>   
  228.   <dependency>   
  229.    <groupId>javax.servlet</groupId>   
  230.    <artifactId>jstl</artifactId>   
  231.    <version>1.1 .2 </version>   
  232.    <scope>compile</scope>   
  233.    <exclusions>   
  234.     <exclusion>   
  235.      <groupId>javax.servlet</groupId>   
  236.      <artifactId>jsp-api</artifactId>   
  237.     </exclusion>   
  238.    </exclusions>   
  239.   </dependency>   
  240.   <dependency>   
  241.    <groupId>javax.servlet</groupId>   
  242.    <artifactId>servlet-api</artifactId>   
  243.    <version>2.4 </version>   
  244.    <scope>provided</scope>   
  245.   </dependency>   
  246.   <dependency>   
  247.    <groupId>jdom</groupId>   
  248.    <artifactId>jdom</artifactId>   
  249.    <version>1.0 </version>   
  250.    <scope>compile</scope>   
  251.   </dependency>   
  252.   <dependency>   
  253.    <groupId>junit</groupId>   
  254.    <artifactId>junit</artifactId>   
  255.    <version>3.8 .1 </version>   
  256.    <scope>test</scope>   
  257.   </dependency>   
  258.   <dependency>   
  259.    <groupId>log4j</groupId>   
  260.    <artifactId>log4j</artifactId>   
  261.    <version>1.2 .13 </version>   
  262.    <scope>compile</scope>   
  263.   </dependency>   
  264.   <dependency>   
  265.    <groupId>rome</groupId>   
  266.    <artifactId>rome</artifactId>   
  267.    <version>0.5 </version>   
  268.    <scope>compile</scope>   
  269.   </dependency>   
  270.   <dependency>   
  271.    <groupId>org.acegisecurity</groupId>   
  272.    <artifactId>acegi-security</artifactId>   
  273.    <version>1.0 .0 -RC1</version>   
  274.    <scope>compile</scope>   
  275.   </dependency>   
  276.   <dependency>   
  277.    <groupId>org.easymock</groupId>   
  278.    <artifactId>easymock</artifactId>   
  279.    <version>2.0 </version>   
  280.    <scope>test</scope>   
  281.   </dependency>   
  282.   <dependency>   
  283.    <groupId>org.hibernate</groupId>   
  284.    <artifactId>hibernate</artifactId>   
  285.    <version>3.1 .2 </version>   
  286.    <scope>compile</scope>   
  287.    <exclusions>   
  288.     <exclusion>   
  289.      <groupId>javax.transaction</groupId>   
  290.      <artifactId>jta</artifactId>   
  291.     </exclusion>   
  292.    </exclusions>   
  293.   </dependency>   
  294.   <dependency>   
  295.    <groupId>org.springframework</groupId>   
  296.    <artifactId>spring-aop</artifactId>   
  297.    <version>2.0 -m2</version>   
  298.    <scope>compile</scope>   
  299.   </dependency>   
  300.   <dependency>   
  301.    <groupId>org.springframework</groupId>   
  302.    <artifactId>spring-aspects</artifactId>   
  303.    <version>2.0 -m2</version>   
  304.    <scope>compile</scope>   
  305.   </dependency>   
  306.   <dependency>   
  307.    <groupId>org.springframework</groupId>   
  308.    <artifactId>spring-beans</artifactId>   
  309.    <version>2.0 -m2</version>   
  310.    <scope>compile</scope>   
  311.   </dependency>   
  312.   <dependency>   
  313.    <groupId>org.springframework</groupId>   
  314.    <artifactId>spring-context</artifactId>   
  315.    <version>2.0 -m2</version>   
  316.    <scope>compile</scope>   
  317.   </dependency>   
  318.   <dependency>   
  319.    <groupId>org.springframework</groupId>   
  320.    <artifactId>spring-core</artifactId>   
  321.    <version>2.0 -m2</version>   
  322.    <scope>compile</scope>   
  323.   </dependency>   
  324.   <dependency>   
  325.    <groupId>org.springframework</groupId>   
  326.    <artifactId>spring-dao</artifactId>   
  327.    <version>2.0 -m2</version>   
  328.    <scope>compile</scope>   
  329.   </dependency>   
  330.   <dependency>   
  331.    <groupId>org.springframework</groupId>   
  332.    <artifactId>spring-hibernate3</artifactId>   
  333.    <version>2.0 -m2</version>   
  334.    <scope>compile</scope>   
  335.    <exclusions>   
  336.     <exclusion>   
  337.      <groupId>org.hibernate</groupId>   
  338.      <artifactId>hibernate-annotations</artifactId>   
  339.     </exclusion>   
  340.    </exclusions>   
  341.   </dependency>   
  342.   <dependency>   
  343.    <groupId>org.springframework</groupId>   
  344.    <artifactId>spring-jdbc</artifactId>   
  345.    <version>2.0 -m2</version>   
  346.    <scope>compile</scope>   
  347.   </dependency>   
  348.   <dependency>   
  349.    <groupId>org.springframework</groupId>   
  350.    <artifactId>spring-mock</artifactId>   
  351.    <version>2.0 -m2</version>   
  352.    <scope>test</scope>   
  353.   </dependency>   
  354.   <dependency>   
  355.    <groupId>org.springframework</groupId>   
  356.    <artifactId>spring-remoting</artifactId>   
  357.    <version>2.0 -m2</version>   
  358.    <scope>compile</scope>   
  359.   </dependency>   
  360.   <dependency>   
  361.    <groupId>org.springframework</groupId>   
  362.    <artifactId>spring-support</artifactId>   
  363.    <version>2.0 -m2</version>   
  364.    <scope>compile</scope>   
  365.   </dependency>   
  366.   <dependency>   
  367.    <groupId>org.springframework</groupId>   
  368.    <artifactId>spring-web</artifactId>   
  369.    <version>2.0 -m2</version>   
  370.    <scope>compile</scope>   
  371.   </dependency>   
  372.   <dependency>   
  373.    <groupId>org.springframework</groupId>   
  374.    <artifactId>spring-webmvc</artifactId>   
  375.    <version>2.0 -m2</version>   
  376.    <scope>compile</scope>   
  377.   </dependency>   
  378.   <dependency>   
  379.    <groupId>struts</groupId>   
  380.    <artifactId>struts</artifactId>   
  381.    <version>1.2 .8 </version>   
  382.    <scope>compile</scope>   
  383.   </dependency>   
  384.   <dependency>   
  385.    <groupId>struts-menu</groupId>   
  386.    <artifactId>struts-menu</artifactId>   
  387.    <version>2.3 </version>   
  388.    <scope>runtime</scope>   
  389.    <exclusions>   
  390.     <exclusion>   
  391.      <groupId>hsqldb</groupId>   
  392.      <artifactId>hsqldb</artifactId>   
  393.     </exclusion>   
  394.     <exclusion>   
  395.      <groupId>velocity</groupId>   
  396.      <artifactId>velocity</artifactId>   
  397.     </exclusion>   
  398.     <exclusion>   
  399.      <groupId>velocity-tools</groupId>   
  400.      <artifactId>velocity-tools</artifactId>   
  401.     </exclusion>   
  402.    </exclusions>   
  403.   </dependency>   
  404.   <dependency>   
  405.    <groupId>strutstestcase</groupId>   
  406.    <artifactId>strutstestcase</artifactId>   
  407.    <version>2.1 .2 -1.1 -2.3 </version>   
  408.    <scope>test</scope>   
  409.   </dependency>   
  410.   <dependency>   
  411.    <groupId>taglibs</groupId>   
  412.    <artifactId>standard</artifactId>   
  413.    <version>1.1 .2 </version>   
  414.    <scope>compile</scope>   
  415.   </dependency>   
  416.   <dependency>   
  417.    <groupId>tomcat</groupId>   
  418.    <artifactId>jsp-api</artifactId>   
  419.    <version>5.0 .18 </version>   
  420.    <scope>provided</scope>   
  421.   </dependency>   
  422.   <dependency>   
  423.    <groupId>uk.ltd.getahead</groupId>   
  424.    <artifactId>dwr</artifactId>   
  425.    <version>1.1 -SNAPSHOT</version>   
  426.    <scope>compile</scope>   
  427.   </dependency>   
  428.   <dependency>   
  429.    <groupId>xfire</groupId>   
  430.    <artifactId>xfire-all</artifactId>   
  431.    <version>1.0 -M6</version>   
  432.    <scope>deploy</scope>   
  433.    <exclusions>   
  434.     <exclusion>   
  435.      <groupId>javamail</groupId>   
  436.      <artifactId>javamail</artifactId>   
  437.     </exclusion>   
  438.    </exclusions>   
  439.   </dependency>   
  440.  </dependencies>   
  441.  <reporting>   
  442.   <plugins>   
  443.    <plugin>   
  444.     <groupId>org.apache.maven.plugins</groupId>   
  445.     <artifactId>   
  446.      maven-project-info-reports-plugin   
  447.     </artifactId>   
  448.     <reportSets>   
  449.      <reportSet>   
  450.       <reports>   
  451.        <report>dependencies</report>   
  452.        <report>project-team</report>   
  453.        <report>issue-tracking</report>   
  454.        <report>license</report>   
  455.        <report>scm</report>   
  456.       </reports>   
  457.      </reportSet>   
  458.     </reportSets>   
  459.    </plugin>   
  460.    <plugin>   
  461.     <groupId>org.apache.maven.plugins</groupId>   
  462.     <artifactId>maven-javadoc-plugin</artifactId>   
  463.    </plugin>   
  464.    <plugin>   
  465.     <groupId>org.codehaus.mojo</groupId>   
  466.     <artifactId>surefire-report-maven-plugin</artifactId>   
  467.    </plugin>   
  468.    <plugin>   
  469.     <groupId>org.codehaus.mojo</groupId>   
  470.     <artifactId>jxr-maven-plugin</artifactId>   
  471.    </plugin>   
  472.   </plugins>   
  473.  </reporting>   
  474.  <scm>   
  475.   <connection>   
  476.    scm:cvs:pserver:anonymous@cvs .sourceforge.net:/cvsroot/tudu:tudu   
  477.   </connection>   
  478.   <developerConnection>   
  479.    scm:cvs:extssh:${maven.username}@cvs .sourceforge.net:/cvsroot/tudu:tudu   
  480.   </developerConnection>   
  481.   <url>http://cvs.sourceforge.net/viewcvs.py/tudu/tudu/</url>   
  482.  </scm>   
  483.  <build>   
  484.   <sourceDirectory>src/java</sourceDirectory>   
  485.   <testSourceDirectory>test/java</testSourceDirectory>   
  486.   <resources>   
  487.    <resource>   
  488.     <directory>src/resources</directory>   
  489.    </resource>   
  490.   </resources>   
  491.   <testResources>   
  492.    <testResource>   
  493.     <directory>test/resources</directory>   
  494.    </testResource>   
  495.   </testResources>   
  496.   <plugins>   
  497.    <plugin>   
  498.     <artifactId>maven-assembly-plugin</artifactId>   
  499.     <configuration>   
  500.      <descriptor>   
  501.       src/main/assembly/distribution.xml   
  502.      </descriptor>   
  503.     </configuration>   
  504.    </plugin>   
  505.    <plugin>   
  506.     <groupId>org.apache.maven.plugins</groupId>   
  507.     <artifactId>maven-compiler-plugin</artifactId>   
  508.     <inherited>true </inherited>   
  509.     <configuration>   
  510.      <source>1.5 </source>   
  511.      <target>1.5 </target>   
  512.     </configuration>   
  513.    </plugin>   
  514.    <plugin>   
  515.     <groupId>org.apache.maven.plugins</groupId>   
  516.     <artifactId>maven-surefire-plugin</artifactId>   
  517.     <configuration>   
  518.      <systemProperties>   
  519.       <property>   
  520.        <name>tudu.webapp.dir</name>   
  521.        <value>${basedir}/src/webapp/</value>   
  522.       </property>   
  523.      </systemProperties>   
  524.      <excludes>   
  525.       <exclude>   
  526.        tudu/web/TuduBaseMockStrutsTestCase.java   
  527.       </exclude>   
  528.      </excludes>   
  529.     </configuration>   
  530.    </plugin>   
  531.    <plugin>   
  532.     <groupId>org.apache.maven.plugins</groupId>   
  533.     <artifactId>maven-war-plugin</artifactId>   
  534.     <configuration>   
  535.      <warSourceDirectory>src/webapp</warSourceDirectory>   
  536.     </configuration>   
  537.    </plugin>   
  538.    <plugin>   
  539.     <groupId>org.apache.maven.plugins</groupId>   
  540.     <artifactId>maven-site-plugin</artifactId>   
  541.     <configuration>   
  542.      <locales>en</locales>   
  543.     </configuration>   
  544.    </plugin>   
  545.   </plugins>   
  546.  </build>   
  547.  <distributionManagement>   
  548.   <site>   
  549.    <id>tudu-website</id>   
  550.    <url>scp://shell.sf.net/home/groups/t/tu/tudu/htdocs/</url>   
  551.   </site>   
  552.  </distributionManagement>   
  553. </project>  
()
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
快速察看:
<project>
  <modelVersion>4.0.0</modelVersion>

  <!-- The Basics -->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>

  <!-- Build Settings -->
  <build>...</build>
  <reporting>...</reporting>

  <!-- More Project Information -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

  <!-- Environment Settings -->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists>
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

基本内容:
    POM包括了所有的项目信息。
maven 相关:
pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素

groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
artifactId: 项目的通用名称
version:项目的版本
packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
classifier: 分类
POM关系:
主要为依赖,继承,合成
  依赖关系:
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
  </dependencies>

groupId, artifactId, version:描述了依赖的项目唯一标志
可以通过以下方式进行安装:

使用以下的命令安装:
mvn install:install-file –Dfile=non-maven-proj.jar –DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1
创建自己的库,并配置,使用deploy:deploy-file
设置此依赖范围为system,定义一个系统路径。不提倡。
type:相应的依赖产品包形式,如jar,war
scope:用于限制相应的依赖范围,包括以下的几种变量:
compile :默认范围,用于编译
provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
runtime:在执行时,需要使用
test:用于test任务时使用
system:需要外在提供相应得元素。通过systemPath来取得
systemPath: 仅用于范围为system。提供相应的路径
optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用
   独占性   
   外在告诉maven你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-embedder</artifactId>
      <version>2.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core

继承关系
    另一个强大的变化,maven带来的是项目继承。主要的设置:
定义父项目
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>
</project>
    packaging 类型,需要pom用于parent和合成多个项目。我们需要增加相应的值给父pom,用于子项目继承。主要的元素如下:

依赖型
开发者和合作者
插件列表
报表列表
插件执行使用相应的匹配ids
插件配置
子项目配置
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>my-parent</artifactId>
    <version>2.0</version>
    <relativePath>../my-parent</relativePath>
  </parent>
  <artifactId>my-project</artifactId>
</project>
relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

dependencyManagement:
用于父项目配置共同的依赖关系,主要配置依赖包相同因素,如版本,scope。

合成(或者多个模块)
    一个项目有多个模块,也叫做多重模块,或者合成项目。
如下的定义:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <modules>
    <module>my-project1<module>
    <module>my-project2<module>
  </modules>
</project>

build 设置
    主要用于编译设置,包括两个主要的元素,build和report
  build
    主要分为两部分,基本元素和扩展元素集合
注意:包括项目build和profile build
<project>
  <!-- "Project Build" contains more elements than just the BaseBuild set -->
  <build>...</build>
  <profiles>
    <profile>
      <!-- "Profile Build" contains a subset of "Project Build"s elements -->
      <build>...</build>
    </profile>
  </profiles>
</project>

基本元素
<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  <filters>
    <filter>filters/filter1.properties</filter>
  </filters>
  ...
</build>


defaultGoal: 定义默认的目标或者阶段。如install
directory: 编译输出的目录
finalName: 生成最后的文件的样式
filter: 定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值

资源(resources)
    你项目中需要指定的资源。如spring配置文件,log4j.properties
<project>
  <build>
    ...
    <resources>
      <resource>
        <targetPath>META-INF/plexus</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/src/main/plexus</directory>
        <includes>
          <include>configuration.xml</include>
        </includes>
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      ...
    </testResources>
    ...
  </build>
</project>


resources: resource的列表,用于包括所有的资源
targetPath: 指定目标路径,用于放置资源,用于build
filtering: 是否替换资源中的属性placehold
directory: 资源所在的位置
includes: 样式,包括那些资源
excludes: 排除的资源
testResources: 测试资源列表
插件
  在build时,执行的插件,比较有用的部分,如使用jdk 5.0编译等等
<project>
  <build>
    ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.0</version>
        <extensions>false</extensions>
        <inherited>true</inherited>
        <configuration>
          <classifier>test</classifier>
        </configuration>
        <dependencies>...</dependencies>
        <executions>...</executions>
      </plugin>
    </plugins>
  </build>
</project>

extensions: true or false,是否装载插件扩展。默认false
inherited: true or false,是否此插件配置将会应用于poms,那些继承于此的项目
configuration: 指定插件配置
dependencies: 插件需要依赖的包
executions: 用于配置execution目标,一个插件可以有多个目标。
如下:
    <plugin>
        <artifactId>maven-antrun-plugin</artifactId>

        <executions>
          <execution>
            <id>echodir</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>verify</phase>
            <inherited>false</inherited>
            <configuration>
              <tasks>
                <echo>Build Dir: ${project.build.directory}</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
  说明:

id:规定execution 的唯一标志
goals: 表示目标
phase: 表示阶段,目标将会在什么阶段执行
inherited: 和上面的元素一样,设置false maven将会拒绝执行继承给子插件
configuration: 表示此执行的配置属性

插件管理
    pluginManagement:插件管理以同样的方式包括插件元素,用于在特定的项目中配置。所有继承于此项目的子项目都能使用。主要定义插件的共同元素

扩展元素集合
主要包括以下的元素:
Directories
用于设置各种目录结构,如下:
  <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
  </build>

Extensions

表示需要扩展的插件,必须包括进相应的build路径。

<project>
  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>1.0-alpha-3</version>
      </extension>
    </extensions>
    ...
  </build>
</project>

Reporting
    用于在site阶段输出报表。特定的maven 插件能输出相应的定制和配置报表。
  <reporting>
    <plugins>
      <plugin>
        <outputDirectory>${basedir}/target/site</outputDirectory>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <reportSets>
          <reportSet></reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

Report Sets
    用于配置不同的目标,应用于不同的报表
<reporting>
    <plugins>
      <plugin>
        ...
        <reportSets>
          <reportSet>
            <id>sunlink</id>
            <reports>
              <report>javadoc</report>
            </reports>
            <inherited>true</inherited>
            <configuration>
              <links>
                <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
              </links>
            </configuration>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

更多的项目信息
name:项目除了artifactId外,可以定义多个名称
description: 项目描述
url: 项目url
inceptionYear:创始年份

Licenses
<licenses>
  <license>
    <name>Apache 2</name>
    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    <distribution>repo</distribution>
    <comments>A business-friendly OSS license</comments>
  </license>
</licenses>

Organization
配置组织信息
  <organization>
    <name>Codehaus Mojo</name>
    <url>http://mojo.codehaus.org</url>
  </organization>

Developers
配置开发者信息
<developers>
    <developer>
      <id>eric</id>
      <name>Eric</name>
      <email>eredmond@codehaus.org</email>
      <url>http://eric.propellors.net</url>
      <organization>Codehaus</organization>
      <organizationUrl>http://mojo.codehaus.org</organizationUrl>
      <roles>
        <role>architect</role>
        <role>developer</role>
      </roles>
      <timezone>-6</timezone>
      <properties>
        <picUrl>http://tinyurl.com/prv4t</picUrl>
      </properties>
    </developer>
  </developers>

Contributors
  <contributors>
    <contributor>
      <name>Noelle</name>
      <email>some.name@gmail.com</email>
      <url>http://noellemarie.com</url>
      <organization>Noelle Marie</organization>
      <organizationUrl>http://noellemarie.com</organizationUrl>
      <roles>
        <role>tester</role>
      </roles>
      <timezone>-5</timezone>
      <properties>
        <gtalk>some.name@gmail.com</gtalk>
      </properties>
    </contributor>
  </contributors>

环境设置

Issue Management
    定义相关的bug跟踪系统,如bugzilla,testtrack,clearQuest等
  <issueManagement>
    <system>Bugzilla</system>
    <url>http://127.0.0.1/bugzilla</url>
  </issueManagement>
Continuous Integration Management
连续整合管理,基于triggers或者timings
  <ciManagement>
    <system>continuum</system>
    <url>http://127.0.0.1:8080/continuum</url>
    <notifiers>
      <notifier>
        <type>mail</type>
        <sendOnError>true</sendOnError>
        <sendOnFailure>true</sendOnFailure>
        <sendOnSuccess>false</sendOnSuccess>
        <sendOnWarning>false</sendOnWarning>
        <configuration><address>continuum@127.0.0.1</address></configuration>
      </notifier>
    </notifiers>
  </ciManagement>

Mailing Lists
  <mailingLists>
    <mailingList>
      <name>User List</name>
      <subscribe>user-subscribe@127.0.0.1</subscribe>
      <unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>
      <post>user@127.0.0.1</post>
      <archive>http://127.0.0.1/user/</archive>
      <otherArchives>
        <otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive>
      </otherArchives>
    </mailingList>
  </mailingLists>

SCM
  软件配置管理,如cvs 和svn
  <scm>
    <connection>scm:svn:http://127.0.0.1/svn/my-project</connection>
    <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection>
    <tag>HEAD</tag>
    <url>http://127.0.0.1/websvn/my-project</url>
  </scm>

Repositories

配置同setting.xml中的开发库

Plugin Repositories
配置同 repositories

Distribution Management
用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
1 配置到文件系统
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>file://${basedir}/target/deploy</url>
</repository>
</distributionManagement>
2 使用ssh2配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>scp://sshserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
3 使用sftp配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>sftp://ftpserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
4 使用外在的ssh配置
    编译扩展用于指定使用wagon外在ssh提供,用于提供你的文件到相应的远程服务器。
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>scpexe://sshserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
</build>

5 使用ftp配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>ftp://ftpserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
</build>

repository 对应于你的开发库,用户信息通过settings.xml中的server取得

Profiles
类似于settings.xml中的profiles,增加了几个元素,如下的样式:
  <profiles>
    <profile>
      <id>test</id>
      <activation>...</activation>
      <build>...</build>
      <modules>...</modules>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <dependencies>...</dependencies>
      <reporting>...</reporting>
      <dependencyManagement>...</dependencyManagement>
      <distributionManagement>...</distributionManagement>
    </profile>
  </profiles>

(三)

什么是pom?
    pom作为项目对象模型。通过xml表示maven 项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他 所有的项目相关因素。
快速察看:
<project>
  <modelVersion>4.0.0</modelVersion>

  <!-- The Basics -->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>

  <!-- Build Settings -->
  <build>...</build>
  <reporting>...</reporting>

  <!-- More Project Information -->
  <name>...</name>
  <descrīption>...</descrīption>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

  <!-- Environment Settings -->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists>
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

基本内容:
    POM包括了所有的项目信息。
maven 相关:
pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素

  • groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
  • artifactId: 项目的通用名称
  • version:项目的版本
  • packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
  • classifier: 分类

POM关系:
主要为依赖,继承,合成
  依赖关系:
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
  </dependencies>

  • groupId, artifactId, version:描述了依赖的项目唯一标志
可以通过以下方式进行安装:
  • 使用以下的命令安装:
  • mvn install:install-file –Dfile=non-maven-proj.jar –DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1
  • 创建自己的库,并配置,使用deploy:deploy-file
  • 设置此依赖范围为system,定义一个系统路径。不提倡。
  • type:相应的依赖产品包形式,如jar,war
  • scope:用于限制相应的依赖范围,包括以下的几种变量:
  • compile :默认范围,用于编译
  • provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
  • runtime:在执行时,需要使用
  • test:用于test任务时使用
  • system:需要外在提供相应得元素。通过systemPath来取得
  • systemPath: 仅用于范围为system。提供相应的路径
  • optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用

   独占性    
   外在告诉maven你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-embedder</artifactId>
      <version>2.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core

继承关系
    另一个强大的变化,maven带来的是项目继承。主要的设置:
定义父项目
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>
</project>
    packaging 类型,需要pom用于parent和合成多个项目。我们需要增加相应的值给父pom,用于子项目继承。主要的元素如下:

  • 依赖型
  • 开发者和合作者
  • 插件列表
  • 报表列表
  • 插件执行使用相应的匹配ids
  • 插件配置
  • 子项目配置

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>my-parent</artifactId>
    <version>2.0</version>
    <relativePath>../my-parent</relativePath>
  </parent>
  <artifactId>my-project</artifactId>
</project>
relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

dependencyManagement:
用于父项目配置共同的依赖关系,主要配置依赖包相同因素,如版本,scope。

合成(或者多个模块)
    一个项目有多个模块,也叫做多重模块,或者合成项目。
如下的定义:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <modules>
    <module>my-project1<module>
    <module>my-project2<module>
  </modules>
</project>

build 设置
    主要用于编译设置,包括两个主要的元素,build和report
  build
    主要分为两部分,基本元素和扩展元素集合
注意:包括项目build和profile build
<project>
  <!-- "Project Build" contains more elements than just the BaseBuild set -->
  <build>...</build>
  <profiles>
    <profile>
      <!-- "Profile Build" contains a subset of "Project Build"s elements -->
      <build>...</build>
    </profile>
  </profiles>
</project>

基本元素
<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  <filters>
    <filter>filters/filter1.properties</filter>
  </filters>
  ...
</build>

  • defaultGoal: 定义默认的目标或者阶段。如install
  • directory: 编译输出的目录
  • finalName: 生成最后的文件的样式
  • filter: 定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值


资源(resources)
    你项目中需要指定的资源。如spring配置文件,log4j.properties
<project>
  <build>
    ...
    <resources>
      <resource>
        <targetPath>META-INF/plexus</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/src/main/plexus</directory>
        <includes>
          <include>configuration.xml</include>
        </includes>
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      ...
    </testResources>
    ...
  </build>
</project>

  • resources: resource的列表,用于包括所有的资源
  • targetPath: 指定目标路径,用于放置资源,用于build
  • filtering: 是否替换资源中的属性placehold
  • directory: 资源所在的位置
  • includes: 样式,包括那些资源
  • excludes: 排除的资源
  • testResources: 测试 资源列表

插件
  在build时,执行的插件,比较有用的部分,如使用jdk 5.0编译等等
<project>
  <build>
    ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.0</version>
        <extensions>false</extensions>
        <inherited>true</inherited>
        <configuration>
          <classifier>test</classifier>
        </configuration>
        <dependencies>...</dependencies>
        <executions>...</executions>
      </plugin>
    </plugins>
  </build>
</project>

  • extensions: true or false,是否装载插件扩展。默认false
  • inherited: true or false,是否此插件配置将会应用于poms,那些继承于此的项目
  • configuration: 指定插件配置
  • dependencies: 插件需要依赖的包
  • executions: 用于配置execution目标,一个插件可以有多个目标。

如下:
    <plugin>
        <artifactId>maven-antrun-plugin</artifactId>

        <executions>
          <execution>
            <id>echodir</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>verify</phase>
            <inherited>false</inherited>
            <configuration>
              <tasks>
                <echo>Build Dir: ${project.build.directory}</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
  说明:

  • id:规定execution 的唯一标志
  • goals: 表示目标
  • phase: 表示阶段,目标将会在什么阶段执行
  • inherited: 和上面的元素一样,设置false maven将会拒绝执行继承给子插件
  • configuration: 表示此执行的配置属性


插件管理
    pluginManagement:插件管理以同样的方式包括插件元素,用于在特定的项目中配置。所有继承于此项目的子项目都能使用。主要定义插件的共同元素

扩展元素集合
主要包括以下的元素:
Directories
用于设置各种目录结构,如下:
  <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scrīptSourceDirectory>${basedir}/src/main/scrīpts</scrīptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
  </build>

Extensions

表示需要扩展的插件,必须包括进相应的build路径。

<project>
  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>1.0-alpha-3</version>
      </extension>
    </extensions>
    ...
  </build>
</project>

Reporting
    用于在site阶段输出报表。特定的maven 插件能输出相应的定制和配置报表。
  <reporting>
    <plugins>
      <plugin>
        <outputDirectory>${basedir}/target/site</outputDirectory>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <reportSets>
          <reportSet></reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

Report Sets
    用于配置不同的目标,应用于不同的报表
<reporting>
    <plugins>
      <plugin>
        ...
        <reportSets>
          <reportSet>
            <id>sunlink</id>
            <reports>
              <report>javadoc</report>
            </reports>
            <inherited>true</inherited>
            <configuration>
              <links>
                <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
              </links>
            </configuration>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

更多的项目信息
name:项目除了artifactId外,可以定义多个名称
descrīption: 项目描述
url: 项目url
inceptionYear:创始年份

Licenses
<licenses>
  <license>
    <name>Apache 2</name>
    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    <distribution>repo</distribution>
    <comments>A business-friendly OSS license</comments>
  </license>
</licenses>

Organization
配置组织信息
  <organization>
    <name>Codehaus Mojo</name>
    <url>http://mojo.codehaus.org</url>
  </organization>

Developers
配置开发者信息
<developers>
    <developer>
      <id>eric</id>
      <name>Eric</name>
      <email>eredmond@codehaus.org</email>
      <url>http://eric.propellors.net</url>
      <organization>Codehaus</organization>
      <organizationUrl>http://mojo.codehaus.org</organizationUrl>
      <roles>
        <role>architect</role>
        <role>developer</role>
      </roles>
      <timezone>-6</timezone>
      <properties>
        <picUrl>http://tinyurl.com/prv4t</picUrl>
      </properties>
    </developer>
  </developers>

Contributors
  <contributors>
    <contributor>
      <name>Noelle</name>
      <email>some.name@gmail.com</email>
      <url>http://noellemarie.com</url>
      <organization>Noelle Marie</organization>
      <organizationUrl>http://noellemarie.com</organizationUrl>
      <roles>
        <role>tester</role>
      </roles>
      <timezone>-5</timezone>
      <properties>
        <gtalk>some.name@gmail.com</gtalk>
      </properties>
    </contributor>
  </contributors>

环境设置

Issue Management
    定义相关的bug跟踪系统,如bugzilla,testtrack,clearQuest等
  <issueManagement>
    <system>Bugzilla</system>
    <url>http://127.0.0.1/bugzilla</url>
  </issueManagement>
Continuous Integration Management
连续整合管理,基于triggers或者timings
  <ciManagement>
    <system>continuum</system>
    <url>http://127.0.0.1:8080/continuum</url>
    <notifiers>
      <notifier>
        <type>mail</type>
        <sendOnError>true</sendOnError>
        <sendOnFailure>true</sendOnFailure>
        <sendOnSuccess>false</sendOnSuccess>
        <sendOnWarning>false</sendOnWarning>
        <configuration><address>continuum@127.0.0.1</address></configuration>
      </notifier>
    </notifiers>
  </ciManagement>

Mailing Lists
  <mailingLists>
    <mailingList>
      <name>User List</name>
      <subscribe>user-subscribe@127.0.0.1</subscribe>
      <unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>
      <post>user@127.0.0.1</post>
      <archive>http://127.0.0.1/user/</archive>
      <otherArchives>
        <otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive>
      </otherArchives>
    </mailingList>
  </mailingLists>

SCM
  软件配置管理,如cvs 和svn
  <scm>
    <connection>scm:svn:http://127.0.0.1/svn/my-project</connection>
    <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection>
    <tag>HEAD</tag>
    <url>http://127.0.0.1/websvn/my-project</url>
  </scm>

Repositories

配置同setting.xml中的开发库

Plugin Repositories
配置同 repositories

Distribution Management
用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
1 配置到文件系统
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>file://${basedir}/target/deploy</url>
</repository>
</distributionManagement>
2 使用ssh2配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>scp://sshserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
3 使用sftp配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>sftp://ftpserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
4 使用外在的ssh配置
    编译扩展用于指定使用wagon外在ssh提供,用于提供你的文件到相应的远程服务器。
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>scpexe://sshserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
</build>

5 使用ftp配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>ftp://ftpserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
</build>

repository 对应于你的开发库,用户信息通过settings.xml中的server取得

Profiles
类似于settings.xml中的profiles,增加了几个元素,如下的样式:
  <profiles>
    <profile>
      <id>test</id>
      <activation>...</activation>
      <build>...</build>
      <modules>...</modules>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <dependencies>...</dependencies>
      <reporting>...</reporting>
      <dependencyManagement>...</dependencyManagement>
      <distributionManagement>...</distributionManagement>
    </profile>

</profiles>

 

(四)

http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html

(五)

<plugins>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <webXml>web.xml</webXml>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <directory>
                                ${basedir}/src/main/testStrutsWeb
                            </directory>
                            <includes>
                                <include>**/*.xml</include>
                                <include>**/*.jsp</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

        </plugins>

()

1 Maven结合eclipse安装演示视频
http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html
2 Maven在eclipse下的一个例子
http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html
在每一个用Maven部署的例子中,都会在根目录下面有pom.xml。
下面我们简单的看一下它的结构:

Xml代 码
  1. <? xml  version ="1.0"  encoding ="UTF-8" ?>   
  2.   
  3. < project >   
  4.     < modelVersion > 4.0.0</ modelVersion >   
  5.     < groupId > com.fdar.apress.s2</ groupId >   
  6.     < artifactId > app</ artifactId >   
  7.     < packaging > war</ packaging >   
  8.     < version > 1.0-SNAPSHOT</ version >   
  9.     < name > Struts 2 Starter</ name >   
  10.     < url > http://www.myComp.com</ url >   
  11.     < description > Struts 2 Starter</ description >   
  12.   
  13.     < dependencies >   
  14.         <!-- Junit -->   
  15.         < dependency >   
  16.             < groupId > junit</ groupId >   
  17.             < artifactId > junit</ artifactId >   
  18.             < version > 3.8.1</ version >   
  19.             < scope > test</ scope >   
  20.         </ dependency >   
  21.   
  22.         <!--  Struts 2 -->   
  23.         < dependency >   
  24.             < groupId > org.apache.struts</ groupId >   
  25.             < artifactId > struts2-core</ artifactId >   
  26.             < version > 2.0.9</ version >   
  27.         </ dependency >   
  28.         < dependency >   
  29.             < groupId > org.apache.struts</ groupId >   
  30.             < artifactId > struts2-sitemesh-plugin</ artifactId >   
  31.             < version > 2.0.9</ version >   
  32.         </ dependency >   
  33.         < dependency >   
  34.             < groupId > org.apache.struts</ groupId >   
  35.             < artifactId > struts2-spring-plugin</ artifactId >   
  36.             < version > 2.0.9</ version >   
  37.         </ dependency >   
  38.   
  39.         <!-- Servlet & Jsp -->   
  40.         < dependency >   
  41.             < groupId > javax.servlet</ groupId >   
  42.             < artifactId > servlet-api</ artifactId >   
  43.             < version > 2.4</ version >   
  44.             < scope > provided</ scope >   
  45.         </ dependency >   
  46.         < dependency >   
  47.             < groupId > javax.servlet</ groupId >   
  48.             < artifactId > jsp-api</ artifactId >   
  49.             < version > 2.0</ version >   
  50.             < scope > provided</ scope >   
  51.         </ dependency >   
  52.   
  53.         <!-- Jakarta Commons -->   
  54.         < dependency >   
  55.             < groupId > commons-fileupload</ groupId >   
  56.             < artifactId > commons-fileupload</ artifactId >   
  57.             < version > 1.1.1</ version >   
  58.         </ dependency >   
  59.   
  60.         <!-- Dwr -->   
  61.         < dependency >   
  62.             < groupId > uk.ltd.getahead</ groupId >   
  63.             < artifactId > dwr</ artifactId >   
  64.             < version > 1.1-beta-3</ version >   
  65.         </ dependency >   
  66.     </ dependencies >   
  67.   
  68.     < build >   
  69.         < finalName > app</ finalName >   
  70.         < plugins >   
  71.             < plugin >   
  72.                 < artifactId > maven-compiler-plugin</ artifactId >   
  73.                 < configuration >   
  74.                     < source > 1.5</ source >   
  75.                     < target > 1.5</ target >   
  76.                 </ configuration >   
  77.             </ plugin >   
  78.             < plugin >   
  79.                 < groupId > org.mortbay.jetty</ groupId >   
  80.                 < artifactId > maven-jetty-plugin</ artifactId >   
  81.                 < version > 6.0.1</ version >   
  82.                 < configuration >   
  83.                     < scanIntervalSeconds > 10</ scanIntervalSeconds >   
  84.                 </ configuration >   
  85.             </ plugin >   
  86.         </ plugins >   
  87.     </ build >   
  88. </ project >  

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值