详解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 使用json-lib处理JSON详解及实例代码

    下面是详细讲解“Java 使用json-lib处理JSON详解及实例代码”的完整攻略: 什么是 JSON JSON 是一种轻量级的数据交换格式,它可以被人类很容易地读取和编写,同时也可以被计算机程序很容易地解析和生成。JSON 的全称是 JavaScript Object Notation,它的语法格式来源于 JavaScript 语言的对象字面量表示法。J…

    Java 2023年5月26日
    00
  • Java内存模型的作用是什么?

    Java内存模型定义了Java程序中不同线程的内存访问行为和相互作用。它的作用是确保线程之间的可见性、原子性和有序性,提供一种可靠的线程同步机制。 在Java程序中,内存访问操作被划分为读操作和写操作。Java内存模型通过定义一系列规则来约束这些操作,确保它们在多线程环境下的顺序和可见性。以下是Java内存模型的重要特性: 原子性:对于单个的变量读/写具有原…

    Java 2023年5月11日
    00
  • java生成指定范围的随机日期

    本题需要先明确一下要求,即生成指定范围的随机日期。针对这个问题,我们可以采用以下方法: 1. 生成随机年份 可以利用Java中的Random类生成指定范围内的随机年份,例如需要生成2010年至2020年之间的随机年份,可以使用下列代码实现: Random random = new Random(); int year = random.nextInt(11)…

    Java 2023年5月20日
    00
  • Request获取Session的方法总结

    Request获取Session的方法总结 Session是Web开发中常见的一种用户状态管理方式,可以在不同的页面之间传递和共享数据。在Python Web框架中,常用的Session实现方式是通过Request对象获取Session。以下是关于Request获取Session的方法总结。 通过Request的cookies属性获取Session Sess…

    Java 2023年6月15日
    00
  • PHP的SQL注入过程分析

    下面我将为您详细讲解PHP的SQL注入过程分析的完整攻略,包含以下几个部分: SQL注入的概念和危害 SQL注入攻击方式和示例说明 防范SQL注入的方法 1. SQL注入的概念和危害 SQL注入是一种通过在应用程序中注入SQL语句来达到欺骗数据库执行恶意操作的攻击手段,攻击者可以通过 SQL注入攻击窃取数据、修改数据或者破坏数据。 SQL注入的危害表现为:用…

    Java 2023年6月15日
    00
  • 在IDEA中安装scala、maven、hadoop遇到的问题小结

    下面是详细讲解“在IDEA中安装Scala、Maven、Hadoop遇到的问题小结”的完整攻略: 安装Scala 下载安装包 首先,需要下载Scala的安装包,可以从官网 https://www.scala-lang.org/download/ 选择合适的版本进行下载。 解压并配置环境变量 下载完成后,将压缩包解压到指定目录(例如在Windows系统中解压到…

    Java 2023年5月20日
    00
  • java构造函数的三种类型总结

    Java构造函数是用来初始化类的对象的函数。在Java中,有以下三种类型的构造函数: 默认构造函数(Default Constructor) 默认构造函数是没有参数的构造函数,也就是说,如果一个类没有定义任何构造函数,那么默认会有一个不带参数的构造函数。当我们创建类的对象时,如果没有显式地调用构造函数,那么就会自动调用默认构造函数。 以下是默认构造函数的示例…

    Java 2023年5月26日
    00
  • PHP+JS实现批量删除数据功能示例

    下面是详细的“PHP+JS实现批量删除数据功能示例”的完整攻略。 第一步:分析需求并准备工作 在实现批量删除数据功能前,我们需要分析一下需求。批量删除数据功能是指可以同时删除多条数据,而不需要逐个删除,这样可以提高操作效率。具体实现步骤如下: 准备工作: 编写HTML页面,包括显示数据部分和删除数据部分。 编写PHP程序,用于实现从数据库中获取数据,将数据传…

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