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

Adakah yang bisa membuat javadoc berfungsi tanpa harus mengubah versi sumber menjadi 1.8 (seperti yang disarankan di forum lain)? Saya menggunakan JDK v11.0.5 dan masalah ini masih ada (juga dengan JDK 12+).

Sunting: Kesalahan ini berasal dari maven dan dilemparkan oleh maven-javadoc-plugin. Saya belum dapat membuatnya berfungsi untuk JDK 11+ bahkan dengan <source>8</source>konfigurasi.

Rafael Ibasco
sumber
Saya pikir pertanyaan ini membutuhkan lebih banyak detail. Apakah Anda menggunakan pakar? Apakah Anda menggunakan atau sudah mencoba menggunakan modul dalam proyek Anda?
rü-
@ rü- Anda benar, saya telah memperbarui kiriman, terima kasih. Ya, saya menggunakan pakar dengan pengaturan multi-modul.
Rafael Ibasco

Jawaban:

7

Seperti yang disarankan dalam pelacak masalah OpenJDK ini dapat dikerjakan dengan mendefinisikan sumber pada plugin Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Roman Grigoriadi
sumber
3
Mungkin, Anda tidak membaca pertanyaan sepenuhnya. OP telah dengan jelas menyebutkan:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash
1
ini bekerja untuk saya. Saya menggunakan: <configuration> <source> $ {java.version} </source> </configuration> dan pada properti itu java 11. Saya hanya harus menentukan versi karena suatu alasan.
ranma2913
Bagaimana Anda bisa melakukan ini di Gradle?
Raffi Khatchadourian
1

javadoc menghasilkan tautan ke paket yang Anda gunakan, misalnya ke kelas yang didokumentasikan .../javase/11/docs/api. Meskipun komentar Anda dalam modul yang tidak disebutkan namanya, targetnya tidak, dan javadoc tidak dapat menggabungkan keduanya. Ini menghasilkan salah satu package-listatau element-listfile, sehingga Anda tidak dapat mencampur modul (paket) yang tidak disebutkan namanya dengan modul bernama.

Saya tidak menemukan cara untuk membatasi tautan yang coba diproduksi oleh javadoc; jadi Anda mungkin harus menggunakan modul untuk proyek Anda sendiri. Bagi saya ini konyol, hanya untuk membuat javadoc senang. Saya kira ini hanyalah salah satu alasan mengapa begitu banyak orang tetap menggunakan Java 8.

rü-
sumber
0

Ada signifikan breaking perubahan sejak Java 9 untuk menggunakan Doclet API

JEP 221: API Doclet Sederhana
Menggantikan lama dengan API sederhana yang memanfaatkan standar lain, API yang ada. Doclet standar telah ditulis ulang untuk menggunakan Doclet API baru

API yang ada dan dokumen standar lama tersedia, tetapi belum diperbarui untuk mendukung fitur bahasa baru, seperti modul

API lama menggunakan paket com.sun.javadoc

Doclet API (juga disebut Javadoc API) menyediakan mekanisme bagi klien untuk memeriksa struktur tingkat sumber program dan perpustakaan, termasuk komentar javadoc yang tertanam dalam sumber.

Anda dapat mencoba menggunakan API Doclet baru, lihat contoh

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();
}
pengguna7294900
sumber
4
Saya mungkin salah, tetapi saya tidak dapat menemukan bagian solusinya di sini. Mengingat pertanyaan sudah dibaca .. Adakah yang bisa membuat javadoc berfungsi tanpa harus mengubah versi sumber menjadi 1.8 ..
Naman
"API yang ada dan doclet standar lama tersedia, tetapi belum diperbarui untuk mendukung fitur bahasa baru, seperti modul" Jadi apakah ini berarti javadoc rusak untuk versi 9 dan di atas? Juga, masalah saya adalah dengan maven melaporkan kesalahan ini dari maven-javadoc-plugin. Saya tidak yakin bagaimana kode yang Anda posting di atas akan membantu.
Rafael Ibasco
1
Saya tidak berpikir @RafaelIbasco sedang menulis dokumen kecil. Jawaban ini sepertinya tidak membantu.
rü-