自学内容网 自学内容网

Maven中的pom.xml文件

一、什么是pom.xml


pom.xml是Maven项目的核心配置文件,它是 项目对象模型 - Project Object Model(POM)的缩写。它使用 XML 格式定义了项目的基本信息、依赖项、构建插件和任务等。使用pom.xml,我们可以轻松地管理项目的构建和依赖关系,让我们能够更专注于业务逻辑的开发。

二、pom.xml文件结构

pom.xml 文件通常的结构如下所示,主要用于定义 Maven 项目的配置信息和构建过程中所需的各种依赖和插件:

<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>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>

    <!-- 项目依赖 -->
    <dependencies>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <version>...</version>
            <scope>...</scope>
        </dependency>
        <!-- 可以有多个依赖项 -->
    </dependencies>

    <!-- 构建配置 -->
    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>...</groupId>
                <artifactId>...</artifactId>
                <version>...</version>
                <!-- 插件配置 -->
            </plugin>
            <!-- 可以有多个插件 -->
        </plugins>
    </build>

    <!-- 仓库配置 -->
    <repositories>
        <repository>
            <id>...</id>
            <url>...</url>
        </repository>
        <!-- 可以有多个仓库 -->
    </repositories>
</project>

详细解释

  • <modelVersion>: POM 模型的版本,目前是 4.0.0。
  • <groupId>: 项目组织或公司的唯一标识符。
  • <artifactId>: 项目的唯一标识符,通常是项目名称。
  • <version>: 项目的当前版本号。
  • <packaging>: 项目的打包方式,例如 jar、war 等。
  • <dependencies>: 项目依赖的外部库或模块。
  • <build>: Maven 构建过程的配置信息,包括源码目录、测试目录和插件配置。
  • <plugins>: 在构建过程中使用的 Maven 插件。
  • <repositories>: Maven 从中获取依赖项和插件的仓库列表。

1.dependency


与项目的依赖列表相关的标签最外层由 <dependencies>来囊括,内部包含了各种具体的依赖

<dependency>,该标签用于指定一个依赖项,它包含以下几个子标签

<groupId>:指定依赖项的groupId,项目的组名

<artifactId>:指定依赖项的artifactId,项目的唯一标识符

<version>:指定依赖项的版本号。

<scope>:指定依赖项在项目中的使用范围。

其中的 <scope>一般包含以下几种范围:常用的有compile、test、provided 和 runtime

compile:依赖库默认的 scope,表示该依赖库在编译、测试、运行时均需要使用。

provided:表示该依赖库只在编译和测试时需要使用,而在运行时已经被系统或者容器提供,所以不需要打包到最终的应用程序中。

runtime:表示该依赖库只在运行时需要使用,而在编译和测试时则不需要。

test:表示该依赖库只在测试时需要使用,而在编译和运行时则不需要。

2.repository


当然,我们还能在pom文件中支持指定Maven仓库,即使用 <repositories> 和 <repository>标签,

<repository>用于指定一个Maven仓库,它包含以下几个子标签:

<id>:指定Maven仓库的ID。

<name>:指定Maven仓库的名称。

<url>:指定Maven仓库的URL

3.properties


properties 严格来说,并不一定是项目本身的信息,而是人为设置的属性或者说宏,这个标签用来定义和管理项目中所需要的属性,其作用有以下几个:

  • 统一管理项目中的常用属性,比如版本号、路径、插件版本等,方便统一修改和管理。
  • 可以在配置过程中使用 ${…}占位符引用这些属性,使得配置更加灵活和便捷。
  • 避免硬编码,提高代码的可维护性和可读性

比如说我们可以这么配

<properties>
    <project.name>demo-project</project.name>
    <project.version>1.0.0</project.version>
    <jdk.version>1.8</jdk.version>
</properties>
....省略其余部分
<dependency>
    <groupId>com.example.demo</groupId>
    <artifactId>${project.name}-api</artifactId>
    <version>${project.version}</version>
</dependency>

4.parent

在 Maven 的 pom.xml 文件中,<parent> 元素是用来指定当前项目继承的父项目(Parent Project)的配置信息。这种配置方式被称为 “继承” 或者 “继承机制”,允许子项目继承父项目的配置,从而简化项目的管理和维护。

<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.example.myproject</groupId>
    <artifactId>myproject-core</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!-- 继承自父项目 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
    </parent>

    <!-- 其他配置 -->
    <dependencies>
        <!-- 项目依赖 -->
    </dependencies>

    <build>
        <!-- 构建配置 -->
    </build>

    <repositories>
        <!-- 仓库配置 -->
    </repositories>
</project>

在这个例子中:

  • <parent> 元素中的 <groupId><artifactId> 和 <version> 指定了父项目的坐标信息。
  • 当前项目(myproject-core)继承自 parent-project,因此会继承父项目中定义的基本配置,如版本管理、插件管理等。
  • 在 <dependencies><build> 和 <repositories> 等部分,可以定义当前项目自己的特定配置,这些配置会与父项目的配置合并或覆盖,以形成最终的项目配置。

通过使用 <parent> 元素,可以避免在子项目中重复定义相同的配置信息,提高项目的一致性和可维护性。

三、 项目的构建配置

项目的构建配置信息,包括编译器版本、插件列表、源代码目录等

1.build

build用于定义项目的构建配置,包括源代码目录、资源目录、插件等,其中代码部分的设置如下

<project>
  .... 省略其他部分
  <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

2.plugins

plugins的作用是定义 Maven 插件, plugins 主要用于扩展 Maven 的功能,帮助开发人员更方便地构建、打包、发布项目。

maven-compiler-plugin

比方说,最常用的编译功能,我们可以在pom里面这么写

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
        <showWarnings>true</showWarnings>
        <compilerArgs>
          <arg>-Xlint:unchecked</arg>
          <arg>-Xlint:deprecation</arg>
        </compilerArgs>
      </configuration>
    </plugin>
  </plugins>
</build>

各子标签的作用如下:

<source>:指定Java源代码的版本,例如1.8表示Java 8。


<target>:指定编译后的字节码版本,例如1.8表示Java 8。


<encoding>:指定源代码的编码格式。


<showWarnings>:是否显示编译警告信息,true表示显示,false表示不显示。


<compilerArgs>:可选参数,可以添加多个编译器参数,例如-Xlint选项用来启用编译器警告检查。


如果我们按示例中配置,我们就指定了编译器的源和目标版本为1.8,当我们使用 mvn compile 命令的时候,这个插件将会编译我们的 Java 代码,并将编译后的 class 文件放置在 target 目录下。

四、pom.xml的使用


经过了上面的学习,不难发现,使用pom.xml可以轻松地管理项目的构建和依赖关系,其主要用法其实有三种:

  • 添加依赖:在dependencies标签下添加依赖,包括groupId、artifactId、version、scope等信息。
  • 修改打包方式:在packaging标签下修改项目的打包方式,通常是jar、war或pom。
  • 配置插件:在build标签下配置插件,包括groupId、artifactId、version等信息。插件可以帮助我们处理各种构建任务,比如编译代码、生成文档、打包文件等。

原文地址:https://blog.csdn.net/2301_77358195/article/details/140518578

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!