2013-12-20 120 views
0

我们有一个ant构建过程,目前构建我们的war文件。战争中非编译文件(html)的一个子集需要进行令牌替换,但我不想在磁盘上执行此操作(我们不想保存更改)。随着战争的建立,是否有任何方法来执行令牌替换。WAR任务中的ANT文本替换

当前战争过程

<war basedir="${company.webapps.dir}" destfile="${dist.dir}/${company.war.filename}" 
    webxml="${company.webapps.dir}/WEB-INF/web.xml" update="true"> 
    <exclude name="WEB-INF/**" /> 
    <exclude name="**/*.coffee" /> 
    <exclude name="**/*.haml" /> 
    <exclude name="**/*.sass" /> 
    <exclude name="**/*.scss" /> 
    <webinf dir="${company.webapps.dir}/WEB-INF/"> 
     <include name="**/*" /> 
     <exclude name="**/servlet-api.jar" /> 
    </webinf> 
    <manifest> 
     <attribute name="build-timestamp" value="${build.info.timestamp}" /> 
    </manifest> 
</war> 

如果它不添加大量的时间,我会确定这个是一个战后任务

回答

0

我对你们的发言感到困惑:“我不想在磁盘上这样做(我们不想保存更改)“。你能详细说明一下吗?您可以使用<copy/>任务与<filterset>,这将允许您处理您的HTML文件并替换您想替换的任何标记。

然后,您可以使用在战争中具有替换的标记的文件的复制版本。我在战争中尝试使用<filterset>,但它不适用于<fileset><classes>。你必须使用<copy>来使用<filterset>,这就是我一直这样做的。

你是什么意思保存更改?您不必保存复制的文件,它们就像其他所有文件一样是工作文件。

<copy dir="${html.dir}" 
    todir="${html.work.dir}"> 
    <filterset> 
     <filter token="${token1}" value="${value1}"/> 
     <filter token="${token2}" value="${value2}"/> 
    <filterset> 
</copy> 

<war destfile="${war.file}" 
    webxml="${web.xml.file}"> 
    <classes dir="${html.work.dir}"/> <!-- The munged HTML files --> 

+0

我们有一个大的目录以各种路径HTML文件中设置。我想在它们上做令牌替换,但我不想让代替替换被提交给git。我希望能够完成战争文件,然后在战争中替换代币。没有考虑采取两个阶段的做法。理论上,我可以在没有html文件的情况下创建战争,将它们复制到临时位置,将它们标记化,然后将它们添加到战争中,然后删除它们。 – dstarh

+0

我现在明白了......我几乎从不使用''这个任务。您正在使用作为源代码库一部分的文件,并且很容易提交更改并丢失嵌入的令牌。在中使用''可以更好地工作,因为我可以将文件复制到工作目录中,而不用担心它们会意外地被提交。我希望''直接在''任务中工作,所以我可以在构建战争时进行过滤。 –

+0

直接在战争中使用filterset将正是我想要的。 – dstarh