无法从Javadoc元素

时间:2017-02-02 19:58:28

标签: java gradle annotations javadoc

简短而甜蜜:尽管我要求Javadoc API为我提供注释的完全限定名称,但它只返回简单类型名称。

我正在编写一个严重依赖于注释检查的Javadoc doclet。因此,我创建了一个实用程序函数,它将获取AnnotationDesc个对象的数组,并返回一个Map,它将注释的完全限定名称与描述它的AnnotationDesc对象相关联。 。以下是相关功能:

public static final Map<String, AnnotationDesc> getAnnotationMap(AnnotationDesc[] notes)
{
    if (notes == null)
    {
        return Collections.emptyMap();
    }

    return Collections.unmodifiableMap(Arrays.stream(notes).collect(Collectors.toMap(AnnotationUtils::getNoteName, note -> note)));
}

private static String getNoteName(AnnotationDesc note) { return note.annotationType().qualifiedTypeName(); }

为了它的价值,我也尝试使用qualifiedName,这是AnnotationDesc.annotationType方法的返回值公开的另一种方法。

在我的集成测试中,这一切都很有效。但是,当我将doclet推送到Artifactory时,将其下拉到另一个项目并尝试通过Gradle任务调用它,我的地图中的键是注释的简单类型名称。

以下是Gradle任务的定义:

task myDocletTask(type: Javadoc) {
    source = sourceSets.main.allJava
    destinationDir = reporting.file("my-doclet-dir")
    options.docletpath = configurations.jaxDoclet.files.asType(List)
    options.doclet = <redacted - fully qualified type name of custom doclet>
}

我注意到如果程序元素使用完全限定的注释进行注释,那么完全限定的名称实际上是由Javadoc API选取的。例如:@com.package.Annotation会产生预期的行为,但@Annotation不会。

有人可以帮助我理解为什么会这样,更重要的是,我如何才能达到预期/期望的行为?

1 个答案:

答案 0 :(得分:0)

问题是注释不是在“文档时间”的doclet的类路径上。为了解决这个问题,我使用以下行扩充了我的Gradle Javadoc任务:options.classpath = sourceSets.main.runtimeClasspath.asType(List)