Maven插件运行机制与编写

MAVEN运行基本过程

Maven运行周期

每次使用maven的命令进行一些操作时,都是一个运行周期!详细的运行周期信息参考其官网描述: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference.
这是给出一个默认的一个生命周期(每个命令,其周期不同,具体参考上面网址上的内容):
validate、compile、test、package、integration、verify、install、deploy

Maven插件运行方式

如上所述,Maven在运行时会按照一定的生命周期进行运行,每个周期叫一个phase!在每个phase时,maven会看环境(即pom.xml)中配置了哪些插件,然后会运行它!

Maven插件的一些基本设置

Packaging

作为一个maven插件项目,它的项目组织方式packaging应该为maven-plugin。这一点很重要,选择这一选项,在项目打包发布时它将为你的项目自动生成一些maven必要的文件!

Goal

这个参数指定运行哪个目标逻辑。因为在一个maven插件中,可以设定若干个执行目标,如我们经常使用的maven-war-plugin,它的goal也有好几个,如war、help、inplace等等。
对应的就是对应插件的命令。如果有多个的话,有默认启动的配置方式。

Phase

这个参数就是指定该插件在哪个阶段启动!可以在使用时在pom.xml中重新定义!

plugin.xml

每个maven插件都有这样一个配置插件参数与环境的配置文件!比如,上面说的默认情况下指定运行哪个goal、参数的默认值等等!
详细的maven插件开发指南可以参考:http://maven.apache.org/plugin-developers/index.html。

键值内容替换

背景及需求

作为一个项目,它分为开发环境与正式发布环境!这两个环境的一些系统参数配置是不一样的,需要在打包发布时区分对待。而我们的所有系统参数是配置在properties文件中,使用提键值对方式存储。要实现在正式环境发布时替换其中的一些参数值,就需要在maven正式环境上打包时需要实现替换操作!而这个过程肯定要交给插件在处理!

插件库是否有这样的插件

基于上述的实际情况的需求,于是在网上找了一下有没有这样的插件,结果只有一个文本替换的插件,而不是键值对替换的插件,而这个插件对于我们来说,使用的风险较大!因此,我决定自己写一个插件来实现该功能!

设定目标与逻辑

目标:实现键值对的替换!同时支持在pom.xml中使用时指定Map或指定键值对的文件(可以是多个文件)来实现结果的替换。
逻辑:检查结果键值对信息(Map或者是文件)是否存在,然后分别将结果键值对读取并合并到一个临时Map中,同时将需要替换的键值对文件中的信息读取到内存中,然后将结果中的内容替换到目标Map中!然后将目标Map重新生成properties文件!
当然,在测试环境打包时,可以指定跳替换,这样就保持了我们开发属性,只有在正式发布时才指定为替换操作!

css/js引用织入

背景及需求

这个需求是我们设计人员在设计页面时遇到的烦恼。当设计人员在设计一个页面的样式时,他会发现很多的页面的样式引用的css/js都差不多,而且有的css还具有一定的关联性(即引用A的时候必须要引用B),但每次都要写多次引用,有时候可能还会写丢掉某个,这样每次还要关心该页面引用哪个样式等。于是他想问:有没有一种import方式,就写代码一样,我在写一个css的时候,只要指定它依赖的css就可以了,这样不就减少了我去关心总共要引入哪些css的精力,而让我更多滴去关心业务的设计?

插件库是的现有插件

在这样的一种诉求下,我们本着不重复造轮子的理念,去网上寻求方法,结果没有一个简单易用的插件!

设定目标与逻辑

