Ant XSLT 任务构建多个依赖项

发布于 2024-11-07 05:17:31 字数 567 浏览 1 评论 0 原文

我有一个 XSL 样式表,可以通过这种方式合并外部文档

我希望 XSLT Ant 构建任务能够在文件或任何它的依赖关系发生了变化。

当前的 Ant 任务如下所示
<代码> destdir="xxxx/dir/${doc.locale}"
包括=“*.xml”
排除=“snippets.xml”
style="build/xxxx/${doc.locale}/myStyle.xsl">

> 基本上,如果snippets.xml

文档发生更改,我想重建。

I have an XSL style sheet that merges external documents, this way
<xsl:copy-of select="document('snippets.xml')/snippets/xxxx/form"/>

I would like that the XSLT Ant build task rebuilds if the file or any of its dependencies changed.

The current Ant task looks like this

<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"/>

Basically I would like to rebuild if the snippets.xml document is changed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

当梦初醒 2024-11-14 05:17:31

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>

Ant has the uptodate task to check if a target is up-to-date, file modtime-wise, from a set of source files. I'm not completely clear on what your dependency is since the XSLT task could create multiple files (resulting in multiple targets), or if it creates a single file. One of your comments imply a single file.

The following is one way to use uptodate. You basically use the task to set a property that can then be put in the unless attribute of a target:

<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>
书间行客 2024-11-14 05:17:31

默认情况下,XSLT 任务 应该为您执行此操作。它有一个可选的“force”属性

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

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

The XSLT task should do this for you by default. It has an optional "force" attribute

Recreate target files, even if they
are newer than their corresponding
source files or the stylesheet

which is false by default. So by default, unless you override with the "force" attribute, dependencies are checked by the XSLT task.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文