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。

java 复制代码
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下就得使用这个标签。

java 复制代码
<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也是同样可以替换的。

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

<extensions>标签

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

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

总结

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

相关推荐
跟橙姐学代码19 分钟前
Python 集合:人生中最简单的真理,只有一次
前端·python·ipython
偷心伊普西隆28 分钟前
Python Excel 通用筛选函数
python·excel·pandas
Warren9835 分钟前
Spring Boot 整合网易163邮箱发送邮件实现找回密码功能
数据库·vue.js·spring boot·redis·后端·python·spring
CodeCraft Studio1 小时前
Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
python·excel·numpy·aspose·数据表格·aspose.cells·excel文档格式转换
一粒马豆1 小时前
chromadb使用hugging face模型时利用镜像网站下载注意事项
python·embedding·chroma·词嵌入·hugging face·词向量·chromadb
zhysunny1 小时前
Day22: Python涡轮增压计划:用C扩展榨干最后一丝性能!
c语言·网络·python
小张同学zkf2 小时前
【测试】基于博客系统的测试报告
python·功能测试·压力测试·测试
麦麦大数据2 小时前
求职推荐大数据可视化平台招聘系统 Vue+Flask python爬虫 前后端分离
vue.js·爬虫·python·信息可视化·flask·推荐算法·协同过滤
海绵宝宝汉堡包3 小时前
数据分析专栏记录之 -基础数学与统计知识 2 概率论基础与python
python·数据分析·概率论
赴3354 小时前
图像边缘检测
人工智能·python·opencv·计算机视觉