我们的项目通过Microsoft Team Foundation Server(TFS)进行源代码管理。
当Ant构建脚本在Worklight项目上执行"全部构建并部署"后执行时,我会看到以下错误:
生成文件:C: \Users\ren04\Documents\Workspaces\MCAMWorkspace\MCAMWorklightPOCJQ\apps\Fourcast\android\native.externalToolBuilders\wlprebuild.xml
运行:
生成失败的
C: \Users\ren04\Documents\Workspaces\MCAMWorkspace\MCAMWorklightPOCJQ\apps\Fourcast\android\native.externalToolBuilders\wlprebuild.xml:10:无法更改只读文件的修改日期C: \Users\ren04\Documents\Workspaces\MCAMWorkspace\MCAMWorklightPOCJQ\apps\Fourcast\android\native\res\xml\config.xml
总时间:342毫秒
以下是Worklight生成的wlprebuild.xml Ant脚本的内容,该脚本会触发错误:
<project name="wlprebuild" basedir="." default="run">
<!-- Licensed Materials - Property of IBM
5725-G92 (C) Copyright IBM Corp. 2006, 2013. All Rights Reserved.
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp. -->
<!-- This is worklight file that change timestamp of the AndroidManifest.xml when running as android project -->
<target name="run">
<touch file="../res/xml/config.xml" verbose="false"/>
</target>
</project>
很明显,当Ant试图"触摸"TFS管理的Android工作灯项目中的config.xml文件时,它无法修改时间戳。这是因为该文件是只读的,并且由TFS管理为只读,直到在编辑器中对其进行修改(此时它从源代码存储库中签出并变为可编辑)。
我的问题是,config.xml文件的"触摸"有什么作用,它引起的错误是否是我们需要解决的问题?
需要触摸文件,是的。
如果我没有记错的话,这是因为在构建Worklight项目后,如果服务器和/或设备之间存在时间差,应用程序中的web资源可能无法更新。由于时间戳的原因,web资源现在总是最新的。
我自己没有尝试过,但也许你也可以:
- 保持config.xml文件的可写性
- 创建一个新文件并在wlprebuild.xml中指向它,这样"触摸"就不会在config.xml中,而是指向另一个文件