Estoy usando JDK8 (lo probé en mi espacio de trabajo de Eclipse con Win x64 u25 JDK + en Linux lanzado por Jenkins - jdk-8u20-linux-x64, el mismo problema para ambos).
Tengo un proyecto Maven de varios módulos (estoy lanzando el objetivo de Maven "javadoc: aggregate" desde un módulo principal con el tipo de paquete "pom").
La sección de construcción de Pom se ve así:
<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>
Siempre recibo error:
[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
He intentado todo lo posible y he intentado buscar en Google durante mucho tiempo, pero sin éxito. Encontré enlaces, donde la gente tuvo problemas similares, pero sin ninguna información sobre una posible solución:
http://marc.info/?l=maven-user&m=139615350913286&w=2
http://mail-archives.apache.org/mod_mbox/maven-users/201409.mbox/%[email protected]%3E (sugiriendo actualizar JDK8 a> actualización 20, lo cual hice, pero el problema sigue siendo lo mismo).
¿Alguna sugerencia o alguien experimentó este tipo de comportamiento también (desafortunadamente, parece un problema bastante "raro" por alguna razón)? Bastante desesperado por esto ...
fuente
Respuestas:
Esto parece deberse a que
javax.transaction.Transactional
(o cualquier otra clase en su classpath para el caso) está anotado conjavax.interceptor.InterceptorBinding
, que falta en classpath a menos que se declare explícitamente en las dependencias:@Inherited @InterceptorBinding // <-- this ONE is causing troubles @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) public @interface Transactional {
Dijo eso:
javax.transaction.Transactional
- viene con javax.transaction: javax.transaction-api: 1. + (oorg.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final
) y se usa normalmente en aplicaciones JPA / ORM / JMS para anotar métodos transaccionales.javax.interceptor.InterceptorBinding
- debería venir con javax.interceptor: javax.interceptor-api: 1. + . Pero, aunque se declara por encima deTransactional
, no es necesario para el funcionamiento normal y (parece que debido a esto) no se busca como una dependencia transitiva de su marco JPA.Como resultado, la herramienta JDK8 javadoc no procesa las fuentes (si alguna de ellas tiene anotaciones
@Transactional
).Aunque podría ser más específico sobre el lugar donde se ha encontrado este "error".
Solución del problema : agregar
javax.interceptor:javax.interceptor-api:1.+
dependencia soluciona el problema.<dependency> <groupId>javax.interceptor</groupId> <artifactId>javax.interceptor-api</artifactId> <version>1.2.2</version> </dependency>
Nota (enero de 2020): la última versión (plausible) es actualmente 1.2.2 (consulte https://mvnrepository.com/artifact/javax.interceptor/javax.interceptor-api
fuente
Como ya menciona @kozlovda, el problema viene con la
@Transactional
anotación (javax.transaction.Transactional
).Si tiene el error descrito en una ejecución de Maven para una aplicación Spring, también hay otra forma de resolver el problema: asegúrese de no usar la anotación de
javax.transaction
, en su lugar useorg.springframework.transaction.annotation.Transactional
.Reemplazar la importación solucionó el problema para mí.
fuente
También puede añadir la siguiente línea a su configuración experta javadoc:
<failOnError>false</failOnError>
. Esto le dirá a la ejecución de javadoc que ignore todos los errores y no deje que la compilación falle.Por lo tanto, la configuración completa del complemento javadoc se vería así:
<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>
fuente
@lpratlong dice en una respuesta proporcionada en un comentario "agréguelo como dependencias adicionales de maven-javadoc-plugin". Eso funcionó para mí, aquí está la entrada completa del complemento Maven para que la gente impaciente como yo copie y pegue:
<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>
La versión está comentada porque, en mi caso, spring-boot administra la versión, solo restaure según sea necesario.
fuente
Utilizar
import org.springframework.transaction.annotation.Transactional;
en vez de
import javax.transaction.Transactional;
cuando usa @Transactional con Spring
fuente
InterceptorBinding está disponible en la siguiente dependencia de maven:
<dependency> <groupId>javax.interceptor</groupId> <artifactId>javax.interceptor-api</artifactId> <version>1.2</version> </dependency>
fuente
Reemplazar como se muestra a continuación
import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class WorkingService
fuente
Tuve el mismo problema con Spring-Boot 2 Kotlin y gradle. Como sugirió @kozlovda:
dependencies { compileOnly 'javax.interceptor:javax.interceptor-api:1.+' ...
solucionó el problema
fuente
También puede agregar la dependencia de Maven a su archivo POM. Me resolvió este problema
<dependency> <groupId>net.sourceforge.cobertura</groupId> <artifactId>cobertura</artifactId> <version>2.1.1</version> <scope>compile</scope> </dependency>
fuente