1.pom文件的信息
modelVersion:
指当前pom模型的版本,对于Maven3来说,只能是4.0.0
2. 本项目基本信息
groupId:
全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此产生,如com.mycompany.app生成的相对路径为:/com/mycompany/app
artifactId:
构建标识符,它和groupId一起唯一标识一个构件。也就是说,groupId和artifactId的组合绝对不能重复
packaging:
项目产生的构件类型,如jar、war、ear、pom等
version:
项目当前版本
name:
当前项目名称
3.pom关系
主要分为依赖、继承、合成
(1)依赖关系
<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:描述了依赖的唯一标识
type:表示依赖的构件的类型,如jar、war,默认为jar
scope:用以限制相应的依赖范围,包括以下几种
compile:默认范围,用于所有阶段,会随着项目一起发布provided:类似于compile,但是期望jdk、容器或使用者来提供这个依赖。如servlet.jar
runtime:只在运行时使用,如jdbc驱动,适用运行和测试阶段
test:只在测试时使用,不会随项目发布
system:类似于provided,需要显示提供依赖的jar,maven不会再repository中查找它
systemPath:仅用于范围为system,提供相应的路径
optional:标注可选,当项目自身也是依赖时使用。用于连续依赖时使用
<dependency>
<groupId>com.alibaba.intl.sourcing.shared</groupId>
<artifactId>commons.framework</artifactId>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
用来排除我们不想要的依赖
(2)继承关系
定义父项目:
<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
通常还会定义dependencyManagement,用来配置共同的依赖关系。主要配置依赖包的版本、scope等
子项目中:
parent:
父项目的坐标,也就是说这个项目中如果没有规定某个元素的值,那么父项目中对应的值即为这个项目的默认值。
<parent>
//groupId、artifactId、wersion制定了父项目
<groupId>com.alibaba.intl.app</groupId>
<artifactId>alibaba.intl.s2s.parent</artifactId>
<version>1.0-SNAPSHOT</version>
//父项目pom.xml文件的相对路径,默认是../pom.xml。maven查找父项目pom的顺序为:当前路径->relativePath->本地仓库->远程仓库
<relativePath><relativePath>
</parent>
(3)合成关系(或多个模块)
先看一下主模块app-parent的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.myorg.myapp</groupId>
<artifactId>app-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>app-util</module>
<module>app-dao</module>
<module>app-service</module>
<module>app-web</module>
</modules>
</project>
这里的packing必须为pom。该配置重要的地方在于modules,在maven对app-parent进行build的时候,他会根据子模块的相互依赖关系整理一个build顺序,然后依次build
再看一下子模块的配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>app-parent</artifactId>
<groupId>org.myorg.myapp</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>app-util</artifactId>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
使用parent标签继承了app-parent即可