由Maven生成url nocache参数字符串

时间:2015-10-08 11:33:01

标签: java spring maven

要使新版本的客户端(浏览器)缓存无效,我必须在我的资产网址中添加一个随机字符串参数。

我使用Spring MVC开发Web应用程序并使用Maven构建项目。

我的问题是如何用Maven生成这样的字符串?当我有可能在任何文件,JSP,这样的标签中放置变量时,这是有道理的:

<link rel="stylesheet" type="text/css" href="/css/master.css?cache={random}" media="all"/>

在构建时用随机字符串替换变量。

3 个答案:

答案 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)

您可以使用Maven资源插件的filtering功能。

Here是如何为Web资源指定资源插件配置的。 WAR插件在内部使用资源插件,因此配置完全相同,您可以参考资源插件的文档。

答案 2 :(得分:-1)

根据Tunaki的建议,您可以使用版本号而不是随机数。 在这两种情况下,Maven Resources Plugin及其过滤选项都可以为您提供帮助。

请参阅:http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

编辑:您可以在Maven中获得具有${project.version}属性的版本号。