Maven中pom文件结构详解

关于maven中pom.xml核心文件的详细介绍,5000字深度解析。


前言

pom.xml是maven项目中的核心配置文件,其POM这一名称来源于项目对象模型(Project Object Model, POM)。POM包含了项目的各种配置信息,如项目名称、版本号、依赖关系、构建配置、插件、目标平台等。基于pom.xml,我们可以轻松对项目的构建和依赖关系进行管理,让我们能够更专注于业务逻辑的开发。

pom文件中包含多种元素:模型版本、项目基本信息、属性、依赖管理、构建配置、父POM和模块等。下面就这些常用的pom配置项进行详细介绍。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pom.xml总体结构

先来看一下简单的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">  
    <!-- 指定POM模型的版本 -->  
    <modelVersion>4.0.0</modelVersion>  
  
    <!-- 项目基本信息 -->  
    <groupId>com.example</groupId> <!-- 项目的组ID,通常是公司的域名反转 -->  
    <artifactId>my-project</artifactId> <!-- 项目的唯一标识符,在组ID内必须是唯一的 -->  
    <version>1.0-SNAPSHOT</version> <!-- 项目的版本,SNAPSHOT表示这是一个快照版本 -->  
    <packaging>jar</packaging> <!-- 项目的打包方式,这里是jar包 -->  
  
    <!-- 自定义属性 -->  
    <properties>  
        <jdk.version>1.8</jdk.version><!-- 编译时使用的Java版本 -->  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 项目的编码格式 -->  
        <maven.compiler.source>1.8</maven.compiler.source> <!-- 源码编译版本 -->  
        <maven.compiler.target>1.8</maven.compiler.target> <!-- 目标编译版本 -->  
    </properties>  
  
    <!-- 项目的依赖 -->  
    <dependencies>  
        <!-- JUnit测试框架的依赖 -->  
        <dependency>  
            <groupId>junit</groupId> <!-- 依赖的组ID -->  
            <artifactId>junit</artifactId> <!-- 依赖的artifactID -->  
            <version>4.13.2</version> <!-- 依赖的版本号 -->  
            <scope>test</scope> <!-- 依赖的作用域,这里是test,表示这个依赖只在测试时有效 -->  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
        </dependency>
    </dependencies>  
  
    <!-- 项目的构建配置 -->  
    <build> 
    	<!-- 项目源代码目录 --> 
    	<sourceDirectory>src/main/java</sourceDirectory>
    	<!-- 项目资源目录 -->
	    <resources>
	      <resource>
	        <directory>src/main/resources</directory>
	      </resource>
	    </resources>
        <!-- 配置构建过程中使用的插件 -->  
        <plugins>  
            <!-- Maven编译插件 -->  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId> 
                <version>3.8.1</version>  
                <configuration>  
                    <!-- 插件的配置信息 -->  
                    <source>${maven.compiler.source}</source> <!-- 源码编译版本 -->  
                    <target>${maven.compiler.target}</target> <!-- 目标编译版本 -->  
                </configuration>  
            </plugin>  
            <!-- Maven JAR插件 -->  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-jar-plugin</artifactId>  
                <version>3.2.0</version>  
            </plugin>   
        </plugins>  
    </build>  
</project>

二、pom常用配置项介绍

1.modelVersion

<modelVersion>4.0.0</modelVersion>

<modelVersion> 模型版本指定了当前 POM 使用的 Maven 模型版本。对于 Maven 2 和 Maven 3,版本号通常是 4.0.0。

2.项目基本信息

项目基本信息包含很多配置标签,其中一些为必填项:

groupId: 项目的组ID,在一个组织或者项目中通常是唯一的,定义了项目所属的实际组织的唯一标识符,通常是公司域名的反转。
artifactId项目的基本名称,通常是项目的模块名或 JAR 文件的名称,是项目的唯一标识符。
version项目的版本号
packaging项目的打包方式,如 JAR、WAR、EAR 等,默认为 JAR。

