JDK8-Maven javadoc 플러그인을 사용하여 javadoc을 생성하려고 할 때 "javax.interceptor.InterceptorBinding에 대한 클래스 파일을 찾을 수 없음"오류 발생
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://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의-API : 1. +를 javax.transaction의 (나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 프레임 워크의 전이 종속성으로 가져 오지 않습니다.
결과적으로 JDK8 javadoc 도구가 소스를 처리하지 못합니다 (어노테이션이있는 소스가있는 경우 @Transactional
).
이 "오류"가 발견 된 장소에 대해 더 구체적 일 수 있습니다.
문제 수정 : javax.interceptor:javax.interceptor-api:1.+
종속성을 추가 하면 문제가 해결됩니다.
<dependency>
<groupId>javax.interceptor</groupId>
<artifactId>javax.interceptor-api</artifactId>
<version>1.2</version>
</dependency>
@kozlovda가 이미 언급했듯이 문제는 @Transactional
주석 ( javax.transaction.Transactional
) 과 함께 제공됩니다 .
Spring 애플리케이션에 대해 Maven 실행에 대해 설명 된 오류가있는 경우 문제를 해결하는 또 다른 방법이 javax.transaction
있습니다 org.springframework.transaction.annotation.Transactional
. 대신 .NET의 주석을 사용하지 않도록하십시오 .
가져 오기를 교체하면 문제가 해결되었습니다.
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>
@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가 버전을 관리하고 필요에 따라 복원하기 때문에 버전이 주석 처리되었습니다.
InterceptorBinding은 다음 Maven 종속성에서 사용할 수 있습니다.
<dependency>
<groupId>javax.interceptor</groupId>
<artifactId>javax.interceptor-api</artifactId>
<version>1.2</version>
</dependency>
Spring-Boot 2 Kotlin 및 gradle에서도 동일한 문제가 발생했습니다. @kozlovda가 제안한대로 :
dependencies {
compileOnly 'javax.interceptor:javax.interceptor-api:1.+'
...
문제를 해결
아래와 같이 교체
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class WorkingService
POM 파일에 Maven 종속성을 추가 할 수도 있습니다. 그것은 나를 위해이 문제를 해결했습니다.
<dependency>
<groupId>net.sourceforge.cobertura</groupId>
<artifactId>cobertura</artifactId>
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
'IT Share you' 카테고리의 다른 글
그룹별로 첫 번째 행 선택 (0) | 2020.11.16 |
---|---|
공유 호스트의 " 'LOG_BACKUP'으로 인해 데이터베이스의 트랜잭션 로그가 가득 찼습니다." (0) | 2020.11.16 |
WatchKit 앱에는 iOS 8.2 (기존 8.3)와 동일한 배포 대상이 있어야합니까? (0) | 2020.11.16 |
PhpStorm / Webstorm에서 JavaScript로 가져 오기가 작동하지 않음 (0) | 2020.11.16 |
Android 셸에서 파일을 복사하고 편집하는 방법은 무엇입니까? (0) | 2020.11.16 |