簡體   English   中英

將類加載到自定義JavaDoc Taglet中?

[英]Loading the class in a custom JavaDoc Taglet?

我正在編寫一個自定義JavaDoc Taglet,並希望加載和創建要為其處理JavaDoc的類的實例。 這是我的代碼(公共類CDKIOOptionsTaglet實現Taglet):

public String toString(Tag tag) {
    return "<DT><B>IO options: </B><DD>"
           + expand(tag) + "</DD>\n";
}

public String toString(Tag[] tags) {
    if (tags.length == 0) {
        return null;
    } else {
        return toString(tags[0]);
    }
}

private String expand(Tag tag) {
    // create a table with IOOptions
    StringBuffer tableContent = new StringBuffer();
    SourcePosition file = tag.position();
    String pathAndFile = file.file().toString();
    pathAndFile = pathAndFile.replaceAll("/", ".");
    pathAndFile = pathAndFile.substring(pathAndFile.indexOf("src.main") + 9);
    pathAndFile = pathAndFile.substring(0, pathAndFile.indexOf(".java"));
    try {
        Class ioClass = Class.forName(pathAndFile);
        Object ioInstance = ioClass.newInstance();
        if (ioInstance instanceof IChemObjectIO) {
            IChemObjectIO objectIO = (IChemObjectIO)ioInstance;
            tableContent.append("<table>");         
            for (IOSetting setting : objectIO.getIOSettings()) {
                tableContent.append("<tr>");
                tableContent.append("<td>" + setting.getName() + "</td>");
                tableContent.append("<td></td>");
                tableContent.append("</tr>");
            }
            tableContent.append("</table>");
        }
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    }
    return tableContent.toString();
}

這是Ant腳本,其中包括將要加載的類添加到調用過程中使用的類路徑的jar文件:

<classpath>
  <pathelement location="." />
  <fileset dir="dist/jar">
    <include name="*.jar" />
  </fileset>
  <javadoc ...>
</classpath>

我要為其創建JavaDoc的類所在的jar駐留在dist / jar中。 為了完整性(並應要求提供),以下是完整說明:

    <javadoc destdir="${javadoc.dir}"
             author="true" version="true" use="true"
             public="true"
             windowtitle="CDK API - version ${TODAY_SVN}">
        <classpath>
            <pathelement location="." />
            <fileset dir="dist/jar">
                <include name="*.jar" />
            </fileset>
            <fileset dir="jar">
                <include name="*.jar" />
            </fileset>
            <fileset dir="jar/jena">
                <include name="*.jar" />
            </fileset>
             <dirset dir="src/main">
                 <include name="net/**/*"/>
             </dirset>
        </classpath>
        <tag name="cdk.set" scope="all" description="Belongs to the set:" />
        <tag name="cdk.keyword" scope="all" description="Keywords:" />
        <tag name="cdk.created" scope="all" description="Created on:" />
        <tag name="cdk.require" scope="all" description="Requires:" />
        <tag name="cdk.depends" scope="all" description="Required library to be able to run this class:" />
        <tag name="cdk.builddepends" scope="all" description="Required library to be able to compile this class:" />
        <tag name="cdk.todo" scope="all" description="To do:" />
        <tag name="cdk.license" scope="all" description="License:" />
        <taglet name="net.sf.cdk.tools.doclets.CDKCiteTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKModuleTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKBugTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKDictRefTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKInChITaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKThreadSafeTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKThreadNonSafeTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKGitTaglet" path="jar/xom-1.1.jar:src/main" />
        <taglet name="net.sf.cdk.tools.doclets.CDKIOOptionsTaglet" path="jar/xom-1.1.jar:src/main" />
        <packageset dir="${src}/main" defaultexcludes="yes">
            <include name="org/openscience/cdk/**" />
        </packageset>
            <link href="${javaURL}"/>
    </javadoc>

我用“ ant -v”確認了適當的jar確實包含了正在加載的類。 仍然,我得到這個堆棧跟蹤:

[javadoc] java.lang.ClassNotFoundException: org.openscience.cdk.Atom
[javadoc]     at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
[javadoc]     at java.security.AccessController.doPrivileged(Native Method)
[javadoc]     at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
[javadoc]     at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
[javadoc]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
[javadoc]     at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
[javadoc]     at net.sf.cdk.tools.doclets.CDKIOOptionsTaglet.expand(CDKIOOptionsTaglet.java:104)
[javadoc]     at net.sf.cdk.tools.doclets.CDKIOOptionsTaglet.toString(CDKIOOptionsTaglet.java:83)
[javadoc]     at net.sf.cdk.tools.doclets.CDKIOOptionsTaglet.toString(CDKIOOptionsTaglet.java:91)
[javadoc]     at com.sun.tools.doclets.internal.toolkit.taglets.LegacyTaglet.getTagletOutput(LegacyTaglet.java:130)
[javadoc]     at com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter.genTagOuput(TagletWriter.java:185)
[javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.printTags(HtmlDocletWriter.java:230)
[javadoc]     at com.sun.tools.doclets.formats.html.ClassWriterImpl.writeClassTagInfo(ClassWriterImpl.java:246)
[javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassTagInfo(ClassBuilder.java:287)

如何獲取Taglet來加載為其創建JavaDoc的類,以便可以使用反射(等)來了解有關該類的更多信息,並將其作為Taglet輸出的一部分返回?

<classpath>配置不是聲明實例化的類的正確位置。 由於標記實例化了您的類,因此您需要將這些類添加到標記的類路徑中:

<taglet name="net.sf.cdk.tools.doclets.CDKCiteTaglet">
  <path>
    <pathelement location="." />
    <fileset dir="dist/jar">
      <include name="*.jar" />
    </fileset>
  </path>
</taglet>

在命令行上,它應如下所示:

javadoc \
  ...
  -taglet 'net.sf.cdk.tools.doclets.CDKCiteTaglet' \
  -tagletpath '/.../jar/xom-1.1.jar:/.../jar/my-lib1.jar:/.../jar/my-lib2.jar:...' \
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM