[java] JDK 11 이상 및 Javadoc

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 이상에서 작동하지 못했습니다 .



답변

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

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


답변

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

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


답변

중요한 있었다 차단 이후 변화 자바 (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();
}

답변