在求人不成,只能求已的情况下,我们采用了一种自定义的织入方式。其使用方式为:只要在css中定义了import关键字,程序就会把引入的css内容织入到该css中,另外,该插件还支持嵌套方式引用,即import的css中还可以支持import!
不过在该插件的使用有,有几个注意的地方:

  1. @import引用的文件要写完整,即,从指定的cssDirPath路径下开始写起,不支持"../"这样的相对方式,如@import url("css/oss.css")
  2. 注意url中路径前面有“/”与没有“/”是不同的路径,如:@import url("/css/oss.css")与@import url("css/oss.css")指定的路径是不相同的,
    • @import url("/css/oss.css")指:引入webapp文件夹下的css/oss.css;
    • @import url("css/oss.css")指 :引入当前文件所在文件夹下的css/oss.css;
      即,有“/”表示从网站根目录开始查找。
  3. 如果有两个或两个以上的@import引用,则每个@import各占一行。不能写在同一行!
  4. @import格式一定要遵守@import url("oss文件"),其中,@import与url之间至少要有一个空格。
  5. 如果有其它对css文件内容进行处理的,则将该插件放在这些插件之前。
  6. 不要重复引用。如下面这样,只会替换第一个:
    • @import url("css/oss.css")
    • @import url("css/oss.css")

文件复制

背景及需求

其实这个插件的出现是无奈的,是css织入插件的副产品!本来想合并到css织入的插件中,但考虑到css织入的插件已经可用且没有bug,如果再将该插件集成进去,那后果就可能难以预测,所以自己再写一个独立的插件。
为什么会是副产品呢?当我们的css织入插件在将css内容织入好之后放到了target打包下的目录中后,maven的war包插件会有一个资源复制的过程,会将我们已经织入好的css文件又重新替换成了原来的import方式的内容!而war包插件中又无法配置指定几个文件不替换的功能,于是便有了这个插件!

设定目标与逻辑

目标:实现项目中指定文件及文件夹的复制到target目录中,便于最终打包!
逻辑:可以指定对哪些文件进行复制,以及指定如果有的文件已经存在时是否强制替换!在pom.xml中使用时,将war包的插件的文件复制功能去除,启用该插件功能以防止已经织入好的文件被替换!

实用Maven设置

插件的合并

正如上面对插件的goal参数的说明,其实这三个插件是可以合并到一个插件项目中,有三个Mojo(即目标命令)。但因为这三个插件是在项目的研发过程中一个个出现的,而且考虑到对前一个插件不影响的前提下,一直没有将其合并到一个项目中!

Profile的使用

