阅读(1124) (22)

Maven POM文件

2017-01-09 19:18:23 更新

Maven教程 - Maven POM文件


POM代表项目对象模型。这是Maven的核心概念。

POM文件使用XML格式来声明项目资源(如依赖项)。

依赖关系是在项目中用作库的JAR文件。

位于项目根目录中的pom.xml包含对所有这些资源的引用。

由于 maven 在配置上是约定的大多数情况下,我们只需要声明工件的名称,所以我们不需要指定Maven找到资源的绝对或相对路径。Maven使用默认目录/文件夹布局。所有mavenized项目使用相同的目录/文件夹来组织其源文件,资源文件。


Maven如何使用POM文件

Maven在以下步骤中使用pom.xml文件。

  • 阅读pom.xml文件,解析内容。
  • 下载对本地依赖关系库的依赖。
  • 执行生命周期/建立解析/目标。
    例如,mvn 编译将执行编译
    mvn测试将执行所有单元测试用例
    mvn包将会编译,然后执行所有单元测试用例,最后将类文件压缩到jar/war/ear文件。
  • 执行插件Maven插件是Maven核心的扩展。有时我们需要使用插件来执行特定于项目的特定任务。

什么是pom.xml文件

Maven POM文件(项目对象模型)pom.xml是描述项目资源的XML文件。

每个项目都有一个POM文件。POM文件名为pom.xml,应位于项目的根目录中。

pom.xml有关于项目和各种配置的声明。

pom.xml文件也有目标和插件。

POM文件描述了什么构建,但不是如何构建它。如何构建它取决于Maven构建阶段和目标。

我们可以将自定义操作(目标)添加到Maven构建阶段。

下表列出了可在POM中指定的一些配置。

项目描述
项目依赖库JAR文件
plugins需要扩展
构建配置文件项目的自定义设置
项目版本项目的版本号。 如果pom.xml用于库,则版本号为用作库版本号。
developers为构建软件的开发人员提供信息
邮件列表电子邮件地址

一个项目分为子项目通常有一个用于父项目的POM文件,和每个子项目的一个POM文件。

通过使用这种结构,我们可以在一个步骤中构建整个项目,或者如果需要,我们可以单独构建子项目。

例子

这里是一个最小的POM文件:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupID</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.0.0</version>
</project>

在创建POM之前,我们应该决定项目组( groupId ),项目名称( artifactId )及其版本( version )。

这些属性帮助我们在存储库中唯一标识项目。

在下面的代码中,我们填写groupId,它是项目组名称,artifactId是项目名称,以及项目版本。

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.companyname.project-group</groupId>
   <artifactId>feeCalculation</artifactId>
   <version>1.0</version>
 
</project>

注意

所有POM文件都需要项目XML元素和三个必填字段: groupId artifactId 版本

存储库中的项目符号是 groupId:artifactId:version

modelVersion 元素设置POM模型的版本。它必须匹配您使用的Maven版本。版本4.0.0匹配Maven版本2和3。

groupId 元素是唯一的ID组织或项目。

通常我们使用类似于项目的根Java包名称的组ID。

该项目将位于Maven仓库下与组ID匹配的目录结构。

每个替换为目录分隔符,并且每个词因此表示目录。

然后,组ID com.yourCompany 将位于目录中调用 MAVEN_REPO / com / yourCompany

MAVEN_REPO是Maven存储库的目录路径。

artifactId 元素包含项目的名称。

工件ID用作组ID下的子目录的名称目录,并且作为JAR文件名称的一部分在建设项目时产生。

构建结果,一个JAR,WAR或EAR文件,在Maven中被称为工件。

versionId 元素包含项目的版本号。

项目的用户可以通过使用来引用项目的特定版本 versionId 元素中的版本号。

版本号用作工件ID目录下的子目录的名称。并作为构建的工件的名称的一部分。

版本号用作工件ID目录下的子目录的名称。并作为构建的工件的名称的一部分。...

MAVEN_REPO / com / companyname / project-group / feeCalculation / 1.0.0 / feeCalculation-1.0.0.jar

如果你的项目使用Maven目录结构,而你的项目没有外部依赖,那么上述最小的POM文件就是你需要的构建您的项目。

超级POM

如果你的项目使用Maven目录结构,而你的项目没有外部依赖,那么上述最小的POM文件就是你需要的构建您的项目。...

此基本POM称为超级POM,并且包含默认情况下继承的值。

此基本POM称为超级POM,并且包含默认情况下继承的值。...

如果未指定超级POM,则POM文件从基本POM继承。

如果未指定超级POM,则POM文件从基本POM继承。...

Base POM
 |
 +---POM
 |
 |
 +---POM
 |    |
 |    +---POM
 |    |
 |    +---POM
 |    |
 |    +---POM
 |
 |
 +---POM

我们可以在POM文件中显式设置一个超级POM文件来改变所有继承POM的设置通过其共同的超级POM。

我们可以在POM文件中显式设置一个超级POM文件来改变所有继承POM的设置通过其共同的超级POM。...

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
        <parent>
        <groupId>org.oneproject.fee</groupId>
        <artifactId>my-parent</artifactId>
        <version>2.0</version>
        <relativePath>../my-parent</relativePath>
        </parent>
    

    <artifactId>my-project</artifactId>
    ...
</project>

继承的POM文件可以覆盖设置通过在继承的POM文件中指定新设置从超级POM。

有效pom

Maven使用超级pom加项目配置的有效pom执行相关目标。

我们可以看看超级POM的默认配置通过运行以下命令:

mvn help:effective-pom