对于熟悉蚂蚁的人来说,这个问题很可能是微不足道的,到目前为止我只使用了基础知识.
我知道如何重命名文件,例如我已经使用过:
<copy todir="build/css/">
<fileset dir="css/">
<include name="*.css"/>
</fileset>
<globmapper from="*.css" to="*-min.css"/>
</copy>
Run Code Online (Sandbox Code Playgroud)
我知道如何计算MD5:
<checksum file="foo.bar" property="foobarMD5"/>
Run Code Online (Sandbox Code Playgroud)
我不知道如何将第二个包含到第一个,重命名所有这些文件以包含他们的MD5 - 目的是作为webbrowser缓存破坏者.另一个缓存破坏选项,附加"?[某事]"并不像在某些Google网站管理员页面上所解释的那样好,将MD5作为名称的一部分更好.
您可以执行此操作,而无需包含ant contrib. 我必须在工作中实现此功能,并且出于安全原因不允许引入该扩展。我找到的解决方案是这样的:
<target name="appendMD5">
<copy todir="teststack">
<fileset dir="css/" includes="**/*.css"/>
<scriptmapper language="javascript"><![CDATA[
var File = Java.type('java.io.File');
var Files = Java.type('java.nio.file.Files');
var MessageDigest = Java.type('java.security.MessageDigest');
var DatatypeConverter = Java.type('javax.xml.bind.DatatypeConverter');
var buildDir = MyProject.getProperty('builddir');
var md5Digest = MessageDigest.getInstance('MD5');
var file = new File(buildDir, source);
var fileContents = FIles.readAllBytes(file.toPath());
var hash = DatatypeConverter.printHexBinary(md5Digest.digest(fileContents));
var baseName = source.substring(0, source.lastIndexOf('.'));
var extension = source.substring(source.lastIndexOf('.'));
self.addMappedName(baseName + '-' + hash + extension);
]]></scriptmapper>
</copy>
</target>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,我是为 Java 8 编写的,但经过一些小的调整,它可以在 Java 7 上运行。遗憾的是,如果不付出更多努力,这不适用于早期版本的 Java。
| 归档时间: |
|
| 查看次数: |
1475 次 |
| 最近记录: |