【学习笔记】Maven高级01:POM深入了解

2024-06-21 07:12

本文主要是介绍【学习笔记】Maven高级01:POM深入了解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、POM的四个层次
    • 超级POM
    • 父POM
    • 当前POM
    • 有效POM(effective pom)
  • 二、属性的声明和引用
    • 使用 mvn help:evaluate查看属性
    • 通过Maven访问系统属性
      • 1、访问Java系统属性
      • 2、访问系统属性
      • 4、访问系统环境变量
      • 5、访问project属性
        • 访问一级标签
        • 访问子标签
        • 访问标签列表
      • 6、访问全局配置settings
  • 三、Build标签详解
    • 3.1 如何查看build标签
    • 3.2 标签的组成
      • 3.2.1 各个标签的作用
      • 3.2.2 备用插件管理
      • 3.2.3 生命标签插件
        • 生命标签插件小结
    • 3.3 典型应用
      • 应用1:指定JDK版本
      • 应用2:SpringBoot 定制化打包
      • 应用3:Mybatis的逆向工程


一、POM的四个层次

超级POM

POM确实存在继承关系,如果一个POM没有指定继承的POM,也会默认继承一个超级POM

经过我们前面的学习,我们看到 Maven 在构建过程中有很多默认的设定,例如:源文件存放的目录、测试源文件存放的目录、构建输出的目录.…等等。但是其实这些要素也都是被 Maven 定义过的。定义的位置就是:超级POM.

image-20240617162353211

超级Pom的内容:

  • 指定默认的maven仓库
  • build标签,定义文件构建路径
  • 指定默认插件
  • 等等

父POM

明确指定继承关系

image-20240617162754651

当前POM

最关注,使用最多的一层,配置POM主要配置的就是当前POM

有效POM(effective pom)

当前POM叠加超级POM和父POM,组成最终的有效POM文件。

配置优先级以子级优先

使用mvn help:effective-pom指令即可查看有效pom

二、属性的声明和引用

使用 mvn help:evaluate查看属性

输入指令 mvn help:evaluate,直到出现如下提示后

image-20240617163848509

通过Maven访问系统属性

1、访问Java系统属性

使用java代码获取

public static void main(String[] args) {Properties properties = System.getProperties();properties.list(System.out);
}

内容如下:

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\javaapp\jdk1.8\jre\bin
java.vm.version=25.202-b08
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
.....

只要是能号展示出来的变量,POM都可以获取,举个例子

image-20240617164322429

2、访问系统属性

比如${java.runtime.name}

image-20240617164453586

4、访问系统环境变量

加上env即可,比如${env.JAVA_HOME}

image-20240617164537628

5、访问project属性

可以使用project.xxx来访问当前POM中的元素值

访问一级标签

${project.标签名}

访问子标签

${project.子标签.标签名}

访问标签列表

${project.子标签.标签名[下标]}

比如声明了一些子模块

image-20240617165212339

image-20240617165224691

6、访问全局配置settings

前缀加${settings.xxx},访问全局配置

image-20240617172113779

三、Build标签详解

3.1 如何查看build标签

在实际使用 Maven 的过程中,我们会发现 build 标签有时候有,有时候没,这是怎么回事呢?其实通过有效POM 我们能够看到,build 标签的相关配置其实一直都在,只是在我们需要定制构建过程的时候才会通过配置build 标签覆盖默认值或补充配置。

这一点我们可以通过打印有效 POM 来看到。mvn help:effective-pom

配置build标签是对超级POM的补充配置,只有在默认的配置无法满足时,才会修改该标签。

3.2 标签的组成

3.2.1 各个标签的作用

image-20240617172521377

3.2.2 备用插件管理

通过 pluginManagement 标签管理起来的插件就像 dependencyManagement 一样,子工程使用时可以省略版本号,起到在父工程中统一管理版本的效果

3.2.3 生命标签插件

执行部分excutions标签里有多个excution标签

  • id 指定唯一标识
  • phase:管理的声明周期阶段
    • clean
    • test
    • compile
    • install
    • 等等
  • goals : 关联指定的声明周期的目标
    • 当配置多个goal标签时,标识一个生命周期环节可以对应当前插件的多个目标

另外,还可以对插件目标的执行过程进行配置*(非常深入的时候)*。举个例子

image-20240617173212425

生命标签插件小结

每个插件能做哪些设置,都是具体插件自己规定的,不能一概而论

3.3 典型应用

应用1:指定JDK版本

常见的通过在父级POM指定jdk版本

image-20240617174156792

  <!--构建相关的配置--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></build>

image-20240617174253196

应用2:SpringBoot 定制化打包

很显然spring·boot-maven·plugin并不是 Maven 自带的插件,而是 SpringBoot 提供的,用来改变 Maven 默认的构建行为。具体来说是改变打包的行为。默认情况下 Maven 调用 maven-jar·plugin 插件的jar 目标,生成普通的jar 包。
普通 jar 包没法使用 java -jar xxx.jar 这样的命令来启动、运行,但是 SpringBoot 的设计理念就是每一个『微服务』导出为一个jar 包,这个jar 包可以使用 java -jar xxx.jar 这样的命令直接启动运行。这样一来,打包的方式肯定要进行调整,所以SpringBoot提供了 spring·boot.maven·plugin 这个插件来定制打包行为。

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.15</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><finalName>${project.artifactId}</finalName>
</build>

应用3:Mybatis的逆向工程

逆向工程的操作是以构建过程中插件形式出现的(在导入插件时,还会像插件内导入依赖)

比如在导入mybatis代码生成的时候,还会根据具体的需要导入一些数据库连接池,驱动等插件

image-20240617174940178

这篇关于【学习笔记】Maven高级01:POM深入了解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080549

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

SpringBoot中配置文件pom.xml的使用详解

《SpringBoot中配置文件pom.xml的使用详解》SpringBoot的pom.xml文件是Maven项目的核心配置文件,用于定义项目的依赖、插件、构建配置等信息,下面小编就来和大家详细介绍一... 目录1. 基本结构2. 关键部分详解2.1 <modelVersion>2.2 项目坐标2.3 <p

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具