Я использую JDK8 (пробовал его на моем рабочем пространстве Eclipse с Win x64 u25 JDK + в Linux, запущенном Jenkins - jdk-8u20-linux-x64, та же проблема для обоих).
У меня есть многомодульный проект 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/%3C54101E24.6060304@gmx.de%3E (предлагается обновить JDK8 до> обновления 20, что я и сделал, но проблема все еще тот же самый).
Какие-то намеки или кто-то тоже испытывал подобное поведение (к сожалению, почему-то это выглядит довольно "редкой" проблемой)? Совершенно отчаянно об этом ...
источник
Ответы:
Это, по-видимому, связано с
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.В результате инструмент javadoc JDK8 не может обработать источники (если какие-либо из них помечены
@Transactional
).Хотя можно было бы более конкретно о том, где была обнаружена эта «ошибка».
Проблема Исправление : добавление
javax.interceptor:javax.interceptor-api:1.+
исправления зависимостей этот вопрос.<dependency> <groupId>javax.interceptor</groupId> <artifactId>javax.interceptor-api</artifactId> <version>1.2.2</version> </dependency>
Примечание (январь 2020 г.): последняя (вероятная) версия в настоящее время - 1.2.2 (см. Https://mvnrepository.com/artifact/javax.interceptor/javax.interceptor-api
источник
Как уже упоминает @kozlovda, проблема связана с
@Transactional
аннотацией (javax.transaction.Transactional
).Если у вас есть описанная ошибка при запуске Maven для приложения Spring, есть также другой способ решить проблему: не используйте аннотацию из
javax.transaction
, вместо этого используйтеorg.springframework.transaction.annotation.Transactional
.Замена импорта устранила проблему для меня.
источник
Можно также добавить следующую строку в файл конфигурации Maven JavaDoc:
<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>
источник
@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 управляет версией, просто восстанавливайте по мере необходимости.
источник
Использовать
import org.springframework.transaction.annotation.Transactional;
вместо
import javax.transaction.Transactional;
когда вы используете @Transactional с Spring
источник
InterceptorBinding доступен при следующей зависимости maven:
<dependency> <groupId>javax.interceptor</groupId> <artifactId>javax.interceptor-api</artifactId> <version>1.2</version> </dependency>
источник
Заменить, как показано ниже
import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class WorkingService
источник
У меня была такая же проблема с Spring-Boot 2 Kotlin и gradle. Как предположил @kozlovda:
dependencies { compileOnly 'javax.interceptor:javax.interceptor-api:1.+' ...
исправил проблему
источник
Вы также можете добавить зависимость Maven в свой файл POM. Это решило эту проблему для меня
<dependency> <groupId>net.sourceforge.cobertura</groupId> <artifactId>cobertura</artifactId> <version>2.1.1</version> <scope>compile</scope> </dependency>
источник