【学习笔记】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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++里 父类私有的虚函数,也是可以被子类重写和继承的。但父类私有的普通函数,子类无法直接使用

谢谢 。今天看课本上有这么个用法&#xff0c;特测试一下。这样就也可以放心的把父类的私有函数列为虚函数了&#xff0c;或者说把父类的虚函数作为私有函数了。 再补充一例&#xff1a;

2024-06月 | 维信金科 | 风控数据岗位推荐,高收入岗位来袭!

今日推荐岗位&#xff1a;策略分析经理/分析专家、贷前、中策略分析、风控模型分析。 风控部门是金融业务的核心部门&#xff0c;而从事风控行业的人即称之为风险管理者。是大脑&#xff0c;是最最最重要的部门之一。今日推荐岗位的核心技能分布如下&#xff1a; 简历发送方式…

如何使用ChatGPT辅助设计工作

文章目录 设计师如何使用ChatGPT提升工作效率&#xff1f;25个案例告诉你&#xff01;什么是 prompt&#xff1f;咨询信息型 prompt vs 执行任务 prompt编写出色 prompt 的基本思路撰写 prompt 的案例和技巧1、将 ChatGPT 视作专业人士2、使用 ChatGPT 创建表单3、使用 ChatGPT…

人工智能产品经理,行业巨头争夺的稀缺人才

前言 在当今这个由数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;正迅速成为推动各行各业创新的核心力量。随着行业巨头纷纷布局人工智能领域&#xff0c;对于专业人才的需求也日益增长。特别是人工智能产品经理这一岗位&#xff0c;缺口高达6.8万&#xff0c…

如何用Vue3打造一个引人注目的3D雷达图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 ApexCharts 雷达图&#xff1a;可视化多系列数据 应用场景介绍 雷达图是一种可视化多变量数据的多边形图表&#xff0c;每个变量表示雷达图上的一条射线&#xff0c;射线的长度表示变量的值。雷达图广泛用于展…

【ajax核心01】ajax底层原理

一:XMLHttpRequest对象 节选自MDN网站 XMLHttpRequest&#xff08;XHR&#xff09;对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL&#xff0c;获取数据。这允许网页在不影响用户操作的情况下&#xff0c;更新页面的局部内容。XMLHttpReque…

东芝-Soft Limit 报警及其解决办法

灵感来源与生活,在生活中总能有意想不到的惊喜,下面来看看小编今天的惊喜!!! 今天不知道怎么了,有人来找就说是机器人坏了,一直报警,重启关机回原点也没有用。 意外到来,只能使用手柄将控制器打手动,来看看报警显示什么。 下面就看到了这,我靠第一次看见,只能看看手…

JavaWeb之JSON、AJAX

JSON 什么是JSON&#xff1a;JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式(JavaScript提供) 特点 [{"name":"周珍珍", "age":18},{"name":"李淑文","age":20}]数据是以键值对形式…

后端不提供文件流接口,前台js使用a标签实现当前表格数据(数组非blob数据)下载成Excel

前言&#xff1a;开发过程中遇到的一些业务场景&#xff0c;如果第三方不让使用&#xff0c;后端不提供接口&#xff0c;就只能拿到table数据(Array)&#xff0c;实现excel文件下载。 废话不多说&#xff0c;直接上代码&#xff0c;方法后续自行封装即可&#xff1a; functio…

微观时空结构和虚数单位的关系

回顾虚数单位的定义&#xff0c; 其中我们把称为周期&#xff08;的绝大部分&#xff09;&#xff0c;称为微分&#xff0c;0称为原点或者起点&#xff08;意味着新周期的开始&#xff09;&#xff0c;由此我们用序数的概念反过来构建了基数的概念。 周期和单位显然具有倍数关…

在Maven工程中手动配置并测试SpringBoot(巨详)

本篇博客承继自博客&#xff1a; 在IDEA 2024.1.3 (Community Edition)中创建Maven项目_idea2024.1.3如何创建maven项目-CSDN博客 配置POM文件 打开工程中的pom.xml文件&#xff0c;先向其中写入 <parent><groupId>org.springframework.boot</groupId><…

大厂的 404 页面都长啥样?看到最后一个,我笑了~

每天浏览各大网站&#xff0c;难免会碰到404页面啊。你注意过404页面么&#xff1f;猿妹搜罗来了下面这些知名网站的404页面&#xff0c;以供大家欣赏&#xff0c;看看哪个网站更有创意&#xff1a; 腾讯 网易 淘宝 百度 新浪微博 新浪 京东 优酷 腾讯视频 搜狐 携程 去哪儿 今…

深度解析RocketMq源码-持久化组件(四) CommitLog

1.绪论 commitLog是rocketmq存储的核心&#xff0c;前面我们介绍了mappedfile、mappedfilequeue、刷盘策略&#xff0c;其实commitlog的核心组件我们基本上已经介绍完成。 2.commitLog的组成 commitLog的核心其实就是MqppedFilequeue&#xff0c;它本质上就是多个mappedFile…

web中间件漏洞-weblogic漏洞-弱口令war包上传

web中间件漏洞-weblogic漏洞-弱口令war包上传 弱口令war包上传 制作war包 jar cvf ma.war.(最后的.代表打包当前目录) 弱口令weblogic/weblogic123 点击部署后、一直点击下一步 访问webshell

传输大文件之镭速自动清理过期文件

电子文档的普及无疑极大地便利了我们的工作与生活&#xff0c;但随之而来的是如何有效管理这些日益增多的文件。企业面临着存储空间紧张、文件传输复杂、敏感信息泄露等挑战。自动化文件清理的需求日益凸显&#xff0c;这不仅关乎个人对高效工作环境的追求&#xff0c;更是企业…

Centos7安装自动化运维Ansible

自动化运维Devops-Ansible Ansible是新出现的自动化运维工具&#xff0c;基于Python 开发&#xff0c;集合了众多运维工具&#xff08;puppet 、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置 、批量程序部署、批量运行命令 等功能。Ansible…

【02】区块链技术应用

区块链在金融、能源、医疗、贸易、支付结算、证券等众多领域有着广泛的应用&#xff0c;但是金融依旧是区块链最大且最为重要的应用领域。 1. 区块链技术在金融领域的应用 1.2 概况 自2019年以来&#xff0c;国家互联网信息办公室已发布八批境内区块链信息服务案例清单&#…

Java8 --- Gradle安装及测试使用

目录 一、Gradle 1.1、简介 1.2、安装 1.2.1、注意事项 1.2.2、安装流程 1.2.3、配置共享仓库 1.3、构建项目 1.4、常用指令 1.4.1、gradle classes 1.4.2、gradle clean 1.4.3、gradle test 1.4.4、gradle build 1.5、修改Maven下载源 1.6、Wrapper包装器 1.…

Samtec制造理念系列二 | 差异变量管理的意义与挑战

【摘要/前言】 制造高端电子产品是非常复杂精密的过程。制作用于演示或原型的一次性样品可能具有挑战性&#xff0c;但真正的挑战在于如何以盈利的方式持续生产。 这就是Samtec风险投资研发工程总监Aaron Tucker在一次关于生产高密度微小型连接器的挑战的演讲中所强调的观点。…

RabbitMQ的部署

一、前言 演示的为RabbitMQ的单机部署&#xff0c;在Centos7虚拟机中使用Docker来安装&#xff0c;需要掌握相应的docker命令 二、下载镜像 启动Docker: systemctl start docker 在线拉取&#xff1a;docker pull docker pull rabbitmq:3-management 三、安装MQ 运行容器&…