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标签及其子标签,其他的子标签的用处不是很多,而且本篇的内容也比较长了,我们下期再说吧

相关推荐
Q_Q19632884751 天前
python+springboot+uniapp微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统
spring boot·python·django·uni-app·node.js·php
Rhys..1 天前
.gitignore文件的作用及用法
python·github
IT学长编程1 天前
计算机毕业设计 基于深度学习的酒店评论文本情感分析研究 Python毕业设计项目 Hadoop毕业设计选题 机器学习选题【附源码+文档报告+安装调试】
hadoop·python·深度学习·机器学习·数据分析·毕业设计·酒店评论文本情感分析
~-~%%1 天前
Moe机制与pytorch实现
人工智能·pytorch·python
深耕AI1 天前
【PyTorch训练】为什么要有 loss.backward() 和 optimizer.step()?
人工智能·pytorch·python
0_0梅伊阁诗人1 天前
Django ORM 模型
开发语言·数据库·笔记·python·oracle·django
Genevieve_xiao1 天前
【dl】python基础 深度学习中需要用到的python基础
python·深度学习
m0_578267861 天前
从零开始的python学习(九)P142+P143+P144+P145+P146
笔记·python·学习
is08151 天前
You Only Look Once
python
zqy02271 天前
HTTP的Web服务测试在Python中的实现
python·网络协议·http