Maven 插件使用

devtools/2024/9/24 17:12:39/
mavenplugin_0">1.spring-boot-maven-plugin

我们直接使用 maven package (maven自带的package打包功能),打包Jar包的时候,不会将该项目所依赖的Jar包一起打进去,在使用java -jar命令启动项目时会报错,项目无法正常启动。这个时候,我们就可以考虑引用spring-boot-maven-plugin插件来为项目打Jar包。

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring.boot.version}</version><executions><execution><goals><!-- 将引入的 jar 打入其中 --><goal>repackage</goal></goals></execution></executions>
</plugin>
mavenplugin_22">2.flatten-maven-plugin

在使用Maven多模块结构工程时,版本管理是一件很繁琐且容易出错的事情。每次升级版本号都要手动调整或者通过mvn versions:set -DnewVerion=1.2.0-SNAPSHOT命令去更改每一个子模块的版本号,非常的不方便,Maven官方文档说:自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。即在maven多模块项目中,可配合插件flatten-maven-plugin${revision}属性来实现全局版本统一管理。

<!-- 统一 revision 版本 -->
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.5.0</version><configuration><!-- 避免IDE将 .flattened-pom.xml 自动识别为功能模块 --><flattenMode>resolveCiFriendliesOnly</flattenMode><updatePomFile>true</updatePomFile></configuration><executions><execution><goals><goal>flatten</goal></goals><id>flatten</id><phase>process-resources</phase></execution><execution><goals><goal>clean</goal></goals><id>flatten.clean</id><phase>clean</phase></execution></executions>
</plugin>

不可混合使用${revision}和明确字符串版本号,若出现父子模块版本号混合使用${revision}和明确字符串形式如1.2.0-SNAPSHOT,在mvn package会出现类似如下错误

在这里插入图片描述

mavencleanplugin_61">3.maven-clean-plugin

maven-clean-plugin 插件对应的命令是 mvn clean,执行 mvn clean 命令会删除构建输出目录 target。mvn clean 命令其实是调用 maven-clean-plugin 插件执行 clean 操作的。maven-clean-plugin 插件是默认安装好的插件,并不需要我们在 pom.xml 文件中进行配。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-clean-plugin</artifactId><version>3.2.0</version><configuration><!-- 忽略错误 --><failOnError>false</failOnError></configuration><!-- mvn package和mvn clean package等价配置 --><executions><execution><id>auto-clean</id><phase>initialize</phase><goals><goal>clean</goal></goals></execution></executions>
</plugin>
mavencompilerplugin_87">4.maven-compiler-plugin

maven-compiler-plugin 插件是一个 Maven 插件,用来编译项目代码;自从3.0开始默认的编译器是 javax.tools.JavaCompiler,用来编译 Java 源码;如果你想强制插件使用 javac 编译器,你必须配置插件的属性 forceJavacCompilerUse;还要注意,当前默认源(source)设置为 1.6,默认目标(target)设置为 1.6。独立运行 Maven 和 JDK,可以通过 source 和 target 选项更改他们的默认值;

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><!-- 源代码使用的JDK版本 --><source>1.8</source> <!-- 需要生成的目标class文件的编译版本 --><target>1.8</target> <!-- 字符集编码 --><encoding>UTF-8</encoding><!-- 跳过测试 --><skipTests>true</skipTests><!-- maven-compiler-plugin 插件,解决 Lombok + MapStruct 组合 --><annotationProcessorPaths><path><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.7.18</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.5.5.Final</version></path></annotationProcessorPaths></configuration>
</plugin>
mavenresourcesplugin_127">5.maven-resources-plugin

maven-resources-plugin插件来将src/main/resources目录中的资源文件单独剥离出来,生成一个独立的资源文件包,用于处理项目资源文件并拷贝到输出目录。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><executions><execution><id>copy-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>${project.build.directory}/resources</outputDirectory><resources><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource></resources></configuration></execution></executions></plugin>

上述配置将在Maven的package阶段执行copy-resources目标,并将src/main/resources目录中的所有文件复制到${project.build.directory}/resources目录下。执行mvn package命令后,将生成一个独立的资源文件包,其中包含src/main/resources目录中的所有文件。可以在${project.build.directory}/resources目录中找到这个资源文件包。

mavensourceplugin_161">6.maven-source-plugin

maven-source-plugin提供项目自动将源码打包并发布的功能,在需要发布源码项目的pom.xml文件中添加如下代码即可执行 mvn install,maven会自动将source install到repository 。执行 mvn deploy,maven会自动将source deploy到remote-repository 。执行 mvn source:jar,单独打包源码。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.3.0</version><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions>
</plugin>
mavenwarplugin_181">7.maven-war-plugin

