2016-08-01 3 views
2

내 자신의 Java 8 Stream 구현을 작성 중이며 원래 java.util.stream.Stream 인터페이스의 Javadocs를 상속 받기를 원합니다. 그러나 나는 그것을 작동시킬 수 없다. 생성 된 Javadoc은 확장 된 Stream 인터페이스의 문서가 아닌 내 설명서 만 표시합니다.Java API 코어 클래스 용 maven-javadoc-plugin 및 inheritDoc

예를 들어,이 메소드의 javadoc에는 "추가 정보"라는 텍스트 만 있지만 Stream 인터페이스의 설명서는 포함되어 있지 않습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>2.10.1</version> 
    <configuration> 
    <links> 
     <link>http://docs.oracle.com/javase/8/docs/api/</link> 
    </links> 
    </configuration> 
</plugin> 

내가이 구성에서 뭔가를 그리워 수행

/** 
* {@inheritDoc} 
* Some additional information. 
*/ 
@Override 
public Stream<T> filter(Predicate<? super T> predicate) { 
    // ... my stream implementation... 
} 

이것은 받는다는-javadoc에 플러그인의 내 구성입니다? maven-compiler-plugin에서 sourcetarget을 1.8로 설정했습니다. 따라서 maven-javadoc-plugin의 설명서에 따르면 Java API가 자동으로 감지되어야합니다.

Stack Overflow에 similar question이 있었지만 거기에 대한 답변이 도움이되지 않습니다.

답변

3

예상대로 javadoc은 소스 경로 내에있는 클래스의 주석 만 복사합니다. Method Comment Inheritance에서 :

참고 : 문서 주석 복사 할 수있을 때까지 상속 방법 소스 파일이 -sourcepath 옵션에 의해 지정된 경로에 있어야합니다. 클래스도 패키지도 커맨드 라인에서 전달 될 필요가 없다. 이것은 클래스가 문서화 된 클래스 여야 만했던 Release 1.3.n 및 이전 릴리스와는 대조적입니다.

그러나 JDK의 소스는 소스 경로에 있지 않으므로 {@inheritDoc}은 복사하지 않습니다. 명시 적으로 추가해야합니다. Javadoc FAQ has this entry : J2SE에서

상속 댓글 - 당신의 코드는 자동으로 J2SE의 인터페이스와 클래스 의견을 상속 할 수 있습니다. SDK와 함께 제공되는 src.zip 파일의 압축을 풀면 (모든 소스 파일이 포함되어 있지는 않지만) -sourcepath에 경로를 추가 할 수 있습니다. 코드에서 javadoc이 실행되면 필요에 따라 해당 소스 파일의 문서 주석을로드합니다. 예를 들어, 코드의 클래스가 java.lang.Comparable을 구현하는 경우 구현 한 compareTo(Object) 메서드는 java.lang.Comparable의 의사 설명을 상속합니다.

  1. 이 JDK의 소스를 찾아 어딘가에 압축을 풉니 다 :

그래서, 그것이 작동되도록합니다.

  • sourcepath 매개 변수를 사용하여 해당 소스를 추가하도록 maven-javadoc-plugin을 구성하십시오.
  • 위와 같이 JDK 자체의 Javadoc도 생성 할 것이므로 불필요합니다 (상속 받기만 함). subpackages을 사용하여 패키지 만 지정할 수 있습니다. 또는 excludePackageNames을 사용하여 JDK 패키지를 제외 할 수 있습니다.
  • JDK (적어도 Oracle JDK)는 새로운 Javadoc 항목 (예 : @apiNote, @implSpec@implNote)도 사용합니다. 이는 tags 매개 변수로 추가해야하는 맞춤 태그입니다. 여기

  • 는 JDK 소스에 대한 경로가 /path/to/jdk/sources가 (당신은 또한 환경 변수, 프로파일 설정 속성 등을 사용할 수있다)하고 자신의 소스 파일이 패키지 my.package에 모두있는 샘플 구성입니다 :

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-javadoc-plugin</artifactId> 
        <version>2.10.1</version> 
        <configuration> 
         <sourcepath>/path/to/jdk/sources:${basedir}/src/main/java</sourcepath> 
         <subpackages>my.package</subpackages> 
         <tags> 
          <tag> 
           <name>apiNote</name> 
           <placement>a</placement> 
           <head>API Note:</head> 
          </tag> 
          <tag> 
           <name>implSpec</name> 
           <placement>a</placement> 
           <head>Implementation Requirements:</head> 
          </tag> 
          <tag> 
           <name>implNote</name> 
           <placement>a</placement> 
           <head>Implementation Note:</head> 
          </tag> 
         </tags> 
        </configuration> 
    </plugin> 
    

    {@inheritDoc}를 해결 올바르게 mvn javadoc:javadoc으로 예를 들어, 자바 독을합니다 생성.

    +0

    감사합니다. 나는 또한'$ {java.home} /../ src.zip'에'system' 범위 종속성을 선언함으로써 maven 빌드 중에'src.zip'을 직접 추출 할 수있었습니다. 이 의존성을 가지고 필자가 필요로하는 패키지에 include와 함께 maven-dependency-plugin의 unpack-dependencies 목표를 사용할 수 있습니다. 'java.util' 패키지 (필자는 더 이상 필요하지 않습니다)의 경우, 이것은 단지 몇 초 밖에 걸리지 않습니다. –