用maven-replacer插件选择正则表达式替换

在前端html或者jsp中会引入一些诸如css、js等静态资源,但是有时候浏览器会有缓存,更新js后,返现一些用户看到的仍然是旧的,说明没有生效。这样的话一般是在引入静态资源的时候添加时间戳,但是手动添加的话,特别容易忘记,这样就会很容易出现生产事故。

所幸,maven有一个很牛逼的插件【maven-replacer】,可以在打包的时候自动将js或者css后面添加时间戳,其实就是利用maven package后全局替换的原理。而且匹配方式支持正则,真的是太好用了。

<properties>

            <!-- maven.build.timestamp 默认时间戳格式 -->
            <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>

    </properties> 
<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>
                        <!-- 自动识别到项目target文件夹 -->
                        <basedir>${build.directory}</basedir>
                        <!-- 替换的文件所在目录规则 -->
                        <includes>
                            <include>${build.finalName}/WEB-INF/jsp/*.jsp</include>
                            <include>${build.finalName}/WEB-INF/jsp/**/*.jsp</include>
                            <include>${build.finalName}/WEB-INF/jsp/*.html</include>
                            <include>${build.finalName}/WEB-INF/jsp/**/*.html</include>
                        </includes>
                        <replacements>
                            <!-- 更改规则,在css/js文件末尾追加?time=时间戳,反斜杠表示字符转义 -->
                            <replacement>
                                <token>\.css\"</token>
                                <value>.css?time=${maven.build.timestamp}\"</value>
                            </replacement>
                            <replacement>
                                <token>\.css\'</token>
                                <value>.css?time=${maven.build.timestamp}\'</value>
                            </replacement>
                            <replacement>
                                <token>\.js\"</token>
                                <value>.js?time=${maven.build.timestamp}\"</value>
                            </replacement>
                            <replacement>
                                <token>\.js\'</token>
                                <value>.js?time=${maven.build.timestamp}\'</value>
                            </replacement>
                        </replacements>
                    </configuration>
                </plugin>

再举一个支持正则的例子:

 

我想使用maven-replacer-plugin在我的index.html文件中重命名我的javascript import语句。 不过,我只想在路径以app开头的情况下执行此操作 index.html片段

...
<!-- rename this one to app/something12345.js -->
<script src="app/something.js"></script>
<!-- leave this one as it is -->
<script src="vendor/angular.js"></script>
...

在我的pom.xml中,我已经为maven-replacer-plugin配置了这个配置

 <plugin>
     <groupId>com.google.code.maven-replacer-plugin</groupId>
     <artifactId>replacer</artifactId>
     <version>1.5.2</version>
     <executions>
         <execution>
             <phase>prepare-package</phase>
             <goals>
                 <goal>replace</goal>
             </goals>
         </execution>
     </executions>
     <configuration>
         <file>target/${project.build.finalName}/index.html</file>
             <replacements>
                 <replacement>
                     <token>(\.js")</token>
                     <value>12345.js"</value>
                 </replacement>
             </replacements>
     </configuration>
 </plugin>

目前这显然将取代所有.js匹配。 我可以在<token>部分添加一些魔法咒语来达到这个目的吗?

我设法使用以下方法执行此操作

<replacement>
    <token>((app/)(.)*)(\.js")</token>
    <value>$112345.js</value>
</replacement>

虽然在我的实际应用程序中,我用${buildNumber}变量替换了12345,所以语法是

<replacement>
    <token>((app/)(.)*)(\.js")</token>
    <value>$1${buildNumber}.js</value>
</replacement>

我希望这可能使解决方案更容易理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值