jcv-maven-plugin、maven-replacer-plugin这两款maven打包插件均可以实现在打出的包自动添加js/css版本号。jcv-maven-plugin是专门为压缩js/css文件和添加js/css版本号设计的一款插件,使用的人很少,使用说明文档较为模糊。maven-replacer-plugin则可以在打包时匹配指定文件中的内容并替换,这里介绍用来自动添加js/css版本号。
jcv-maven-plugin
介绍
项目主页:https://github.com/byzy/jcv-maven-plugin jdk版本等注意事项、参数均在主页中有说明。
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.1.0</version> <configuration> <warSourceExcludes>**/*.html,**/*.js,**/*.css</warSourceExcludes> </configuration> </plugin> <plugin> <groupId>com.iqarr.maven.plugin</groupId> <artifactId>jcv-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>prepare-package</phase> <goals> <goal>process</goal> </goals> </execution> </executions> <configuration> <jsConstantName>test</jsConstantName> <cssConstantName>test</cssConstantName> <suffixs> <param>html</param> </suffixs> <clearPageComment>true</clearPageComment> <compressionCss>true</compressionCss> <compressionJs>true</compressionJs> <globaJsMethod>MD5_METHOD</globaJsMethod> <globaCssMethod>MD5_METHOD</globaCssMethod> <versionLable>v</versionLable> </configuration> </plugin> </plugins> </build>
|
参数说明很模糊,在使用过程中看了参数说明文档仍不清楚有些关键参数的含义,最终打包也没达到预期的效果。不得不去查看插件源代码才搞清楚jsConstantName, cssConstantName这两个配置使用。
注意事项
prepare-package表示在真正打包之前,为准备打包执行任何必要的操作。这牵涉到maven build声明周期相关的配置,这里不做阐述,可查阅此处。
1 2 3 4 5 6 7 8
| <executions> <execution> <phase>prepare-package</phase> <goals> <goal>process</goal> </goals> </execution> </executions>
|
如果在页面引入js/css时把自定义的根目录写到了路径,例如:js文件路径为js/main.js(这路径是相对于工程目录webapp的),根目录为/test,在页面中的路径被写为<script src="/test/js/main.js"></script>
,必须设置jsConstantName, cssConstantName的值为test,**WARN:不要带斜杠/**。
<warSourceExcludes>**/*.html,**/*.js,**/*.css</warSourceExcludes>
需要在maven-war-plugin中排除掉jcv-maven-plugin要处理的文件类型。
globaJsMethod, globaCssMethod推荐使用MD5_METHOD。
效果
maven-replacer-plugin
介绍
项目主页:https://code.google.com/archive/p/maven-replacer-plugin/
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.1.0</version> <configuration> <useCache>true</useCache> </configuration> <executions> <execution> <id>prepare-war</id> <phase>prepare-package</phase> <goals> <goal>exploded</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>timestamp-property</id> <goals> <goal>timestamp-property</goal> </goals> <configuration> <name>build.time</name> <pattern>MdHHmmssSSS</pattern> <timeZone>GMT+8</timeZone> </configuration> </execution> </executions> </plugin> <plugin> <groupId>com.google.code.maven-replacer-plugin</groupId> <artifactId>replacer</artifactId> <version>1.5.3</version> <executions> <execution> <phase>prepare-package</phase> <goals> <goal>replace</goal> </goals> </execution> </executions> <configuration> <basedir>${build.directory}</basedir> <includes> <include>${build.finalName}/views/*.html</include> </includes> <replacements> <replacement> <token>\.css\"</token> <value>.css?v=${build.time}\"</value> </replacement> <replacement> <token>\.css\'</token> <value>.css?v=${build.time}\'</value> </replacement> <replacement> <token>\.js\"</token> <value>.js?v=${build.time}\"</value> </replacement> <replacement> <token>\.js\'</token> <value>.js?v=${build.time}\'</value> </replacement> </replacements> </configuration> </plugin> </plugins> </build>
|
注意事项
<useCache>true</useCache>
,参见Stack Overflow
- 多文件引入使用
<basedir>${build.directory}</basedir>
,参见Stack Overflow
- 通过变量${maven.build.timestamp}获取的时间不是当前时区,故引入插件build-helper-maven-plugin