JDK 11+ và 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.

Có ai có thể làm cho javadoc hoạt động mà không phải thay đổi phiên bản nguồn thành 1.8 (như được đề xuất trong các diễn đàn khác) không? Tôi đang sử dụng JDK v11.0.5 và sự cố vẫn còn (cũng với JDK 12+).

Chỉnh sửa: Lỗi này bắt nguồn từ maven và được ném bởi plugin maven-javadoc. Tôi đã không thể làm cho nó hoạt động cho JDK 11+ ngay cả với <source>8</source>cấu hình.



Tôi nghĩ rằng câu hỏi này cần một số chi tiết. Bạn có sử dụng maven không? Bạn có sử dụng hoặc bạn đã thử sử dụng các mô-đun trong dự án của bạn?
rü- 18/11/19

@ rü- bạn nói đúng, tôi đã cập nhật bài viết, cảm ơn. Có, tôi đang sử dụng maven với thiết lập đa mô-đun.
Rafael Ibasco

Câu trả lời:


7

Như được đề xuất trong trình theo dõi vấn đề OpenJDK, điều này có thể được giải quyết bằng cách xác định nguồn trên plugin Javadoc:

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

3
Có lẽ, bạn đã không đọc câu hỏi hoàn toàn. OP đã đề cập rõ ràng:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash

1
nó làm việc cho tôi Tôi sử dụng: <configure> <source> $ {java.version} </ source> </ configure> và trong các thuộc tính đó là java 11. Tôi chỉ phải chỉ định phiên bản vì một số lý do.
ranma2913

Làm thế nào bạn có thể làm điều này trong Gradle?
Raffi Khatchadourian

1

javadoc tạo liên kết đến các gói bạn sử dụng, ví dụ như các lớp được ghi lại .../javase/11/docs/api. Mặc dù các bình luận của bạn nằm trong một mô-đun không tên, nhưng các mục tiêu thì không và javadoc không thể kết hợp cả hai. Nó tạo ra một package-listhoặc một element-listtệp, vì vậy bạn không thể trộn các mô-đun (gói) không tên với các mô-đun được đặt tên.

Tôi đã không tìm ra cách để hạn chế các liên kết mà javadoc cố gắng tạo ra; vì vậy bạn có thể phải sử dụng các mô-đun cho dự án của riêng bạn. Điều này có vẻ vô lý với tôi, chỉ để làm cho javadoc hạnh phúc. Tôi đoán đây chỉ là một trong những lý do mà rất nhiều người dính vào Java 8.


0

Có một ý nghĩa phá vỡ sự thay đổi kể từ Java 9 cho việc sử dụng Doclet API

JEP 221: API Doclet được đơn giản hóa
Thay thế API Doclet cũ bằng API đơn giản hóa mới tận dụng các API hiện có, tiêu chuẩn khác. Doclet tiêu chuẩn đã được viết lại để sử dụng API Doclet mới

API hiện có và doclet tiêu chuẩn cũ có sẵn, nhưng chưa được cập nhật để hỗ trợ các tính năng ngôn ngữ mới, chẳng hạn như các mô-đun

API cũ đang sử dụng gói com.sun.javadoc

API Doclet (còn được gọi là API Javadoc) cung cấp một cơ chế để khách hàng kiểm tra cấu trúc chương trình và thư viện cấp nguồn, bao gồm các nhận xét javadoc được nhúng trong nguồn.

Bạn có thể thử sử dụng API Doclet mới, xem các ví dụ

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
Tôi có thể sai, nhưng tôi thực sự không thể tìm ra phần giải pháp ở đây. Đưa ra câu hỏi đã đọc .. Có ai có thể làm cho javadoc hoạt động mà không phải thay đổi phiên bản nguồn thành 1.8 ..
Naman

"API hiện tại và doclet tiêu chuẩn cũ đã có sẵn, nhưng chưa được cập nhật để hỗ trợ các tính năng ngôn ngữ mới, chẳng hạn như các mô-đun" Vậy điều này có nghĩa là javadoc bị hỏng cho các phiên bản 9 trở lên? Ngoài ra, vấn đề của tôi là với maven báo cáo lỗi này từ maven-javadoc-plugin. Tôi không chắc làm thế nào mã bạn đăng ở trên sẽ giúp.
Rafael Ibasco

1
Tôi không nghĩ @RafaelIbasco đang viết doclets. Câu trả lời này có vẻ không hữu ích.
rü-
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.