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

相关推荐
那雨倾城41 分钟前
PiscCode:基于OpenCV的前景物体检测
图像处理·python·opencv·计算机视觉
一粒马豆2 小时前
flask_socketio+pyautogui实现的具有加密传输功能的极简远程桌面
python·flask·pyautogui·远程桌面·flask_socketio
沉木渡香3 小时前
【VSCode中Java开发环境配置的三个层级之Maven篇】(Windows版)
java·vscode·maven
Y.9993 小时前
Python 题目练习 Day1.2
开发语言·python
闲人编程4 小时前
使用Celery处理Python Web应用中的异步任务
开发语言·前端·python·web·异步·celery
yunmi_5 小时前
分布式文件存储系统FastDFS(入门)
java·分布式·maven·fastdfs
MYX_3095 小时前
第四章 神经网络的学习
python·神经网络·学习
郝学胜-神的一滴6 小时前
Effective Python 第38条:简单的接口应该接受函数,而不是类的实例
开发语言·python·软件工程
海琴烟Sunshine6 小时前
leetcode 35.搜索插入的位置 python
python·算法·leetcode
海琴烟Sunshine6 小时前
leetcode 28. 找出字符串中第一个匹配项的下标 python
linux·python·leetcode