我有一个jsp包含一个看起来像
的css链接<link type="text/css" href="/css/login-min.css" rel="stylesheet" />
为了防止浏览器缓存css文件,我们将login-min.css
替换为css的名称和时间戳或版本号
login-min.css?t=432432423423...
在蚂蚁中,我会做类似
的事情<tstamp>
<format property="current.time" pattern="MMddyyyyhhmmssaa" offset="-5" unit="hour" />
</tstamp>
<replace dir="${deploy.path}/${name}/WEB-INF/jsp" value="login-min.css?t=${current.time}">
<include name="includes/login_css_include.jsp" />
<replacetoken>login-min.css</replacetoken>
</replace>
对于gradle我已经将jsp页面更新为
<link type="text/css" href="/css/@loginCSS@" rel="stylesheet" />
并在build.gradle中进行
import org.apache.tools.ant.filters.ReplaceTokens
war {
webInf {
from ("${webAppDir}/WEB-INF/jsp") {
include: "/includes/login_css_include.jsp"
filter(ReplaceTokens, tokens: [loginCSS: 'login-min.css?v=1'])
}
}
}
但这不起作用。
这个有效,但它改变了源......我只想修改战争中的文件。
import org.apache.tools.ant.filters.ReplaceTokens
war {
webInf {
from ("${webAppDir}/WEB-INF/jsp/includes/login_css_include.jsp") {
it.eachFile {
ant.replace(file: it.file, token: "@loginCSS@", value: "login-min.css?v=1")
}
}
}
}
我是一个全新的人,我完全错误地解决了这个问题?以前有人需要这样做吗?使用gradle 1.0-milestone-1。
由于
答案 0 :(得分:10)
好的,这似乎有效:
jsp页面:
<link type="text/css" href="/css/@loginCSS@" rel="stylesheet" />
<强>的build.gradle 强>:
war {
filter(ReplaceTokens, tokens: ['loginCSS': 'login-min.css'])
}
答案 1 :(得分:5)
尝试的另一种变体(在我的情况下,它可以克服这个错误http://issues.gradle.org/browse/GRADLE-1566#)
war {
eachFile {
if (it.name == 'yourFile.jsp') {
it.filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [...])
}
}
}
答案 2 :(得分:4)
不确定这是否符合groovy / gradle风格,这就是我能够实现这一目标的方式。
jsp文件现在看起来像这样:
<link type="text/css" href="/css/${loginCSS}" rel="stylesheet" />
和gradle.build像这样:
war {
eachFile {
if (it.name == 'login_css_include.jsp') {
it.expand(loginCSS: "login-min.css?v=1")
}
}
}
使用时间戳如下所示:
war {
eachFile {
if (it.name == 'login_css_include.jsp') {
def now = new Date()
it.expand(loginCSS: "login-min.css?t=${now.getTime()}")
}
}
}
编辑 - 正如Axel在评论中指出的那样,这个解决方案在使用JSP EL表达式运行二进制文件或文件时会遇到麻烦。
答案 3 :(得分:0)
我们做了类似(但不完全相同)的事情,只是创建java.io.File
并操纵它们,然后使用from{}
或webInf{}
将它们包含到.war中fileTree
。
你可以看一下这样的东西,但是因为这似乎很好地被蚂蚁处理了,你有没有直接从gradle like this使用ant?
答案 4 :(得分:0)
您还可以设置编码(因为默认情况下它会更改文件编码):
war {
filteringCharset = 'UTF-8'
filesMatching( '**/*.jsp' ) {
filter ReplaceTokens, tokens: [
'versionDate': "${new Date().format('yyyyMMdd')}".toString(),
'copyright' : "${new Date().format('yyyy')}".toString()
]
}
}