首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

maven 配备篇 之pom.xml(一)

2012-11-10 
maven 配置篇 之pom.xml(一)??? 说完了settings.xml配置,下来说一下maven2的主要配置pom.xml什么是pom????

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

使用以下的命令安装: 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你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题
?xml 代码?
  1. <dependencies>??
  2. ????<dependency>??
  3. ??????<groupId>org.apache.maven<!---->groupId>??
  4. ??????<artifactId>maven-embedder<!---->artifactId>??
  5. ??????<version>2.0<!---->version>??
  6. ??????<exclusions>??
  7. ????????<exclusion>??
  8. ??????????<groupId>org.apache.maven<!---->groupId>??
  9. ??????????<artifactId>maven-core<!---->artifactId>??
  10. ????????<!---->exclusion>??
  11. ??????<!---->exclusions>??
  12. ????<!---->dependency>??

表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core

继承关系
??? 另一个强大的变化,maven带来的是项目继承。主要的设置:
定义父项目
xml 代码?
  1. <project>??
  2. ??<modelVersion>4.0.0<!---->modelVersion>??
  3. ??<groupId>org.codehaus.mojo<!---->groupId>??
  4. ??<artifactId>my-parent<!---->artifactId>??
  5. ??<version>2.0<!---->version>??
  6. ??<packaging>pom<!---->packaging>??
  7. <!---->project>??

??? packaging 类型,需要pom用于parent和合成多个项目。我们需要增加相应的值给父pom,用于子项目继承。主要的元素如下:
依赖型 开发者和合作者 插件列表 报表列表 插件执行使用相应的匹配ids 插件配置 子项目配置xml 代码?
  1. <project>??
  2. ??<modelVersion>4.0.0<!---->modelVersion>??
  3. ??<parent>??
  4. ????<groupId>org.codehaus.mojo<!---->groupId>??
  5. ????<artifactId>my-parent<!---->artifactId>??
  6. ????<version>2.0<!---->version>??
  7. ????<relativePath>../my-parent<!---->relativePath>??
  8. ??<!---->parent>??
  9. ??<artifactId>my-project<!---->artifactId>??
  10. <!---->project>??

relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

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

合成(或者多个模块)
??? 一个项目有多个模块,也叫做多重模块,或者合成项目。
如下的定义:
xml 代码?
  1. <project>??
  2. ??<modelVersion>4.0.0<!---->modelVersion>??
  3. ??<groupId>org.codehaus.mojo<!---->groupId>??
  4. ??<artifactId>my-parent<!---->artifactId>??
  5. ??<version>2.0<!---->version>??
  6. ??<modules>??
  7. ????<module>my-project1<module>??
  8. ????<module>my-project2<module>??
  9. ??<!---->modules>??
  10. <!---->project>??


build 设置
??? 主要用于编译设置,包括两个主要的元素,build和report
? build
??? 主要分为两部分,基本元素和扩展元素集合
注意:包括项目build和profile build
xml 代码?
  1. <project>??
  2. ??<!---->??
  3. ??<build>...<!---->build>??
  4. ??<profiles>??
  5. ????<profile>??
  6. ??????<!---->??
  7. ??????<build>...<!---->build>??
  8. ????<!---->profile>??
  9. ??<!---->profiles>??
  10. <!---->project>??


基本元素
xml 代码?
  1. <build>??
  2. ??<defaultGoal>install<!---->defaultGoal>??
  3. ??<directory>${basedir}/target<!---->directory>??
  4. ??<finalName>${artifactId}-${version}<!---->finalName>??
  5. ??<filters>??
  6. ????<filter>filters/filter1.properties<!---->filter>??
  7. ??<!---->filters>??
  8. ??...??
  9. <!---->build>??