maven-war-pluginWAR 插件负责收集 Web 应用程序的所有依赖项、类和资源,并将它们打包到 WAR 包中,仅包含 scopecompile+runtime 的依赖项,默认绑定到 package 阶段。

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.4.0</version></plugin>
</plugins>
<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/**</include></includes><filtering>true</filtering></resource>
</resources>
mavenantrunplugin_211">8.maven-antrun-plugin

maven-antrun-plugin 是 Maven 的一个插件,它允许你在 Maven 构建生命周期的某个阶段执行 Apache Ant 任务。Apache Ant 是一个基于 Java 的构建工具,常用于 Java 项目的构建和部署。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>3.1.0</version>
</plugin>
mavensurefireplugin_223">9.maven-surefire-plugin

Maven本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这个插件就是maven-surefire-plugin,也可以称为测试运行器(Test Runner),它能兼容JUnit]3、JUnit 4以及TestNG。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version>
</plugin>
mavenplugin_235">10.versions-maven-plugin

versions-maven-plugin插件可以管理项目版本, 特别是当Maven工程项目中有大量子模块时,可以批量修改pom版本号,插件会把父模块更新到指定版本号,然后更新子模块版本号与父模块相同,可以避免手工大量修改和遗漏的问题。

<!-- generateBackupPoms为true(默认值),pom.xml.versionsBackup备份文件,否则没有备份文件无法回退版本号 -->
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>2.7</version><configuration><generateBackupPoms>true</generateBackupPoms></configuration>
</plugin>

#查看版本号
mvn help:evaluate -Dexpression=project.version -q -DforceStdout
# 修改版本号
mvn -f "pom.xml" versions:set -DoldVersion=* -DnewVersion=1.2.0-SNAPSHOT -DprocessAllModules=true -DallowSnapshots=true -DgenerateBackupPoms=true
# 修改版本号
mvn versions:set -DnewVersion=1.2.0-SNAPSHOT
# 回退版本号
mvn versions:revert
11.pluginManagement

plugins 和 pluginManagement 的区别,和我们前面研究过的 dependencies 和 dependencyManagement 的区别是非常类似的。plugins 下的 plugin 是真实使用的,而 pluginManagement 下的 plugins 下的 plugin 则仅仅是一种声明,子项目中可以对 pluginManagement 下的 plugin 进行信息的选择、继承、覆盖等。

<build><pluginManagement><plugins><!-- maven-surefire-plugin 插件,用于运行单元测试。 --><!-- 注意,需要使用 3.0.X+,因为要支持 Junit 5 版本 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version></plugin><!-- maven-compiler-plugin 插件,解决 Lombok + MapStruct 组合 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><annotationProcessorPaths><path><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.7.18</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.5.5.Final</version></path></annotationProcessorPaths></configuration></plugin></plugins></pluginManagement>
</build>

http://www.ppmy.cn/devtools/39445.html

相关文章

《青少年成长管理2024》105 “结语”

《青少年成长管理2024》105 “结语” 一、理解成长管理二、明确终极目标三、平衡成长要素四、选择学科方向五、寻找成长导师六、坚决执行任务七、从容走进社会八、成就快意人生 《青少年成长管理》&#xff0c;旨在将青少年的成长当作一个复杂而长期的工程来管理&#xff0c;运…

【Mac】LRTimelapse 6(延迟摄影编辑渲染软件) v6.5.4安装汉化教程

软件介绍 LRTimelapse 6 for Mac是一款专业的时间轴摄影和时间堆栈软件&#xff0c;它被广泛用于创建流畅的时间轴视频&#xff0c;适用于风光摄影、延时摄影和其他类型的摄影项目。它与Adobe Lightroom和Adobe Camera Raw完美集成&#xff0c;可以在Lightroom中编辑和处理RAW…

个人如何做股指期货交易?

股票指数期货是一种金融衍生品&#xff0c;它允许投资者对股票指数的未来走势进行投机或对冲。在中国&#xff0c;股指期货的交易主要通过中国金融期货交易所&#xff08;China Financial Futures Exchange&#xff0c;简称CFFEX&#xff09;进行。 以下是国内股指期货交易的通…

K8s源码分析(二)-K8s调度队列介绍

本文首发在个人博客上&#xff0c;欢迎来踩&#xff01; 本次分析参考的K8s版本是 文章目录 调度队列简介调度队列源代码分析队列初始化QueuedPodInfo元素介绍ActiveQ源代码介绍UnschedulableQ源代码介绍**BackoffQ**源代码介绍队列弹出待调度的Pod队列增加新的待调度的Podpod调…

【C++】每日一题 103 二叉树的锯齿形层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 思路&#xff1a; 使用 BFS&#xff08;广度优先搜索&#xff09;算…

数据结构之链表篇

今天我们讲我们数据结构的另一个重要的线性结-----链表&#xff0c; 什么是链表 链表是一种在 物理存储上不连续&#xff0c;但是在逻辑结构上通过指针链接下一个节点的形成一个连续的结构。 他和我们的火车相似&#xff0c;我们的元素是可以类比成车厢&#xff0c;需要将⽕…

党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)

目录 基于SprinBootvue的党务政务服务热线平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …

学习3D几何和特征一致的高斯溅射目标去除

earning 3D Geometry and Feature Consistent Gaussian Splatting for Object Removal 学习3D几何和特征一致的高斯溅射目标去除 Yuxin Wang 王玉欣 HKUST &Qianyi Wu Monash University &Guofeng Zhang Zhejiang University &Dan Xu HKUST 香港科技大学&吴倩…