java - 通过Maven生成url nocache参数字符串

标签 java spring maven

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

我使用 Spring MVC 开发一个 Web 应用程序,并使用 Maven 来构建该项目。

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

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

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

最佳答案

您可以只使用版本号,而不是在 Maven 构建期间生成随机字符串。这对于每个版本都是不同的,并且适合您的用例。

为此,您可以使用 filtering maven-war-plugin 的功能。在 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>
<小时/>

如果你确实想生成一个随机字符串,你可以使用 maven-antrun-plugin执行以下任务(取自 this answer ):

<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 将保存您的随机字符串,请务必设置 exportAntProperties在插件配置中设置为 true。然后,您可以使用 ${guid1} 占位符而不是 ${project.version}

应用与上面相同的逻辑(资源过滤)

关于java - 通过Maven生成url nocache参数字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33014552/

相关文章:

maven - 动态加载 `maven` 的本地 `buildscript` 存储库路径

java - 如何为一组方法编写单元测试,其中每个方法都依赖于其他方法?

java - 将 double 转换为 int

java - 如何使用java执行shell脚本

java - 使用 JPA 实体管理器时,我可能会从 Hibernate Session 中错过什么,反之亦然?

maven - 如果 Maven Central 永久宕机怎么办?

eclipse - M2E 在导入现有 maven 项目时未将 Groovy 源添加到 .classpath

java - 为什么可选的不用于实例变量?

java - 如何配置 Spring Data 以在没有 XML 的情况下将 Postgres 与 Hibernate 一起使用?

spring - 如何将 Spring Boot 应用程序部署到 Tomcat 上的不同 URL?