当前位置: 首页 > news >正文

Maven(三)

build标签

这个标签的功能还是蛮多的,我们一个一个说,先来介绍一下这个build这个标签,用于 ​控制项目构建的全过程,包括编译、测试、资源处理、打包等关键环节。也就是说只要和构建又关系的都可以在这个里面配置。

<plugins>定义构建过程中使用的插件及其配置
<pluginManagement>集中管理插件版本和基础配置(供子模块继承)
<resources>控制主代码(src/main/resources)的资源文件处理
<testResources>控制测试代码(src/test/resources)的资源文件处理
<finalName>指定最终生成的构建产物名称(如JAR/WAR文件名)
<directory>设置编译输出目录(默认:target/classes
<outputDirectory>指定主代码编译输出路径(覆盖<directory>
<testOutputDirectory>指定测试代码编译输出路径
<sourceDirectory>自定义主代码目录(默认:src/main/java
<testSourceDirectory>自定义测试代码目录(默认:src/test/java
<filters>指定属性过滤文件(如 src/main/filters/env.properties
<extensions>启用构建扩展(如WAR插件需要<extension>true</extension>

<plugins>标签

<plugin><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><executions><execution><id>default-compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>default-testCompile</id><phase>test-compile</phase><goals><goal>testCompile</goal></goals></execution></executions>
</plugin>

就以上面的这个为例,基本上就是全部的标签了,然后这个插件是什么意思之前也有讲过,其实就是对应相关的jar包执行对应的命令,上面就是对应的是maven的compiler命令,只是我们显示的把他加到pom里面,然后这个executions就是执行配置,里面的phase对应的就是maven的生命周期,goal对应的就是目标也就是这个jar包中对应的行为,理解成会做什么事就行了。但是一般情况下不同的插件的goal和phsqe都是不同的需要对应的文档去查看,一般这个executions标签就很少用了。另外我们所有的POM都有一个顶级的父类POM,就如同java的Object一样,很多配置POM里已经定义好了就如这个maven-compiler-plugin。

mvn help:effective-pom

我们可以使用这个目录来查看有效的pom文件,什么叫有效就是继承了所有的pom后,实际的pom到底是什么样子的,这个比较长这边就不演示了。使用这个插件标签其实是使用其他第三方的插件的,如SpringBoot的打包插件,目的就是把jar打包成可执行文件,可以把依赖一起打包到BOOT—INF到lib目录下,因为maven自带的插件不会把依赖也加到jar包中。

这两个就是不同的插件,第一个是普通的maven插件打包,第二个就是SpringBoot的插件打包,lib目录下是有对应的依赖文件的,可以直接部署的。

<pluginManagement>标签

这个标签其实和签一篇说的依赖管理标签dependencyManagement的作用是一样的,就是统一管理版本的,也是一样插件需要在子模块声明,不声明是无用的,声明后可以不用写版本和配置信息。

<!-- 无需写version和configuration,继承父POM -->

<resources>标签

用于 ​精细控制资源文件(如配置文件、静态资源)的处理方式,决定哪些文件会被复制到构建输出目录(如 target/classes),以及如何处理这些文件。默认情况下,Maven 会自动复制 src/main/resources 下的所有文件到 target/classes。通过 <resources> 可以:添加额外的资源目录、排除或包含特定文件、启用变量替换(如 ${property} 或 @property@)也就是动态替换资源文件中的占位符(常用于多环境配置)。还有处理非标准资源​例如将 src/main/java 中的 XML 文件(如 MyBatis Mapper)复制到输出目录。

简单来说,就是maven默认只会把src/main/resources 下的资源文件如.xml放到编译后的target/classes让程序在idea中运行可以找到,但有些资源文件是和java文件方一起的,那么就不会被放进来,因为maven只会编译src/main/java的.java文件,如果想把这个目录下的文件也放到target/classes下就得使用这个标签。

<build><resources><resource><directory>资源目录路径</directory><filtering>true/false</filtering>  <!-- 是否启用变量替换 --><includes>  <!-- 白名单:只包含哪些文件 --><include>文件匹配模式</include></includes><excludes>  <!-- 黑名单:排除哪些文件 --><exclude>文件匹配模式</exclude></excludes><targetPath>输出子目录</targetPath>  <!-- 可选 --></resource><!-- 可配置多个resource --></resources>
</build><resource><directory>src/main/java</directory><includes><include>​**​/*.xml</include>  <!-- 复制MyBatis Mapper文件 --></includes>
</resource>

如果不加<includes>或者<excludes>标签,那么默认就是当前选择的资源文件的全部类型都会被加载(<excludes>优先级要比<includes>高,也就是如果两个标签都定义了同一个文件,那么最终会被排除),而这个 <filtering>就是要不要打开变量替换默认是关的。在 application.properties 中如下,yml也是同样可以替换的。

app.version=@project.version@  <!-- 编译后变成 app.version=1.0.0 -->
app.name=${project.name}

<extensions>标签

用于 启用或扩展构建系统的核心功能,通常用于加载特殊类型的依赖(如自定义打包格式、仓库传输协议等),简单来说就是扩展Maven功能的,和传统的依赖不同点在于,传统的依赖只是当前项目要用的东西,而这个是Maven可以用的东西,和我们说Jave的动态代理一样,是用来增强Maven的功能的。

也就是是导入第三方的扩展插件,可以增强maven的特点功能。

总结

本篇主要讲了maven的build标签及其子标签,其他的子标签的用处不是很多,而且本篇的内容也比较长了,我们下期再说吧

http://www.dtcms.com/a/342855.html

相关文章:

  • Class A 包含字段 x Class B 也包含字段 x,如果判断List<A> lista 和 List<B> listb 有相同的 x?
  • 基于websocket聊天室的基本点
  • SQL中的游标
  • html ajax前端页面
  • 51单片机-驱动直流电机模块教程
  • 单片机\物联网\51单片机\嵌入式开发\软硬件结合的基于STM32的电梯管理系统的设计/基于STM32的电梯运行系统的设计
  • 【华为OD-C卷-020 -关联端口组合并 100分(python、java、c++、js、c)】
  • 解决 uniapp 修改index.html文件不生效的问题
  • PCB文件怎么快速判断是通孔还是盲孔呢?
  • Git 2.15.0 64位安装步骤Windows详细教程从下载到验证(附安装包下载)
  • 14、外部中断
  • 【科普向-第三篇】汽车电子MCU操作系统详解:CP AUTOSAR与FreeRTOS
  • 1688电商商品大数据采集之路 技术篇
  • 嵌入式接口通识知识之PWM接口
  • 机器学习聚类与集成算法全解析:从 K-Means 到随机森林的实战指南
  • 从系统漏洞归零到候诊缩短20%:一个信创样本的效能革命
  • 播放器视频后处理实践(一)
  • 视频加水印 视频加水印软件 视频加动态水印
  • 音视频面试题集锦第 29 期
  • 如何有效防止视频在浏览器播放时被录屏?
  • 全媒体人才培育对接会:国际数字影像产业园赋能企业发展
  • 如何学习编程
  • 完全背包(模板)
  • Mysql基础(③事务)
  • [ Servlet 服务器]
  • LTM框架Letta
  • Java项目:基于SpringBoot和VUE的在线拍卖系统(源码+数据库+文档)
  • 【leetcode】202. 快乐数
  • IKE工作过程
  • 树表转换成有层次的List列表(无限层级)