0

問題を実証するために、より大きな規模でやりたいことの非常に単純なデモを用意しました。

構成: 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>

私は何を間違っていますか?誰か助けてくれませんか?

4

1 に答える 1