plugin - mavenreportexception error while generating javadoc
JDK8-Error "archivo de clase para javax.interceptor.InterceptorBinding no encontrado" al intentar generar javadoc usando el complemento Maven javadoc (8)
@lpratlong dice en una respuesta proporcionada en un comentario "agregarlo como una dependencia adicional de maven-javadoc-plugin". Eso funcionó para mí, aquí está la entrada completa del complemento Maven para personas impacientes como yo para copiar y pegar:
<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.
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 múltiples módulos (estoy lanzando el objetivo Maven "javadoc: agregado" desde un módulo principal con el tipo de empaque "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 un 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 e intenté buscar en Google durante mucho tiempo, pero no tuve éxito. He encontrado enlaces, donde las personas tenían problemas similares, pero sin ninguna información sobre la 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 también experimentó este tipo de comportamiento (desafortunadamente parece un problema bastante "raro" por alguna razón)? Muy desesperado por esto ...
Como @kozlovda ya menciona, el problema viene con la anotación
@Transactional
(
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 use
org.springframework.transaction.annotation.Transactional
.
Reemplazar la importación solucionó el problema para mí.
Esto parece deberse a que
javax.transaction.Transactional
(o cualquier otra clase en su classpath) se anota con
javax.interceptor.InterceptorBinding
, que falta en classpath a menos que se declare explícitamente en 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.+ (uorg.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final
) y normalmente es usado 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 en la parte superior deTransactional
, no es necesario para el funcionamiento normal y (parece ser por esto) no se obtiene como una dependencia transitiva de su marco JPA.
Como resultado, la herramienta JDK8 javadoc no puede procesar las fuentes (si alguna de ellas está anotada con
@Transactional
).
Aunque podría ser más específico sobre el lugar donde se ha encontrado este "error".
javax.interceptor:javax.interceptor-api:1.+
problema
: agregar
javax.interceptor:javax.interceptor-api:1.+
dependencia corrige el problema.
<dependency>
<groupId>javax.interceptor</groupId>
<artifactId>javax.interceptor-api</artifactId>
<version>1.2</version>
</dependency>
InterceptorBinding está disponible en la siguiente dependencia de Maven:
<dependency>
<groupId>javax.interceptor</groupId>
<artifactId>javax.interceptor-api</artifactId>
<version>1.2</version>
</dependency>
Reemplace como a continuación
<dependency>
<groupId>net.sourceforge.cobertura</groupId>
<artifactId>cobertura</artifactId>
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
También puede agregar la dependencia de Maven a su archivo POM. Resolvió este problema para mí
<dependency> <groupId>net.sourceforge.cobertura</groupId> <artifactId>cobertura</artifactId> <version>2.1.1</version> <scope>compile</scope> </dependency>
También puede agregar la siguiente línea a su configuración de javadoc maven:
<failOnError>false</failOnError>
.
Esto le indicará a la ejecución de javadoc que ignore todos los errores y no permita que falle la compilación.
Por lo tanto, su 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>
Tuve el mismo problema con Spring-Boot 2 Kotlin y gradle. Como @kozlovda sugirió:
dependencies {
compileOnly ''javax.interceptor:javax.interceptor-api:1.+''
...
solucionó el problema