首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Maven插件运行机制与编纂

2012-07-19 
Maven插件运行机制与编写MAVEN运行基本过程Maven运行周期每次使用maven的命令进行一些操作时,都是一个运行

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")指定的路径是不相同的,
      </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包中这些文件的名称是乱码!
      这一点,请大家在处理项目时一定要注意!

热点排行