要使新版本的客户端(浏览器)缓存无效,我必须在我的资产网址中添加一个随机字符串参数。
我使用Spring MVC开发Web应用程序并使用Maven构建项目。
我的问题是如何用Maven生成这样的字符串?当我有可能在任何文件,JSP,这样的标签中放置变量时,这是有道理的:
<link rel="stylesheet" type="text/css" href="/css/master.css?cache={random}" media="all"/>
在构建时用随机字符串替换变量。
答案 0 :(得分:2)
您可以只使用版本号,而不是在Maven构建期间生成随机字符串。这对于每个版本都是不同的,并且适合您的用例。
为此,您可以使用maven-war-plugin
的{{3}}功能。在JSP中,声明占位符${project.version}
:
<link rel="stylesheet" type="text/css" href="/css/master.css?cache=${project.version}" media="all"/>
然后,在Maven构建期间,您可以过滤此文件,Maven将自动将此占位符替换为当前版本。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
如果您真的想要生成随机字符串,可以使用filtering执行以下任务(取自maven-antrun-plugin
):
<scriptdef name="generateguid" language="javascript">
<attribute name="property" />
<![CDATA[
importClass( java.util.UUID );
project.setProperty( attributes.get( "property" ), UUID.randomUUID() );
]]>
</scriptdef>
<generateguid property="guid1" />
<echo message="${guid1}" />
属性guid1
将保留随机字符串,请务必在插件配置中将this answer设置为true
。然后,您可以使用${guid1}
占位符代替${project.version}
答案 1 :(得分:0)
答案 2 :(得分:-1)
根据Tunaki的建议,您可以使用版本号而不是随机数。 在这两种情况下,Maven Resources Plugin及其过滤选项都可以为您提供帮助。
请参阅:http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
编辑:您可以在Maven中获得具有${project.version}
属性的版本号。