简短而甜蜜:尽管我要求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
不会。
有人可以帮助我理解为什么会这样,更重要的是,我如何才能达到预期/期望的行为?
答案 0 :(得分:0)
问题是注释不是在“文档时间”的doclet的类路径上。为了解决这个问题,我使用以下行扩充了我的Gradle Javadoc任务:options.classpath = sourceSets.main.runtimeClasspath.asType(List)
。