JS doc与ant

时间:2010-02-02 21:50:06

标签: javascript ant

我正在尝试使用ant来运行我的jsdoc工具包。在我从网站的examples创建build.xml之后,我最终得到了这个:

<taskdef name="jsdoctoolkit" classname="uk.co.darrenhurley.ant.tasks.JsDocToolkit" classpath="/jsdoc/jsrun.jar;/jsdoc/java/classes/js.jar"/>

当我运行#ant时,我收到以下错误:

/pathto/jsdoc_toolkit-2.3.2/build.xml:1: Unexpected element "{}taskdef" {antlib:org.apache.tools.ant}taskdef

由于我现在是java开发人员,我只能猜测我的类名(我从网站上获取的)是不正确的。但我现在想知道用什么来代替它。

任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

我没有太多运气试图让 jsdoctoolkit任务工作。幸运的是,在不使用任务的情况下直接从Ant运行JSDoc Toolkit非常容易。

<property name="source.dir" value="source" />
<property name="doc.dir" value="docs" />

<property name="tool.dir" value="tools" />

<property name="jsdoctoolkit.dir" value="${tool.dir}/jsdoc_toolkit-2.4.0/jsdoc-toolkit" />


<target name="docs" description="Generates documentation">
    <sequential>
        <delete dir="${doc.dir}"/>
        <mkdir dir="${doc.dir}" />

        <echo message="Running JSDoc Toolkit"/>

        <!-- The java exe is told to run in the dir where our source files reside.
                 If we instead ran it from the dir that the build file is in and gave it
                 full paths to the source files the documentation would include the full
                 filesystem paths (c:\path\to\source\) instead of relative ones.
                 Since this command is running in the source dir, all of the paths
                 given to it must first traverse down a level (../) to get back to the
                 build file dir.
        -->
        <exec executable="java" dir="${source.dir}">
            <arg line="-jar ../${jsdoctoolkit.dir}/jsrun.jar ../${jsdoctoolkit.dir}/app/run.js" />
            <!-- -d tells JSDoc toolkit where to output the documentation -->
            <arg line="-d=../${doc.dir}" />
            <!-- use the default template -->
            <arg line="-t=../${jsdoctoolkit.dir}/templates/jsdoc" />
            <!-- Create an arg element for each file you want to include in the documentation -->
            <arg line="my-javascript-file.js" />
            <arg line="another-javascript-file.js" />
            <arg line="subdir/yet-another-javascript-file.js" />
        </exec>
    </sequential>
</target>

此目标假定项目具有以下目录结构:

build.xml
docs/
source/
    my-javascript-file.js
    another-javascript-file.js
    subdir/
        yet-another-javascript-file.js
tools/
    jsdoc_toolkit-2.4.0/
        jsdoc-toolkit/
            jsrun.js
            app/
                run.js

答案 1 :(得分:0)

您的直接假设可能不正确。您遇到的XML错误告诉您解析器在XML结构中的错误位置遇到了<taskdef>元素。事实上,在这一点上,它甚至没有去查看元素本身,因此classname属性不是问题所在。

正如Pointy所说,尝试发布整个XML - 或者至少自己查看一下,并检查<taskdef>元素是否正确定位。它需要位于<project>标记的顶层。如果你把它嵌套在其他元素中,这是无效的,它将无效。

通常,您的构建文件可能如下所示:

<project name="MyProject" default="dist" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- set global properties for this build -->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist"  location="dist"/>

  <taskdef name="jsdoctoolkit" classname="uk.co.darrenhurley.ant.tasks.JsDocToolkit" classpath="/jsdoc/jsrun.jar;/jsdoc/java/classes/js.jar"/>

  <!-- Rest of file... -->

在所有情况下,如果您将taskdef行从现在的位置移到文件顶部的<project>行的正下方,我希望这会解决您的问题。