2015-01-06 2 views
34

Я использую JDK8 (пробовал его на рабочем пространстве Eclipse с помощью Win x64 u25 JDK + в Linux, выпущенным Jenkins - jdk-8u20-linux-x64, та же проблема для обоих).JDK8 - ошибка файла класса для javax.interceptor.InterceptorBinding не найден "при попытке создания javadoc с использованием Maven javadoc plugin

У меня есть мультимодульный проект Maven (я запускаю цель Maven «javadoc: aggregate» из основного модуля с типом упаковки «pom»).

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, который я сделал, но проблема по-прежнему то же самое).

Любые подсказки или кто-либо испытал подобное поведение (к сожалению, по какой-то причине это выглядит как «редкая» проблема)? Отчаянно об этом ...

+1

Вы уверены, что правильно установили 8u20? – JamesB

+0

У меня была такая же проблема с GRADLE - это было потому, что у меня был JDK 1.7 на моем пути, но JAVA_HOME указывал на 1.8 JDK - Спасибо, @JamesB – BretC

+0

Я нахожу то же самое, но я нахожусь на 8u31 – RedDeckWins

ответ

62

Это, кажется, из-за 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.

В результате Javokoc JDK8 не обрабатывает источники (если какой-либо из них аннотируется @Transactional).

Хотя это может быть более конкретным о месте, где эта «ошибка» была найдена.

Исправление проблемы: добавление javax.interceptor:javax.interceptor-api:1.+ зависимостей устраняет проблему.

+2

Да, это решило для меня аналогичную проблему. Кажется, javadoc JDK 8 требует, чтобы транзитивные зависимости находились в пути к классам, тогда как JDK 7 был более мягким. –

+7

Зависимость Maven является: \t \t \t javax.interceptor \t \t \t javax.interceptor-апи \t \t \t 1,2 \t \t

+0

Спасибо большое, @kozlovda, что решил. Извините за долгую задержку с проверкой ответа - работал над чем-то совершенно другим, и пока не смог найти время, чтобы проверить это в старой рабочей области :-) –

8

Вы также можете добавить следующую строку в конфигурацию 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> 
+6

Этот ответ не на самом деле решить проблему, она скорее скрывает ее. failOnError = true позволяет Maven продолжить сборку, но поскольку JavaDoc прерывается, не все файлы генерируются. Например, все файлы индекса могут не быть сгенерированы. Можете ли вы считать сборку с усеченными JavaDocs успешной? –

7

Как уже упоминалось @kozlovda, проблема связана с аннотацией @Transactional (javax.transaction.Transactional).

Если у вас есть описываемая ошибка на пробеге Maven для приложения Spring, есть и другой способ решить эту проблему: убедитесь, что не использовать аннотацию из javax.transaction, вместо этого использовать org.springframework.transaction.annotation.Transactional.

Замена импорта исправила проблему для меня.

+0

Спасибо! Javadoc для одного из моих классов контроллера всегда терпел неудачу, и я не видел напрямую, почему. Это был единственный класс с импортом на javax.Transactional. – user2323354

-3

Вы также можете добавить зависимость от Maven в свой файл POM. Он решил эту проблему для меня

<dependency> 
     <groupId>net.sourceforge.cobertura</groupId> 
     <artifactId>cobertura</artifactId> 
     <version>2.1.1</version> 
     <scope>compile</scope> 
    </dependency> 
1

При правильном кредита @lpratlong вот полная запись для нетерпеливых людей, как я, чтобы копипаст:

 <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> 

версия закомментирована, потому что в моем случае весной -boot управляет версией, просто восстанавливается по мере необходимости.

 Смежные вопросы

  • Нет связанных вопросов^_^