Ant XSLT任务构建在多个依赖项上

时间:2011-05-14 11:25:17

标签: ant xslt

我有一个合并外部文档的XSL样式表,这种方式 <xsl:copy-of select="document('snippets.xml')/snippets/xxxx/form"/>

如果文件或其任何依赖项发生更改,我希望重建XSLT Ant构建任务。

当前的Ant任务看起来像这样 <xslt basedir="xxxx/pages/${doc.locale}"
destdir="xxxx/dir/${doc.locale}"
includes="*.xml"
excludes="snippets.xml"
style="build/xxxx/${doc.locale}/myStyle.xsl">
<param name="lang" expression="${doc.locale}"/>
<xmlcatalog refid="docDTDs"/>

基本上,如果更改了snippets.xml文档,我想重建。

2 个答案:

答案 0 :(得分:2)

Ant有一个uptodate任务,用于从一组源文件中检查目标是否是最新的,文件模式化的。我不完全清楚你的依赖是什么,因为XSLT任务可以创建多个文件(导致多个目标),或者如果它创建一个文件。你的一条评论意味着一个文件。

以下是使用uptodate的一种方法。您基本上使用该任务来设置可以放在目标的unless属性中的属性:

<property name="file.that.depends.on.snippets"
          location="some/path"/>
<property name="snippets.file"
          location="xxxx/pages/${doc.locale}/snippets.xml"/>

<target name="process-snippets"
        unless="snippets.uptodate"
        depends="snippets-uptodate-check">
  <xslt basedir="xxxx/pages/${doc.locale}"
        destdir="xxxx/dir/${doc.locale}"
        includes="*.xml"
        excludes="snippets.xml"
        style="build/xxxx/${doc.locale}/myStyle.xsl">
    <param name="lang" expression="${doc.locale}"/>
    <xmlcatalog refid="docDTDs"/>
  </xslt>
</target>

<target name="snippets-uptodate-check">
  <uptodate property="snippets.uptodate"
            targetfile="$file.that.depends.on.snippets">
    <srcfiles dir="xxxx/pages/${doc.locale}"
              includes="*.xml"
              excludes="snippets.xml"/>

  </uptodate>
</target>

答案 1 :(得分:-1)

XSLT task默认情况下应该为您执行此操作。它有一个可选的“强制”属性

  

重新创建目标文件,即使它们也是如此   比他们相应的更新   源文件或样式表

默认为false。因此,默认情况下,除非使用“force”属性覆盖,否则XSLT任务将检查依赖项。