web-dev-qa-db-ja.com

JDK8-Maven javadocプラグインを使用してjavadocを生成しようとするとエラー「javax.interceptor.InterceptorBindingのクラスファイルが見つかりません」

私はJDK8を使用しています(Jenkinsによって起動されたLinux上でWin x64 u25 JDK +を使用してEclipseワークスペースで試してみました-jdk-8u20-linux-x64、両方で同じ問題)。

マルチモジュールMavenプロジェクトがあります(パッケージタイプが「pom」のメインモジュールからMavenゴール「javadoc:aggregate」を起動しています)。

Pomビルドセクションは次のようになります。

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
        </plugin>
    </plugins>
</build>

私は常にエラーを受け取ります:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-javadoc-plugin:2.10.1:aggregate (default-cli) on project uloan-global-build: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - javadoc: error - com.Sun.tools.doclets.internal.toolkit.util.DocletAbortException: com.Sun.tools.doclets.internal.toolkit.util.DocletAbortException: com.Sun.tools.doclets.internal.toolkit.util.DocletAbortException: com.Sun.tools.javac.code.Symbol$CompletionFailure: class file for javax.interceptor.InterceptorBinding not found
[ERROR] 
[ERROR] Command line was: /usr/Java/jdk1.8.0_20/jre/../bin/javadoc @options @packages

私は可能な限りすべてのことを試し、長い間Googleで検索しようとしましたが、成功しませんでした。人々が同様の問題を抱えていたが、可能な解決策に関する情報がないリンクを見つけました。

http://marc.info/?l=maven-user&m=139615350913286&w=2

http://mail-archives.Apache.org/mod_mbox/maven-users/201409.mbox/%[email protected]%3E (JDK8を> 20にアップデートすることを提案)私がやったが、問題はまだ同じです)。

ヒントやこのような動作を経験した人もいます(残念ながら、何らかの理由で非常に「まれな」問題に見えます)。これについてはかなり必死です...

62
Michal Aron

これは、javax.transaction.Transactional(またはクラスパス内の他のクラス)自体にjavax.interceptor.InterceptorBindingの注釈が付けられているためであり、依存関係で明示的に宣言されていない限り、クラスパスにはありません。

@Inherited
@InterceptorBinding // <-- this ONE is causing troubles
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Transactional {

と言った:

  • javax.transaction.Transactional- javax.transaction:javax.transaction-api:1。+ (またはorg.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final)が付属し、通常、トランザクションに注釈を付けるためにJPA/ORM/JMSアプリで使用されますメソッド。
  • javax.interceptor.InterceptorBinding- javax.interceptor:javax.interceptor-api:1。+ が必要です。ただし、Transactionalの上で宣言されていますが、通常の操作には必要ではなく(このために見える)、JPAフレームワークの推移的な依存関係として取得されません。

その結果、JDK8 javadocツールはソースの処理に失敗します(それらのいずれかに@Transactionalアノテーションが付けられている場合)。

この「エラー」が見つかった場所については、より具体的かもしれませんが。

問題の修正javax.interceptor:javax.interceptor-api:1.+依存関係を追加すると問題が修正されます。

<dependency>
    <groupId>javax.interceptor</groupId>
    <artifactId>javax.interceptor-api</artifactId>
    <version>1.2</version>
</dependency>
105
kozlovda

次の行をjavadoc maven構成に追加することもできます。<failOnError>false</failOnError>。これにより、javadocの実行はすべてのエラーを無視し、ビルドを失敗させません。

したがって、完全なjavadocプラグイン設定は次のようになります。

<build>
   <plugins>
       <plugin>
           <groupId>org.Apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <configuration>
               <source>1.8</source>
               <target>1.8</target>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.Apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
           <configuration>
               <additionalparam>-Xdoclint:none</additionalparam>
               <failOnError>false</failOnError>
           </configuration>
       </plugin>
    </plugins>
</build>
10
dfme

@lpratlongは、コメントで提供された回答で「maven-javadoc-pluginの追加の依存関係として追加」と述べています。これは私にとってはうまくいきました。ここに、私のようなせっかちな人がコピーアンドペーストするための完全なMavenプラグインエントリを示します。

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <!-- <version>3.0.0</version> -->
            <configuration>
                <!-- Silence error javax.interceptor.InterceptorBinding not found -->
                <additionalDependencies>
                    <additionalDependency>
                        <groupId>javax.interceptor</groupId>
                        <artifactId>javax.interceptor-api</artifactId>
                        <version>1.2</version>
                    </additionalDependency>
                </additionalDependencies>
            </configuration>
        </plugin>

私の場合、spring-bootはバージョンを管理しているため、バージョンはコメントアウトされています。必要に応じて復元するだけです。

9
chrisinmtown

InterceptorBindingは、次のMaven依存関係で利用できます。

<dependency>
    <groupId>javax.interceptor</groupId>
    <artifactId>javax.interceptor-api</artifactId>
    <version>1.2</version>
</dependency>
2

Spring-Boot 2 Kotlinとgradleでも同じ問題が発生しました。 @kozlovdaが示唆したように:

dependencies {
  compileOnly 'javax.interceptor:javax.interceptor-api:1.+'
  ...

問題を修正しました

0
Oliver Sahner