pom - project object model

POM包含了四类描述和配置:

 

  • 项目总体信息

它包含了一个项目的名称、项目的URL、发起的组织、以及项目的开发贡献者列表和许可证。

  • 构建设置

自定义maven构建的默认行为。

  • 构建环境

包含了一些能在不同的环境中激活的profile。

  • POM关系

它会依赖于其它项目,可能从父项目继承POM设置。

 

POM语法

  • 项目版本
<major version>.<minor version>.<incremental version>-<qualifier>

 

  • 属性引用

一个POM可以通过一对括狐和前面一个美元符号来包含对属性的引用。maven提供了三个隐式的变量,可以用来访问环境变量,pom信息和maven settings:

(1)env,操作系统或者shell的环境变量。

(2)project,pom元素值 。

(3)settings,maven settings信息。

  • 项目依赖
<project>
...
<dependencies>
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-java5</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.4_spec</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
...
</project>


依赖范围:

(1)compile

编译范围,如果没有提供一个范围,那该依赖的范围就是编译范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包。

(2)provided

已提供范围,只有在当JDK或者一个容器已提供该依赖之后才使用,例如,如果你开发一个web应用,可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包的WAR中包含这个Servlet API,这个API由你的应用服务器或者servlet容器提供。它们不是传递性的,也不会被打包。

(3)runtime

在支行和测试系统时需要,但在编译的时候不需要。

(4)test

一般在编译和运行时都不需要,它们只有在测试编译和测试支行阶段可用。

(5)system

与provided类似,但是你必须显式提供一个对于本地系统中JAR文件的路径。

 

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>1.4.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>swarmcache</groupId>
<artifactId>swarmcache</artifactId>
<version>1.0RC2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.13</version>
</dependency>
</dependencies>
</project>

你将依赖声明为可选之后,你就需要在依赖于my-project的项目中显式的引用对应的依赖。

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>my-application</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>swarmcache</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>
</project>

 

你并不是必须为依赖声明某个特定的版本,你可以指定一个满足依赖的版本界限。

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.8,4.0)</version>
<scope>test</scope>
</dependency>

Junit 3.8-Junit 4.0

 

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[,3.8.1]</version>ex-de
<scope>test</scope>
</dependency>

Junit<= 3.8.1
 

  • 项目关系
<project>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>top-group</artifactId>
...
<modules>
<module>sub-group</module>
<module>project-c</module>
</modules>
...
</project>

当maven读取top-group的POM的时候,它会检查它的modules元素,看到top-group引用了项目sub-group和project-c,之后maven会在它们的每个子目录中寻找pom.xml,maven为每一个子模块重复这个过程:它会读取sub-group/pom.xml。

  • 项目继承

当一个项目声明一个parent的时候,它从父项目的POM中继承信息。

<project>
<parent>
<groupId>com.training.killerapp</groupId>
<artifactId>a-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-a</artifactId>
...
</project

 

最后欢迎大家访问我的个人网站:1024s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值