正如我们键值替换插件的产生背景所说的:在开发库与正式库之间的一些环境配置是不一样的!也就是说,在测试打包时运行的命令与正式环境打包时运行的命令是不一样的!这种不同环境运行不同的命令的情况,使用的就是Maven的profile定义。该定义可以在settings.xml或pom.xml中指定若干个id不同的profile,分别指定不同的一些环境变量!如:采购项目的profile配置为:

	<profiles>
		<profile>
			<id>prod</id>
			<properties>
				<zip.skip>false</zip.skip>
				<replace.skip>false</replace.skip>
				<package.excludes>WEB-INF/lib/not_exists.file</package.excludes>
			</properties>
		</profile>
		<profile>
			<id>dev</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<zip.skip>true</zip.skip>
				<replace.skip>true</replace.skip>
				<package.excludes>WEB-INF/lib/*.jar</package.excludes>
			</properties>
		</profile>
	</profiles>

使用时使用命令如:mvn package –P prod。上面的配置表示,如果不指定P参数,则默认为dev

内存参数的设置

在一些大型的项目中,项目的模块较多或项目的内容较大时,在运行Maven的一些打包等命令时会出现内存溢出的问题,这时候,解决的办法只是需要我们改变一下maven的内存参数设置即可!其改变步骤参考:http://192.168.21.248:83/confluence_dev/pages/viewpage.action?pageId=21102871。

上传第三方jar包与源码

有时候,我们需要用到一些第三方jar包,而很不幸滴是,这些jar包组织方式并不是Maven方式,你无法使用Maven的dependency来引用它,这时我们需要做的就是将其上传到我们的maven库中即可!但如果这个jar包既有jar包又有源码包时该如何上传呢?好吧,其实解决办法很简单,将两个jar包同时上传,如果名字有冲突请取个别名即可!相应文档参数: http://192.168.21.248:83/confluence_dev/pages/viewpage.action?pageId=33619970。

文件名为中文打war包

最后要说的是war包插件!这个插件不止一次为我找来了不必要的麻烦!在war包进行打war包的过程中,它使用的是环境默认编码,而且它不支持配置使用指定的编码(那段代码那边有一个令人无限期待下去的TODO标记)!!于是,如果你的项目中有文件的名称为非ascii码的字符时……你就会很悲惨滴发现在war包中这些文件的名称是乱码!
这一点,请大家在处理项目时一定要注意!

Maven 插件列表详解 Maven 是一个强大的项目管理和构建工具,广泛应用于 Java 项目中。作为一款优秀的构建管理工具,Maven 不仅提供了标准化的项目结构和依赖管理,还通过其丰富的插件系统,极大地扩展了其功能和灵活性。无论是代码编译、测试、打包,还是部署、报告生成,Maven 插件都扮演着不可或缺的角色。 本文将深入探讨 Maven 的插件体系,详细介绍各类插件的用途、主要目标和适用的生命周期阶段。内容涵盖了 Maven 官方插件、被淘汰的插件、社区驱动的 MojoHaus 插件、国内外企业开发的非官方插件以及如何自定 阅读详情

相关推荐

Maven插件管理的基本原理

在Java生态系统中,构建工具的发展史堪称一部技术进化论的缩影。从最初的手动编译到Ant的脚本化构建,再到Maven的约定优于配置(Convention Over Configuration)革命,每一次迭代都带来了开发效率的质的飞跃。Maven作为Apache基金会的重要项目,自2004年发布以来,通过其独特的项目对象模型(POM)和依赖管理系统,彻底改变了Java项目的构建方式。 在持续交付和DevOps盛行的今天,一个高效可靠的构建系统已成为企业级开发的基石。Maven插件体系作为其核心机制

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1510

Maven实战与原理分析(五):Maven插件运行原理 + 常见插件汇总

简介: 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。本文将为大家介绍一些常用的 Maven 插件。 镜像下载、域名解析、时间同步请点击阿里巴巴开源镜像站 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件..

Java技术江湖 1984

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

pom文件中maven-assembly-plugin

1、maven plugin介绍 使用Maven对Web项目进行打包,默认为war包;但有些时候,总是希望打成zip包(亦或其他压缩包),这时就用到了maven-assembly-plugin插件 官方网址: http://maven.apache.org/plugins/maven-assembly-plugin/ 1、作用:要想将写的程序和它本身所依赖的jar包一起build到一个包里,是maven中针对打包任务而提供的标准插件。 2、其他作用: 1)提供一个把工程依赖元素、模块、网站文档等其他文件存

白鸽 1443

一文详解心电图(ECG)监测原理

介绍心电图的监测原理,从心电信号产生、获取到心电图的基本组成

m0_50146396的博客 3290

微信小程序地图开发避坑指南:腾讯地图API从配置到实战(附完整代码)

本文详细解析微信小程序中腾讯地图API的开发实践,从基础配置到高级功能实现,涵盖地图显示、地点搜索、路线规划等核心功能,并提供完整代码示例和常见问题解决方案,帮助开发者高效避坑。特别针对JavaScript SDK和map组件的使用进行了深度优化指导。

weixin_33725722的博客 486

Maven 教程(13)— Maven插件解析运行机制

这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其所以然。 1、插件保存在哪里? 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的。在用到插件的时候会先从本地仓库查找插件,如果本地仓库没有则从远程仓库查找插件并下载到本地仓库。 与普通的依赖构件不同的是,Maven会区别对待普通依赖的远程仓库与插件的远程仓库。前面提到的配置远程仓库只会对普通的依赖有...

挖坑埋你 2607

《软件工程——实践者的研究方法》重难点复习笔记(第八章——理解需求)

8项需求工程任务 inception 开始 8.1.1 identify stakeholders 定义:从软件开发中收益 例如:市场人员、销售经理、顾客、顾问、维护团队等(P139) 8.1.2 这个阶段的问题是context-free的。有三套(P140) 8.1.3 提到NFR(nonfunctional requirement)和QFD(quality

whooiif的博客 1815

(十三)Maven插件解析运行机制

这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其所以然。 1.插件保存在哪里? 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的。在用到插件的时候会先从本地仓库查找插件,如果本地仓库没有则从远程仓库查找插件并下载到本地仓库。 与普通的依赖构件不同的是,Maven会区别对待普通依赖的远程仓库与插件的远程仓库。前面提到的配置远程仓库只会对普通的依赖...

weixin_33748818的博客 299

Cherry Studio部署MCP服务报错全记录:从零解决‘Connection closed‘问题

本文详细记录了在Cherry Studio中部署MCP服务时遇到‘Connection closed’报错的完整排查与解决过程。文章从环境依赖(UV、Bun)的安装验证、绝对路径配置、网络镜像源设置,到服务端手动调试与Cherry Studio配置检查,提供了一套系统性的解决方案,帮助开发者彻底解决此类连接问题。

g9h0i1的博客 765

(超详细)Scala环境搭建(scala-2.12.15、IDEA2021.1.3)

Scala环境搭建(scala-2.12.15、IDEA2021.1.3) JunLeon——go big or go home 目录 Scala环境搭建(scala-2.12.15、IDEA2021.1.3) 一、Scala概述 1、什么是Scala? 2、Scala发展史 3、Scala与Java的关系 二、Scala环境搭建 1、环境准备 2、Scala安装与配置环境变量 3、验证Scala 三、编写第一个Scala程序 1、使用IDEA创建maven工程 2、.

JunLeon的博客 3万+

Maven插件的运行机制

确切的说,我们日常提及的Maven实际上只是Maven插件集合的核心框架。而插件才是执行实际操作的东西,插件可以用于:创建jar文件、创建war文件、编译代码、单元测试代码、创建项目文档等等

战斧的博客 1077

硬件工程师笔记——运算放大电路Multisim电路仿真实验汇总

本文系统介绍了运算放大电路的基础知识及其应用。主要内容包括:1)运算放大器的基本结构、理想特性及分析方法(虚短、虚断、叠加定理);2)比例运算电路(同向、反向、差分)的工作原理与仿真分析;3)求和运算、加减运算电路的实现方法;4)积分、微分、指数和对数运算电路的基本原理;5)过零电压比较器的功能特点。通过理论分析和仿真实验,详细阐述了各类运算放大电路的输入输出特性、相位关系和增益计算,为硬件工程师提供了实用的电路设计参考。

XU157303764的博客 2486

Maven - 插件深度开发 Mojo类编写与插件生命周期

本文介绍了Maven插件开发的核心内容,重点讲解了Mojo类的编写方法和插件生命周期管理。主要内容包括: Maven插件概述:介绍了插件的基本概念、组成要素和开发必要性 Mojo类详解:详细解析了Mojo类的基础结构、关键注解和参数配置方法 插件生命周期:讲解了如何将Mojo绑定到Maven构建生命周期的不同阶段 文章提供了丰富的代码示例,展示了如何定义Mojo类、配置参数以及处理各种数据类型。通过开发自定义插件,开发者可以扩展Maven功能,实现特定的构建需求,提高开发效率。 关键词:Maven插件、Mo

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

mongodb在游戏开发领域的优势

目前游戏服务器使用mysql作为数据库的较多,然而,使用mongodb来作为存储层,在某些方面比mysql更为方便和适合。

littleschemer的博客 1700

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Maven教程】(十五):编写 Maven 插件—— 编写 Maven 插件的一般步骤及案例、Mojo 标注与参数、错误处理和日志 ~

Maven 社区提供了成百上千的插件供用户使用,这些插件能够满足绝大部分用户的需求。然而,在极少数的情况下,用户还是需要编写 Maven 插件来满足自己非常特殊的需求。编写 Maven 插件的一般步骤包括创建一个插件项目、编写Mojo 、为 Mojo提供配置点、实现 Mojo 行为、处理错误、记录日志和测试插件等。本章实现了一个简单的代码行统计插件, 并逐步展示了上述步骤。用户在编写自己插件的时候,还可以参考本章描述的各种 Mojo标注 、Mojo 参数、异常类型和日志接口。

Technology changes the world of life 2963

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何编写一个Maven插件

本文基于eclipse ee.建立一个maven插件工程:    主要就是让项目能依赖maven-plugin-api:    编写一个Mojo类:/** * 用于输出消息的Mojo * @goal hello */ public class HelloMojo extends AbstractMojo { /** * @parameter expression="${echo.me...

GoodIdea 2486

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Maven 插件编写 之 初识 Mojo

Maven 作为一个优秀的项目管理工具,其插件机制为其功能扩展提供了非常大的便捷性。虽然说大多数情况下,我们可能不太会自己去编写 Maven 插件,但不排除在某些特殊的情况下,我们需要去完成一个自己的插件,来协助我们处理某些比较通用的事情。正好,最近有一些需求可能需要来对一个 Drools 的 Maven 插件进行扩展,所以学习一下 Maven 的插件编写。Maven 插件的命名规范一般来说,我们

Q码记 1万+

maven插件编写与调试

maven常见的插件有compile插件,deploy插件,jetty插件等等,这些插件有的是主动去执行,有的是在maven特定的生命周期中执行。

唯一的专栏 3708

【Maven】Maven Plugin示例:自己动手编写Maven插件

需求: 在Maven编译项目的时候,统计代码量,即项目中的文件数目、代码行数,包括java文件和配置文件两种;其中配置文件(sql、xml、properties)代码行数/4 处理。 创建项目: 首先确保已安装m2eclipse插件:http://eclipse.org/m2e/ eclipse - new - Maven Project,选择archetype = maven-a

Alpha's 学习笔记 3万+

编写 Maven 插件,以及 Maven 插件默认绑定 phase 的原理

0. 前言 因为之前好奇 maven 插件可以不设置绑定 phase 周期,执行时会自动绑定一个默认的 phase 周期。而这个周期具体是哪个 phase 只有去插件的官网上才能查到(文章末尾会讲在项目中查看默认绑定的方法)。 所以我萌生出一个想法,自己写一个插件! 1. 编写插件 和正常编写一个maven项目类似。 总共分两个关键步骤: 打包方式设置为<packaging>maven-plugin</packaging>,加入两个插件所需依赖。 <groupId&

howeres的博客 2121

maven插件编写_编写Maven插件的提示

maven插件编写 最近,我花了很多时间为Maven编写插件或在其中工作。 它们简单,有趣且有趣。 我以为我会分享一些技巧,使编写它们时的生活更轻松。 提示1:将任务与Mojo分开 最初,您将把mojo的所有代码放入mojo的类(即,扩展AbstractMojo的类)中。 而是考虑将任务分离出来,并为mojo提供最少的填充代码。 这将: 使单元测试更加容易。 意味着您可以轻松地...

最佳 Java 编程 209

2分钟学会编写maven插件

Maven 是 Java 项目中常用的构建工具,可以自动化构建、测试、打包和发布 Java 应用程序。Maven 插件是 Maven 的一项重要功能,它可以在 Maven 构建过程中扩展 Maven 的功能,实现自定义的构建逻辑。Maven 插件可以提供很多不同的功能,例如:生成代码、打包文件、部署应用程序等。插件通常是在 Maven 构建生命周期中的某个阶段执行,例如:编译、测试、打包、安装和部署。Maven 的生命周期和插件机制让开发人员可以很方便地实现自定义构建逻辑,从而加快项目的开发和部署。

聪明马的博客 997

maven插件编写之mojo

一、Mojo Mojo: Maven plain Old Java Object,实际上是一个Maven的目标,插件包含任意数量的目标(Mojos)。Mojos可以定义为带注释的java类或Beanshell脚本。Mojo指定有关目标的元数据:目标名称,它适合生命周期的哪个阶段,以及它期望的参数 ...

Luck_ZZ的博客 2422

Maven插件的编写

Eclipse上如果想要开发Maven的插件,首先保证该eclipse已经安装了m2e插件。IDEA则自带了Maven的插件,可以直接进行开发。Eclipse 新建一个Maven工程 2 选择由archetype生成3 选择archetype在filter选项中输入plugin进行过滤,选择筛选出来的第一个archetype:maven-archetype-plugin。4 填写坐标信息5

lyjshen的专栏 4886
上一篇: 基于JQuery的一个图片预览功能
下一篇: 敏感词过滤算法实现
hellohank
博客等级 码龄19年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值