Я подготовил очень простую демонстрацию того, что я хотел бы сделать в гораздо большем масштабе, чтобы продемонстрировать проблему:
Конфигурация: java 1.8, maven 3.3.9, maven-javadoc-plugin 3.0.1
У меня есть артефакты maven testA, testB и testC.Компонент testA является проектом агрегатора javadoc.Класс B (находится в компоненте testB) импортирует и создает экземпляр класса C (находится в компоненте testC).
testA имеет прямую зависимость от testB, а testB напрямую зависит от testC (оба с предоставленной областью действия), поэтому testA имеет транзитивную зависимость от testC.
Кроме того, класс B помечен какпользовательский тег javadoc.
Поскольку у меня нет опыта написания доклетов, я использовал документ , который нашел в интернете , и изменил его в соответствии со своими потребностями (в основном я просто переписал метод exclude, чтобы включить толькодокументы класса, содержащие пользовательский тег).
Как уже упоминалось выше, testA является агрегатором, который предназначен для сбора источников зависимостей только из прямых (нетранзитивных) зависимостей и генерирования javadoc только для теговых классов.Это требует любых прямых зависимостей для объединения их исходных кодов во время сборки, поэтому я использую maven-source-plugin для генерации исходного артефакта из компонента testB.
Теперь проблема заключается в том, что когда я запускаю плагин maven javadoc, онпроисходит сбой в этом исключении:
[ERROR] java.lang.ArrayIndexOutOfBoundsException: 0
[ERROR] at com.sun.tools.doclets.formats.html.ConfigurationImpl.setTopFile(ConfigurationImpl.java:537)
Исключение относится к этой строке:
this.topFile = DocPath.forPackage(this.packages[0]).resolve(DocPaths.PACKAGE_SUMMARY);
Кажется, что нет пакета для обработки.Однако я уверен, что доклет работает как задумано, когда выполняется на одном компоненте (использование без агрегации, пробовал без maven - javadoc cmd).Кроме того, вся функция агрегации работает, когда я использую стандартный доклет, но он мне не нужен, поскольку мне действительно нужно включать только помеченные классы.
Вот POM.xml моего агрегатора:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>testA</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>testB</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<destDir>testOutput</destDir>
<includeDependencySources>true</includeDependencySources>
<doclet>com.test.MyDoclet</doclet>
<docletArtifact>
<groupId>test</groupId>
<artifactId>my-doclet-artifact</artifactId>
<version>1</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<tags>
<tag>
<name>MyTag</name>
</tag>
</tags>
</configuration>
</plugin>
</plugins>
</build>
</project>
Что я делаю не так?Может ли кто-нибудь помочь мне, пожалуйста?