上午接到一個新的需求,項目的war包打包之后,放在了阿里的OSS上,供其他項目下載更新時使用,但是只有一個項目名,也就是pom的artifactId,預期的結果是要加上一個版本號,能區分出是什么時候打的包。
一、使用Maven自帶的屬性
<properties> <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format> </properties>
<!-- war打包插件, 設定war包名稱帶版本號 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>${project.artifactId}_${maven.build.timestamp}</warName>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>*.*</include>
<include>**/*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
按照以上配置,版本號可以加上,年月日也是正確的,但是時分秒是對不上的,這是時區問題,maven取得是UTC ,如果想使用北京時間GMT+8 則需要插件支持
二、使用插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<timestampFormat>yyyyMMddHHmmss</timestampFormat>
</configuration>
<executions>
<execution>
<goals>
<goal>create-timestamp</goal>
</goals>
</execution>
</executions>
<inherited>false</inherited>
</plugin>
在需要使用版本號的地方直接使用${timestamp}
<!-- war打包插件, 設定war包名稱帶版本號 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>${project.artifactId}_${timestamp}</warName>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>*.*</include>
<include>**/*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
配置完成!打包符合要求。
三、擴展使用-靜態資源文件版本控制
在 二 的基礎上加自定義屬性
<properties>
<project.build.version>${timestamp}</project.build.version>
</properties>
頁面中的引用
*.[js|css|img]?v=${project.build.version}
注意:war包插件必須要先開啟過濾
<filtering>true</filtering>
這樣maven打包的時候,就會將${project.build.version} 替換為時間戳,每次發布版本的時候,也不用去清除瀏覽器的緩存了。
