详解Maven POM(项目对象模型)

详解 Maven POM(项目对象模型)

什么是 Maven POM?

Maven POM,即 Project Object Model,是 Maven 中的项目对象模型,它是 Maven 中的基础概念之一,对 Maven 做任何的配置都需要使用到 POM,POM 是 Maven 进行构建时的核心之一。POM 文件会定义项目的基本信息,包括但不限于:

  • 项目组信息
  • 框架版本信息
  • 依赖的 jar 包信息
  • 构建的配置信息,如打包方式等
  • 插件的配置信息

因此我们可以说,POM 是 Maven 项目的全局配置文件。

POM 的基本结构

我们来看看 POM 的基本结构,一个 POM 文件是一个 XML 文件,用于描述一个 Maven 项目,由三部分组成:

  • 项目简介(introduction)
  • 项目依赖(dependencies)
  • 构建说明(build)

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">                     

    <!-- 项目基本信息,包括 but not limited to:项目名称,版本信息, -->
    <modelVersion>4.0.0</modelVersion>                                   
    <groupId>group-id</groupId>                                          
    <artifactId>artifact-id</artifactId>                                 
    <version>1.0.0</version>                                              

    <!-- 项目依赖 -->
    <dependencies>                                                       
        <!-- ... -->                                                      
    </dependencies>                                                      

    <!-- 构建说明,包括 but not limited to:源代码目录,Jar 包名称和类型 -->
    <build>                                                               
        <sourceDirectory>src/main/java</sourceDirectory>                  
        <plugins>                                                         
            <!-- ... -->                                                  
        </plugins>                                                        
    </build>                                                              
</project>

POM 机制的工作流程

Maven 在运行时会加载 POM 文件,POM 文件的默认文件名是 pom.xml,如果该文件不存在则会跳过该项目。Maven 在加载 POM 文件时会自动创建一个名为 ProjectBuildingRequest 的对象,用于将项目加载到内存中,此时的 POM 文件仅仅是描述了项目模型,不会执行任何操作。当 Maven 开始构建项目时,它会根据定义在 POM 中的数据进行统一配置,如依赖的 JAR 文件、编译选项等,之后按照配置信息对项目进行编译、测试、打包,最后输出为元数据文件或可执行文件,具体的构建执行过程在 Build 阶段中执行。

示例

我们将使用两个示例来演示 POM 文件的具体使用。

示例 1:Spring Boot 应用
<?xml version="1.0" encoding="UTF-8"?>
<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</groupId>                                       
    <artifactId>spring-boot-app</artifactId>                             
    <version>1.0-SNAPSHOT</version>                                      

    <!-- 添加 Spring Boot Starter Parent -->
    <parent>                                                             
        <groupId>org.springframework.boot</groupId>                      
        <artifactId>spring-boot-starter-parent</artifactId>               
        <version>2.3.3.RELEASE</version>                                  
        <relativePath/>                                                    
    </parent>  

    <!-- 引入 Spring Boot Starter Web 依赖 -->
    <dependencies>                                                       
        <dependency>                                                     
            <groupId>org.springframework.boot</groupId>                   
            <artifactId>spring-boot-starter-web</artifactId>               
            <version>2.3.3.RELEASE</version>                               
            <scope>compile</scope>                                         
        </dependency>                                                     
        <!-- ... -->                                                      
    </dependencies>                                                      

    <!-- 配置 Maven 打包方式 -->
    <build>                                                               
        <plugins>                                                         
             <plugin>                                                     
                 <groupId>org.springframework.boot</groupId>              
                 <artifactId>spring-boot-maven-plugin</artifactId>         
             </plugin>                                                    
        </plugins>                                                        
    </build>                                                              
</project>

该示例是一个使用 Spring Boot 构建的 Web 应用程序的 POM 文件示例。在示例中,我们使用 spring-boot-starter-parent 作为父项目。spring-boot-starter-parent 是一个特殊的 Starter,它具有管理依赖和插件版本的功能。在 dependencies 部分,我们添加了对 Spring Boot Web Starter 的依赖,以便将 Web 框架引入我们的应用程序。在 build 部分,我们使用 spring-boot-maven-plugin 为我们的项目生成一个可执行的 Jar 包。

示例 2:Java 项目
<?xml version="1.0" encoding="UTF-8"?>
<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</groupId>                                       
    <artifactId>java-project</artifactId>                                 
    <version>1.0-SNAPSHOT</version>                                      

    <!-- 配置依赖 -->
    <dependencies>                                                       
       <dependency>                                                      
           <groupId>junit</groupId>                                       
           <artifactId>junit</artifactId>                                 
           <version>4.12</version>                                        
           <scope>test</scope>                                            
       </dependency>                                                     
     </dependencies>                                                      