defaultGoal: 定义默认的目标或者阶段。如install directory: 编译输出的目录 finalName: 生成最后的文件的样式 filter: 定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值
资源(resources)
??? 你项目中需要指定的资源。如spring配置文件,log4j.properties
xml 代码?
  1. <project>??
  2. ??<build>??
  3. ????...??
  4. ????<resources>??
  5. ??????<resource>??
  6. ????????<targetPath>META-INF/plexus<!---->targetPath>??
  7. ????????<filtering>false<!---->filtering>??
  8. ????????<directory>${basedir}/src/main/plexus<!---->directory>??
  9. ????????<includes>??
  10. ??????????<include>configuration.xml<!---->include>??
  11. ????????<!---->includes>??
  12. ????????<excludes>??
  13. ??????????<exclude>**/*.properties<!---->exclude>??
  14. ????????<!---->excludes>??
  15. ??????<!---->resource>??
  16. ????<!---->resources>??
  17. ????<testResources>??
  18. ??????...??
  19. ????<!---->testResources>??
  20. ????...??
  21. ??<!---->build>??
  22. <!---->project>??


resources: resource的列表,用于包括所有的资源 targetPath: 指定目标路径,用于放置资源,用于build filtering: 是否替换资源中的属性placehold directory: 资源所在的位置 includes: 样式,包括那些资源 excludes: 排除的资源 testResources: 测试资源列表插件
? 在build时,执行的插件,比较有用的部分,如使用jdk 5.0编译等等
xml 代码?
  1. <project>??
  2. ??<build>??
  3. ????...??
  4. ????<plugins>??
  5. ??????<plugin>??
  6. ????????<groupId>org.apache.maven.plugins<!---->groupId>??
  7. ????????<artifactId>maven-jar-plugin<!---->artifactId>??
  8. ????????<version>2.0<!---->version>??
  9. ????????<extensions>false<!---->extensions>??
  10. ????????<inherited>true<!---->inherited>??
  11. ????????<configuration>??
  12. ??????????<classifier>test<!---->classifier>??
  13. ????????<!---->configuration>??
  14. ????????<dependencies>...<!---->dependencies>??
  15. ????????<executions>...<!---->executions>??
  16. ??????<!---->plugin>??
  17. ????<!---->plugins>??
  18. ??<!---->build>??
  19. <!---->project>??

extensions: true or false,是否装载插件扩展。默认false inherited: true or false,是否此插件配置将会应用于poms,那些继承于此的项目 configuration: 指定插件配置 dependencies: 插件需要依赖的包 executions: 用于配置execution目标,一个插件可以有多个目标。如下:
???xml 代码?
  1. <plugin>??
  2. ????????<artifactId>maven-antrun-plugin<!---->artifactId>??
  3. ??
  4. ????????<executions>??
  5. ??????????<execution>??
  6. ????????????<id>echodir<!---->id>??
  7. ????????????<goals>??
  8. ??????????????<goal>run<!---->goal>??
  9. ????????????<!---->goals>??
  10. ????????????<phase>verify<!---->phase>??
  11. ????????????<inherited>false<!---->inherited>??
  12. ????????????<configuration>??
  13. ??????????????<tasks>??
  14. ????????????????<echo>Build?Dir:?${project.build.directory}<!---->echo>??
  15. ??????????????<!---->tasks>??
  16. ????????????<!---->configuration>??
  17. ??????????<!---->execution>??
  18. ????????<!---->executions>??
  19. ??????<!---->plugin>??

? 说明:
id:规定execution 的唯一标志 goals: 表示目标 phase: 表示阶段,目标将会在什么阶段执行 inherited: 和上面的元素一样,设置false maven将会拒绝执行继承给子插件 configuration: 表示此执行的配置属性
插件管理
??? pluginManagement:插件管理以同样的方式包括插件元素,用于在特定的项目中配置。所有继承于此项目的子项目都能使用。主要定义插件的共同元素

扩展元素集合
主要包括以下的元素:
Directories
用于设置各种目录结构,如下:
?xml 代码?
  1. <build>??
  2. ????<sourceDirectory>${basedir}/src/main/java<!---->sourceDirectory>??
  3. ????<scriptSourceDirectory>${basedir}/src/main/scripts<!---->scriptSourceDirectory>??
  4. ????<testSourceDirectory>${basedir}/src/test/java<!---->testSourceDirectory>??
  5. ????<outputDirectory>${basedir}/target/classes<!---->outputDirectory>??
  6. ????<testOutputDirectory>${basedir}/target/test-classes<!---->testOutputDirectory>??
  7. ????...??
  8. ??<!---->build>??


Extensions

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

xml 代码?
  1. <project>??
  2. ??<build>??
  3. ????...??
  4. ????<extensions>??
  5. ??????<extension>??
  6. ????????<groupId>org.apache.maven.wagon<!---->groupId>??
  7. ????????<artifactId>wagon-ftp<!---->artifactId>??
  8. ????????<version>1.0-alpha-3<!---->version>??
  9. ??????<!---->extension>??
  10. ????<!---->extensions>??
  11. ????...??
  12. ??<!---->build>??
  13. <!---->project>??


Reporting
??? 用于在site阶段输出报表。特定的maven 插件能输出相应的定制和配置报表。
?xml 代码?
  1. <reporting>??
  2. ????<plugins>??
  3. ??????<plugin>??
  4. ????????<outputDirectory>${basedir}/target/site<!---->outputDirectory>??
  5. ????????<artifactId>maven-project-info-reports-plugin<!---->artifactId>??
  6. ????????<reportSets>??
  7. ??????????<reportSet><!---->reportSet>??
  8. ????????<!---->reportSets>??
  9. ??????<!---->plugin>??
  10. ????<!---->plugins>??
  11. ??<!---->reporting>??


Report Sets
??? 用于配置不同的目标,应用于不同的报表
xml 代码?
  1. <reporting>??
  2. ????<plugins>??
  3. ??????<plugin>??
  4. ????????...??
  5. ????????<reportSets>??
  6. ??????????<reportSet>??
  7. ????????????<id>sunlink<!---->id>??
  8. ????????????<reports>??
  9. ??????????????<report>javadoc<!---->report>??
  10. ????????????<!---->reports>??
  11. ????????????<inherited>true<!---->inherited>??
  12. ????????????<configuration>??
  13. ??????????????<links>??
  14. ????????????????<link>http://java.sun.com/j2se/1.5.0/docs/api/<!---->link>??
  15. ??????????????<!---->links>??
  16. ????????????<!---->configuration>??
  17. ??????????<!---->reportSet>??
  18. ????????<!---->reportSets>??
  19. ??????<!---->plugin>??
  20. ????<!---->plugins>??
  21. ??<!---->reporting>?
1 楼 有思想的芦苇 2006-12-30   请问楼主如果Junit的测试代码需要调用一批配置文件,它们基本处于一个大目录中,是否需要用<testResources>来处理,能给出一个简单sample吗? 2 楼 zyl 2006-12-31   默认放在test 下面的resources中就行了。
如果需要自定义,更改
<testResources>
      <testResource>
        <directory>src/test/yourresources</directory>
      </testResource>
    </testResources>
3 楼 jason2008 2007-02-09   that's ok! 4 楼 阳光泛滥的日子 2012-03-08   你的解释我看懂了, 非常感谢!

热点排行