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.

มีใครสามารถทำให้ javadoc ทำงานได้โดยไม่ต้องเปลี่ยนเวอร์ชั่นต้นฉบับเป็น 1.8 (ตามที่แนะนำในฟอรัมอื่น) ฉันใช้ JDK v11.0.5 และยังมีปัญหาอยู่ (เช่นเดียวกับ JDK 12+)

แก้ไข: ข้อผิดพลาดนี้เกิดจาก maven และโยนโดย maven-javadoc-plugin ฉันไม่สามารถใช้งานกับ JDK 11+ ได้แม้ว่าจะมีการ<source>8</source>กำหนดค่าก็ตาม



ฉันคิดว่าคำถามนี้ต้องการรายละเอียดเพิ่มเติม คุณใช้ maven หรือไม่ คุณใช้หรือเคยลองใช้โมดูลในโครงการของคุณหรือไม่?
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

มีนัยสำคัญคือการทำลายการเปลี่ยนแปลงตั้งแต่Java 9สำหรับการใช้ doclet 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
ฉันอาจจะผิด แต่ฉันไม่สามารถหาคำตอบได้ที่นี่ ให้คำถามอ่านแล้ว .. มีใครสามารถทำงาน javadoc โดยไม่ต้องเปลี่ยนรุ่นแหล่งที่มาเป็น 1.8 ..
Naman

"API ที่มีอยู่และ doclet มาตรฐานเก่าพร้อมใช้งานแล้ว แต่ยังไม่ได้รับการอัปเดตเพื่อรองรับคุณสมบัติภาษาใหม่เช่นโมดูล" ดังนั้นนี่หมายความว่า javadoc เสียสำหรับรุ่น 9 และสูงกว่า นอกจากนี้ปัญหาของฉันคือเมื่อ maven รายงานข้อผิดพลาดนี้จาก maven-javadoc-plugin ฉันไม่แน่ใจว่ารหัสที่คุณโพสต์ด้านบนจะช่วยได้อย่างไร
Rafael Ibasco

1
ฉันไม่คิดว่า @RafaelIbasco กำลังเขียนเอกสาร คำตอบนี้ดูเหมือนจะไม่เป็นประโยชน์
rü-
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.