我正在使用 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://mail-archives.apache.org/mod_mbox/maven-users/201409.mbox/%[电子邮件受保护]%3E http://mail-archives.apache.org/mod_mbox/maven-users/201409.mbox/%3C54101E24.6060304@gmx.de%3E(建议将JDK8更新到> update 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.+ https://repository.sonatype.org/#nexus-search;gav~javax.transaction~javax.transaction-api~1.2~~ (or 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.+ https://repository.sonatype.org/#nexus-search;gav~javax.interceptor~javax.interceptor-api~1.2~~%20javax.interceptor:javax.interceptor-api:1.2%22。但是,尽管在之上声明Transactional
,对于正常操作来说不是必需的,并且(看起来是因为这个)不会作为 JPA 框架的传递依赖项被获取。
因此 JDK8 javadoc 工具无法处理源(如果其中任何一个带有注释)@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 月):最新(合理)版本目前为 1.2.2(请参阅https://mvnrepository.com/artifact/javax.interceptor/javax.interceptor-api https://mvnrepository.com/artifact/javax.interceptor/javax.interceptor-api
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)