Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โหมดการคอมไพล์ของโมดูลใน Java 9 มีกี่แบบ

Module เป็นคอนเทนเนอร์ของแพ็กเกจ แต่ละโมดูลมี module descriptor รวมถึง module name module dependencies หมายถึงชื่อโมดูลอื่นที่พึ่งพา และชื่อแพ็กเกจที่ export ใช้ได้เฉพาะโมดูลที่พึ่งพา

module com.tutorialspoint.app {
    /** Modules upon which this module depends */
    requires com.tutorialspoint.services;
    
    /** Packages exposed by this module */
    exports com.tutorialspoint.app.util;
}

มี 3 โหมดการคอมไพล์ที่ Java 9 Module ให้มา: Legacy mode Single module mode และ Multi-module mode

โหมดการคอมไพล์ของโมดูล

1. Legacy Mode

  • เปิดใช้งานเมื่อ compilation environment (จาก --source, --target, --release) น้อยกว่าหรือเท่ากับ 8
  • คอมไพเลอร์ทำงานเหมือน Java 8 (หรือก่อนหน้า) ใช้ traditional options (classpath) แทน module options (--module-path)
  • ในโหมดนี้ โค้ดรันเป็น unnamed module ระหว่าง runtime

2. Single Module Mode

  • เปิดใช้งานเมื่อ compilation environment เป็น 9 หรือใหม่กว่า และ ไม่ได้ใช้ --module-source-path
  • โค้ดจัดโครงสร้างแบบ package hierarchy แบบเดิม มี module-info.java รันบน modulepath ไม่ใช่ classpath
  • วาง module-info.java โดยตรงใต้ src directory ไม่สามารถมี module-info.java หลายไฟล์ใน tree เดียวกันได้ → เรียกว่า single module mode

3. Multi-Module Mode

  • เปิดใช้งานเมื่อ compilation environment เป็น 9 หรือใหม่กว่า และ ใช้ --module-source-path
  • วางหลายโมดูลใต้ source directory เดียวกัน
  • ตอน compile ระบุ main source directory ด้วย --module-source-path
  • Source tree ของแต่ละโมดูลวางใน subdirectory ของตัวเองภายใต้ main source directory

ตัวอย่างคำสั่งคอมไพล์

Single Module Mode

javac -d out --module-source-path src $(find src -name "*.java")

Multi-Module Mode

# โครงสร้าง:
# src/
#   moduleA/
#     module-info.java
#     com/...
#   moduleB/
#     module-info.java
#     com/...

javac -d out --module-source-path src $(find src -name "*.java")

สรุป

โหมดVersion--module-source-pathModule DescriptorsRuntime
Legacy≤ 8ไม่ใช้ไม่มีUnnamed module
Single Module≥ 9ไม่ใช้1 ไฟล์Named module
Multi-Module≥ 9ใช้หลายไฟล์Named modules