3.properties

<properties> 元素可以定义一组可以在整个 POM 中使用的变量,方便统一管理项目中版本号、路径、插件版本等常用属性。在使用时使用 ${…}占位符引用这些属性。

<properties>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    <maven.compiler.source>1.8</maven.compiler.source>  
    <maven.compiler.target>1.8</maven.compiler.target>  
</properties>

4 .parent

parent标签用于指定当前项目的父项目。通过继承父 POM,一个POM文件可以继承另一个POM文件的配置。

<project>
  <artifactId>my-project</artifactId>
  <packaging>jar</packaging>

  <parent>
    <groupId>com.example.parent</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
  </parent>
</project>

上述代码声明了当前项目my-project的父项目为parent-project,在子项目中可以不必声明groupIdversion,二者均会继承自 parent-project。

5.module

通常用于父项目的POM文件中,用于声明当前项目所包含的多模块项目的子模块。通过modules元素,一个POM文件可以管理多个子模块:

<modules>
    <module>module1</module>
    <module>module2</module>
</modules>

上述代码中,当前项目包含module1module2两个子项目,每个子项目都是一个独立的 Maven 项目,具有自己的 pom.xml 文件,可以进行独立构建和测试,但是拥有和父项目相同的groupIdversion

6.dependency

6.1 依赖标签

<dependencies> 元素内可以包含多个 <dependency> 元素,每个 <dependency> 元素定义了项目的一个依赖。

<dependencies>  
    <dependency>  
        <groupId>junit</groupId>  
        <artifactId>junit</artifactId>  
        <version>4.13.2</version>  
        <scope>test</scope>  
    </dependency> 
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency> 
</dependencies>

在标签<dependency>中还包含groupIdartifactIdversion等标签,其含义则对应了依赖项目的组名称、项目名称和版本号。
除此之外,还有一个重要的标签<scope><scope>一般包含以下几种范围:

6.2 scope范围

  1. compile(编译范围)
  • 默认的依赖范围,表示依赖在编译、测试和运行阶段都有效。
  • 该类依赖会被打包进最终的发布包里
  1. provided(已提供范围)
  • 表示依赖在编译和测试阶段有效,但在运行时不需要,因为容器或 JDK已经提供了这些依赖。
  • 典型的例子是servlet-api和jsp-api,对于web应用,这些API由Servlet容器(如Tomcat)提供。
  • 该类依赖不会被打包进最终的发布包中。
  1. runtime(运行时范围)
  • 表示依赖在测试和运行时阶段有效,但在编译主代码时不需要。
  • 典型的例子是JDBC驱动实现,在编译时只需要JDBC API,但在运行时需要具体的JDBC驱动。
  • 该类依赖会被打包进最终的发布包中。
  1. test(测试范围)
  • 表示依赖仅在测试阶段有效,用于编译和运行测试代码。
  • 该类依赖不会被打包进最终的发布包中。
  1. import(导入范围)
  • 它只用在<dependencyManagement>中,表示导入POM中的<dependencyManagement>部分到当前POM中。
  • 它不会导入任何实际的依赖,只是允许你使用在另一个POM中定义的<dependencyManagement>

7.build

<build> 元素包含了与构建过程相关的配置信息,包括项目的构建配置,包括源代码目录、资源目录、插件等。

  • <plugins>:定义了构建过程中使用的插件及其配置,主要用于扩展 Maven 的功能,帮助开发人员更方便地构建、打包、发布项目
  • <resources>:定义了项目中资源文件的配置,如源代码文件之外的配置文件。
  • <finalName>:定义了构建后生成文件的名称。
<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>
        <plugin>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-maven-plugin</artifactId>  
        </plugin>  
    </plugins>  
</build>

总结

pom.xml 文件是 Maven 项目的心脏,它包含了项目的配置信息,Maven 通过读取这个文件来了解项目的依赖、构建插件、目标平台等,从而完成项目的构建、打包、发布等任务。

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值