第 7 章 POM文件结构

Project Object Model是Maven2项目的基础所在,简单来说它就是一个XML文件,Maven2用它来描述一个工程的整个生命周期所需要执行的一系列功能和特性。

7.1. 最小配置

任何项目都最少要包含以下几个标签。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.family168.maven2book</groupId>
  <artifactId>ch07</artifactId>
  <version>1.0</version>
</project>
        

modelVersion这个标签必须存在,而且它的值必须是4.0.0,这标志着我们现在使用的是maven2。

groupId和artifactId合起来作为当前项目的唯一标识,maven2最终会根据这两个值,决定项目发布到repo上时所处的位置。

version是项目的版本号,它用来标记同一个项目发布的不同版本。

7.2. 管理依赖

我们平常接触最多的就是dependencies标签了。因为既然使用了maven2,最大的得益之处还是可以用它统一管理依赖库。dependencies和它内部的dependency标签就用来配置当前项目所依赖的第三方库的。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.family168.maven2book</groupId>
  <artifactId>ch07</artifactId>
  <version>1.0</version>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
        

我们可以看到dependency标签中也包含了groupId,artifactId和version信息,这三部分就是一个maven2项目所需的最小配置,也是maven2所管理的项目的唯一标识,有了这三个数据,maven2就可以在repo中查找到对应的依赖,并将其包含到我们的项目中,从而实现对依赖库的管理。

上面的依赖中,我们使用了groupId为junit,artifactId为junit,版本为3.8.1的依赖,这个依赖会在test作用域中起作用,也就是说,只有在进行单元测试的时候,才会用到这个依赖,与之对应的是,当我们的程序正常编译,运行,打包发布时,是不会包含这个依赖的。maven2内置了多个作用域,可以让我们将不同阶段使用的依赖库进行隔离,之后我们会慢慢讨论这部分的信息。

现在你需要知道,可以使用dependencies和dependency为项目定义多个依赖,并且每个依赖都需要groupId,artifactId和version这些数据就可以了。

7.3. 构建部分

pom中一大部分配置都包含在build标签中,这部分是在对项目进行构建时所需要的配置,当你对项目进行编译,测试,打包,发布的时候,这部分配置就会在对应的阶段起作用了。

build标签中可以包含很多插件,这些插件可以配置到项目的某些构建阶段,随着项目的构建进程发挥作用。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.family168.maven2book</groupId>
  <artifactId>ch07</artifactId>
  <version>1.0</version>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
  </build>
</project>
        

7.4. 报表部分

我们执行mvn site就可以为项目生成一系列可以用来描述项目信息的网页,maven2中的一大部分插件就是专门在这时候发挥效用的,它们可以根据项目的结构,源代码,测试,SCM信息等,生成各种特殊功能的报表,这要把这些插件配置在reporting标签中,它们就会在执行mvn site的同时起作用。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.family168.maven2book</groupId>
  <artifactId>ch07</artifactId>
  <version>1.0</version>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
  </build>

  <reporting>
  </reporting>
</project>