JDK 11 이상 및 Javadoc


13
Exit code: 1 - javadoc: error - The code being documented uses packages in the unnamed module, but the packages defined in https://docs.oracle.com/en/java/javase/11/docs/api/ are in named modules.

다른 포럼에서 제안한 것처럼 소스 버전을 1.8로 변경하지 않고도 javadoc을 사용할 수 있습니까? JDK v11.0.5를 사용하고 있는데 여전히 문제가 있습니다 (JDK 12+에서도).

편집 :이 오류는 maven에서 시작되었으며 maven-javadoc-plugin에 의해 발생합니다. <source>8</source>구성 에서도 JDK 11 이상에서 작동하지 못했습니다 .



이 질문에 더 자세한 내용이 필요하다고 생각합니다. 메이븐을 사용하십니까? 프로젝트에서 모듈을 사용하거나 사용하려고 했습니까?
rü-

@ rü- 당신 말이 맞아요, 게시물을 업데이트했습니다. 감사합니다. 예, 다중 모듈 설정으로 maven을 사용하고 있습니다.
Rafael Ibasco

답변:


7

OpenJDK 이슈 트래커에서 제안한 바와 같이, 이것은 Javadoc 플러그인에서 소스를 정의 할 때 해결 될 수 있습니다 :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>

3
아마, 당신은 질문을 완전히 읽지 않았을 것입니다. OP는 분명히 언급했다 :Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash

1
그것은 나를 위해 작동합니다. 나는 <configuration> <source> $ {java.version} </ source> </ configuration>을 사용하고 속성에서 java 11입니다. 어떤 이유로 버전을 지정해야했습니다.
ranma2913

Gradle에서 어떻게 할 수 있습니까?
Raffi Khatchadourian

1

javadoc 은 사용하는 패키지, 예를 들어 문서화 된 클래스에 대한 링크를 생성합니다 .../javase/11/docs/api. 귀하의 의견은 이름이없는 모듈에 있지만 대상은 그렇지 않으며 javadoc 은이 두 가지를 결합 할 수 없습니다. package-list또는 element-list파일을 생성 하므로 명명되지 않은 모듈 (패키지)을 명명 된 모듈과 혼합 할 수 없습니다.

javadoc이 생성하려고하는 링크를 제한하는 방법을 찾지 못했습니다. 따라서 자신의 프로젝트에 모듈을 사용해야 할 수도 있습니다. 이것은 javadoc을 행복하게하기 위해 나에게 어리석은 것처럼 보입니다. 나는 이것이 많은 사람들이 Java 8을 고수하는 이유 중 하나 일뿐이라고 생각합니다.


0

중요한 있었다 차단 이후 변화 자바 (9) 도크 렛 API를 사용하는이

JEP 221 : 단순화
된 Doclet API 기존 Doclet API를 기존의 다른 표준 API를 활용하는 새로운 단순화 된 API로 대체합니다. 표준 Doclet은 새로운 Doclet API를 사용하도록 재 작성되었습니다

기존 API 및 이전 표준 Doclet을 사용할 수 있지만 모듈과 같은 새로운 언어 기능을 지원하도록 업데이트되지 않았습니다

이전 API는 com.sun.javadoc 패키지를 사용하고 있습니다

Doclet API (Javadoc API라고도 함)는 클라이언트가 소스에 포함 된 javadoc 주석을 포함하여 프로그램 및 라이브러리의 소스 레벨 구조를 검사 할 수있는 메커니즘을 제공합니다.

새로운 Doclet API를 사용해 볼 수 있습니다 ( 예제 참조).

public class BasicDoclet implements Doclet {
@Override
public void init(Locale locale, Reporter reporter) {  }
@Override
public String getName() {
    // For this doclet, the name of the doclet is just the
    // simple name of the class. The name may be used in
    // messages related to this doclet, such as in command-line
    // help when doclet-specific options are provided.
    return getClass().getSimpleName();
}

4
나는 틀렸을지도 모르지만 여기서 해결책 부분을 실제로 파악할 수는 없었다. 질문을 이미 읽었을 때 .. 누구나 소스 버전을 1.8로 변경하지 않고도 javadoc 작업을 수행 할 수
있습니까

"기존 API 및 기존 표준 Doclet을 사용할 수 있지만 모듈과 같은 새로운 언어 기능을 지원하도록 업데이트되지 않았습니다."따라서 버전 9 이상에서 javadoc이 중단 되었습니까? 또한 내 문제는 maven-javadoc-plugin 에서이 오류를보고하는 maven과 관련이 있습니다. 위에 게시 한 코드가 어떻게 도움이 될지 잘 모르겠습니다.
Rafael Ibasco

1
@RafaelIbasco가 Doclet을 작성하고 있다고 생각하지 않습니다. 이 답변은 도움이되지 않는 것 같습니다.
rü- November
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.