前言
性能一直是项目中比较重要的一点,尤其门户网站,对页面的响应要求是很高的,从性能角度上来讲,对于Web端的优化其中重要的一点无疑是JS、CSS文件压缩,图片的融合,尽量减小文件的大小,必免占加载时占用过多的带宽。所以能在项目编译打包时进行压缩是再好不过了,所以本文将研究如何通过开发Maven Plugin来实现压缩打包。
本文将分为三部分讲解:
- Maven插件开发
- YUICompressor压缩JS、CSS
- Maven压缩插件开发
注:如果您观看的是pdf等其他文档,导致无法下载附件,请前往本人的有道笔记下载,地址如下:
https://note.youdao.com/share/?id=189242958c96aa18a8f8348e7ffc0a0c#/
Maven 插件
Maven 作为一个优秀的项目管理工具,其插件机制为其功能扩展提供了非常大的便捷性。虽然说大多数情况下,我们可能不太会自己去编写 Maven 插件,但不排除在某些特殊的情况下,我们需要去完成一个自己的插件,来协助我们处理某些比较通用的事情。比如压缩代码。
1、创建插件项目
Artifact Id 以xxx-maven-plugin命名,如:compress-maven-plugin,下面Version的内容无所谓。
创建完毕之后的结构是这样:
插件项目中pom.xml关键部分配置如下:
maven-plugin-api是插件开发API,maven-plugin-annotations是使用Maven的注解时需要的包,然后注意打包方式为:maven-plugin
注意:初次创建maven插件项目时可能报execution not covered by lifecycle这种错误,具体解决方法详见文末。
具体细节详见附件:
2.创建Mojo类
创建项目时会自动创建MyMojo,继承AbstractMojo类。重写里面的execute方法。如果没有自行创建即可。本文将插件名称改为compress。
3.install到maven仓库
插件开发完成后,执行maven clean install,将插件安装到本地仓库
4.在其他项目中引入插件
在其他项目的pom.xml文件中增加如下plugin配置,注意图中的goal配置,此处的名称是代码中注解@Mojo的名称,要保持一致。然后groupId,artifactId和version与插件的保持一致即可。
目标项目中pom.xml文件如下:
5.运行Maven插件
对目标项目执行maven clean install,查看插件运行结果。
可以看到,在执行maven插件后,target目录下多了一个touch.txt文件,至此maven插件的开发全部完成。下面将讲解插件开发过程中的一些细节和常见问题。
插件项目源码如下:
==================================================================
******************************
maven插件开发细节
************************************
==================================================================
1.@Mojo注解
@Mojo是必须要的,这是定义插件对象的启动方法,由于该类只有一个方法,所以启动方法和启动类是一致的。在Maven 3之前是使用注释注解:@goal xxx这种方式。现在已经不使用这种方式了。
2.Maven插件接收参数
我们平时在使用Maven的各种插件的时候往往都能在配置文件中传入属性的值,比如tomcat-maven-plugin插件我们可以随意指定tomcat的端口号。这里插件的处理方式是在Car类中定义一些属性,比如下面这样。然后我们重新将插件install到本地仓库。再次运行。
在插件的配置中增加Configuration标签,加上子标签,如下:
运行结果如下:
3.Maven插件部署到Maven私服
上面开发的Maven插件仅部署到本地仓库,只能被本机的项目调用,为了让公司的团队成员也能调用,需要将插件部署到公司的Maven私服上,则需要在插件项目的pom.xml中加上如下配置:
然后运行mvn clean install deploy。
注意Maven的setting.xml里需要配置私服的用户名和密码,因为这是使用Maven私服的基础,所以这里就不展开叙述了。
==================================================================
******************************
maven插件开发报错
************************************
==================================================================
1.Plugin execution not covered by lifecycle configuration
创建Maven plugin项目时,pom文件可能会报出如下错误:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-plugin-plugin:3.2:generate (execution: goal, phase )。对于这个错误我们可以在弹出的Quick Fix中选择Permanently mark goal generate in pom.xml as ignored in Eclipse build即可解决。
还有一种方法是选择Quick Fix中的另一种方法,在下下中加入:
其中:groupId,artifactId,versionRange,goals是需要自己去改变的,因为不有可能其他的插件也会报这个错误,按照这几个标签内容改就行了,我这里是maven-plugin-plugin这个插件在报错。
2.Could not find goal 'wenwo-compress' in plugin
将插件引入目标项目运行时,可能会报Could not find goal 'wenwo-compress' in plugin com.wenwo.web:compress-maven-plugin:0.0.1-SNAPSHOT among available goals compress。这是因为pom.xml中goal的配置与MyMoJo中的@Mojo注解的name值那么不一致导致的。将它们统一即可。