pom.xml 文件简述

Posted reghao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pom.xml 文件简述相关的知识,希望对你有一定的参考价值。

POM(Project Object Model,项目对象模型)是使用 Maven 构建项目时的基本组件,它包含了关于项目和各种配置细节的信息,Maven 使用这些信息构建项目。

POM 还包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。

IDEA 的 Modules 中的项目根据它的 pom.xml 文件来决定 Dependencies 中的依赖包。

一个项目的 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/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.reghao</groupId>
    <artifactId>buguer</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true<activeByDefault>
            </activation>
            
            <properties>
                <server-envrionment>dev</server-envrionment>
            </properties>
            <build>
                <filters>
                    <filter>
                        src/main/resources/${server-envrionment}.properties
                    </filter>
                </filters>
            </build>
        </profile>
    </profiles>
    
    <build>
        <defaultGoal>install</defaultGoal>  
        <directory>${basedir}/target</directory>  
        <finalName>${artifactId}-${version}</finalName>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>../common/src/main/resources/</directory>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
  • 整个文件可分为以下几个部分:

    • dependencies
    • profiles
    • build
    • properties
<modelVersion>4.0.0</modelVersion>
<groupId>cn.reghao</groupId>            // 当前项目的实际项目名
<artifactId>buguer</artifactId>         // 当前项目中的一个 maven 项目模块名
<version>1.0</version>                  // maven 项目模块版本号
<packaging>war</packaging>              // maven 项目模块打包的方式,默认为 jar

本配置会得到一个 <artifactId>-<version>.<packaging> 格式的包,即 buguer-1.0.war

groupId 和 artifactId 称为“坐标”,这是为了保证项目的唯一性而提出的。

若将项目放到 maven 本地仓库,则需根据这两个 id 去寻找指定的项目。

groupId 一般分为多段,例如 cn.reghao 分别表示域名和一个名字。

artifactId 一般为项目名字。

dependencies 元素

dependencies 元素中定义了项目依赖的包。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
</dependency>

上述配置确定了一个依赖的包。

除去这三个元素外,还可添加 type、scope、optional 等元素。

  • type,表示依赖的类型,缺省为 jar 包。
  • scope,表示依赖的作用域,分别有:

    compile(缺省):对编译、测试和运行三种 CLASSPATH 都有效。

    test:只对测试有效。

    provided:只对编译和测试有效。

    runtime:只对测试和运行有效。

    system:系统依赖,依赖的包从计算机本地导入,与 systemPath 配合使用。Maven 不会在 Repository 中查找它。

  • optional,表示依赖是否具有传递性,默认是 false,即依赖具有传递性。

    假设要导入 A.jar 包,但它依赖于 B.jar 包,此时 maven 会自动导入 B.jar。

    传递性依赖存在的一个问题是,若项目中的两个 jar 分别依赖不同版本的 jar 包,此时会出现错误。

    可将 optional 设置为 true,即不传递依赖。不传递不需要的功能,可减少冲突,符合单一职责原则。

  • exclusions,用来替换某个依赖中依赖包的作用。

    若 A 需要 B,B 包含 C 依赖,那么 A 可使用此元素声明不要 C 依赖。

profiles 元素

在 profile 元素中可以定义大部分在 pom 里定义的内容(除去它自己),当一个 profile 被激活后,它定义的内容会覆盖原 pom 内定义的相同内容,从而可以通过激活不同的 profile 来使用不同的配置。

<profile>
    <id>dev</id>
    
    <properties>
        <server-envrionment>dev</server-envrionment>
    </properties>

    <build>
        <filters>
            <filter>
                src/main/resources/${server-envrionment}.properties
            </filter>
        </filters>
    </build>
</profile>

本配置可在构建项目时根据 server-envrionment 变量的值来选择相应的 properties 文件。

filter 元素定义 *.properties 文件,它包含一个 properties 列表,该列表会应用在支持 filter 的 resources 中。

profile 可通过显式或隐式的方式被激活:

  • 通过 mvn 的 -P 参数可显式激活指定的 profile

隐式激活 profile 则提供了多种方式:

  • 使用 activeByDefault 元素默认激活

    <activation>
          <activeByDefault>true<activeByDefault>
      </activation>
  • 使用 os 元素根据操作系统类型激活

    <activation>
          <os>
              <name>linux</name>
              <family>unix</family>
              <arch>amd64</arch>
              <version>3.19.0-30-generic</version>
          </os>
      </activation>
  • 使用 jdk 元素根据 JDK 版本激活

    <activation>
          <jdk>1.8</jdk>
      </activation>
  • 使用 property 元素根据环境变量的值激活

    <activation>
          <property>
              <name>debug</name>
              <value>true</value>
          </property>
      </activation>
  • 使用 file 元素根据文件是否存在激活

    <activation>
          <file>
              <missing>/path/to/missing/file</missing>
              <exists>/path/to/exists/file</exists>
          </file>
      </activation>

build 元素

build 元素指定 maven 在构建项目时的一些属性。

<defaultGoal>install</defaultGoal>  
<directory>${basedir}/target</directory>  
<finalName>${artifactId}-${version}</finalName>
  • defaultGoal

    执行构建任务时,若未指定目标,则将使用的缺省值。

    在命令行中执行 mvn 则相当于执行 mvn install

  • directory

    构建目标文件的存放目录,缺省为 ${basedir}/target 目录

  • finalName

    构建目标文件的文件名,缺省为 ${artifactId}-${version}。

resource 元素

resource 元素用于指定项目中需要的资源,它们(通常)不是代码,不会被编译,只是被绑定在项目中或用于其目的(例如代码生成)。

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>

    <resource>
        <directory>../common/src/main/resources/</directory>
    </resource>
</resources>
  • directory

    定义资源所在的目录,默认为 ${basedir}/src/main/resources

  • filtering

    对于当前资源,filter 是否激活(true/false)

plugin 元素

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>

        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF8</encoding>
        </configuration>
    </plugin>
</plugins>
  • configuration

    配置该 plugin 期望得到的 properies。

    源文件使用 jdk1.8,编译后的目标文件使用 jdk1.8,使用 utf8 编码。

properties 元素

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

指定项目中代码源文件的编码

以上是关于pom.xml 文件简述的主要内容,如果未能解决你的问题,请参考以下文章

springboot——pom.xml 配置文件的设置

pom.xml文件

`gradle install` 如何生成 `pom.xml` 文件

是否有生成 POM.xml 文件的 Java 类?

pom.xml

pom.xml