</project>

该示例是一个简单的 Java 项目的 POM 示例。在示例中,我们添加了对 JUnit 4 的依赖,该依赖仅在测试资源中使用。这是一种优化依赖的策略,可以减轻一些不必要的开销。其它的配置项都与示例一相同。

希望这篇文章能够解答你对 Maven POM 的疑惑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Maven POM(项目对象模型) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java IO及BufferedReader.readline()出现的Bug

    关于“Java IO及BufferedReader.readline()出现的Bug”,我们需要注意以下两点: 1. Java IO 中的缓存问题 Java的IO操作是基于缓存进行的,而很多读取函数如BufferedReader. readline()是以换行符作为结束标记的,但是我们在编写代码时常常忽略了特殊情况的处理,导致出现了缓存问题,例如一次读取操作…

    Java 2023年5月27日
    00
  • Sprint Boot @RequestParam使用方法详解

    @RequestParam是Spring Boot中的一个注解,它用于将HTTP请求参数映射到控制器方法的参数上。在使用Spring Boot开发Web应用程序时,@RequestParam是非常重要的。本文将详细介绍@RequestParam的作用和使用方法,并提供两个示例说明。 @RequestParam的作用 @RequestParam的作用是将HTT…

    Java 2023年5月5日
    00
  • 分页技术原理与实现之无刷新的Ajax分页技术(三)

    我来详细讲解一下“分页技术原理与实现之无刷新的Ajax分页技术(三)”的完整攻略。 1. 理解Ajax分页技术原理 在使用Ajax技术实现无刷新分页的过程中,主要涉及到以下几个方面: 1.1 客户端与服务端的交互 当用户点击分页按钮时,浏览器向服务端发送一个包含分页参数的HTTP请求,请求数据页的内容。服务端接收到请求后,生成分页数据并将其返回给浏览器。 1…

    Java 2023年6月15日
    00
  • C#中方法的直接调用、反射调用与Lambda表达式调用对比

    C# 中调用方法主要有三种方式:直接调用、反射调用和Lambda表达式调用。这三种方式各有优缺点,接下来将进行详细的对比。 直接调用 直接调用是一种最常见的方法调用方式,也是最简单高效的方式。调用方法时,我们只需要知道方法名以及参数就可以进行调用。C# 中有两种直接调用方式:静态调用和实例调用。 静态调用 静态调用只需要使用类名就可以调用方法,不需要实例对象…

    Java 2023年5月19日
    00
  • 三种Java求最大值的方法

    当我们在Java中处理数据时,经常需要找到一组数据中的最大值。本文将介绍三种Java求最大值的方法: 方法一:将数组转换为 List,使用 Collections.max() 方法 这种方法主要是针对数组中的元素进行比较,使用了Java提供的工具类 Collections 中的max()方法,并将数组转换成List类型。具体实现代码如下: import ja…

    Java 2023年5月26日
    00
  • 微信小程序 生成携带参数的二维码

    生成携带参数的二维码是微信小程序开发中常用的功能之一。首先我们需要了解微信小程序二维码中的参数分为两种类型:场景值和自定义参数。场景值是微信提供的一些可识别的标识,自定义参数则是开发者自行定义的参数。下面是详细的攻略: 1. 场景值二维码 在小程序代码中调用微信提供的场景值生成 API。将 path 指向需要打开的页面。如果页面需要带参数,可以在 path …

    Java 2023年5月23日
    00
  • 详解Spring Controller autowired Request变量

    这是一个非常好的问题。在Spring MVC中,控制器(Controller)是用来处理请求的,请求(Request)是一个非常重要的对象。当我们使用@RequestMapping注解处理请求时,经常会使用请求对象(Request)来获取请求中携带的数据和请求参数以及设置响应,包括响应状态、响应头和响应正文等。Autowired是spring框架中的注解,用…

    Java 2023年6月15日
    00
  • Java实现的动态数字时钟功能示例【显示世界时间】

    以下是针对Java实现动态数字时钟功能的攻略: 准备工作 在实现动态数字时钟功能之前,我们需要进行一些准备工作: 安装Java开发环境。可以选择在官网下载安装包进行安装,也可以使用多种开源IDE进行开发,如Eclipse、IntelliJ IDEA。 下载所需依赖。我们需要下载Java实现动态数字时钟的依赖库,比如joda-time库。 创建Java项目。可…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部