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

ความสำคัญของ jdeps tool ใน Java 9

jdeps เป็น Java Class Dependency Analyzer tool แบบ command-line ใช้แสดง package-level หรือ class-level dependencies ของ Java class files ที่กำหนด Input classes สามารถระบุเป็น path ไปยัง .class file, directory, jar file, หรือ fully qualified class name

jdeps รวมอยู่ใน JDK ตั้งแต่ JDK 8 อยู่ที่ %java_home%\bin\jdeps.exe หากมี %java_home%\bin ใน PATH สามารถรัน jdeps --help ได้

ตัวเลือกทั้งหมด (จาก jdeps --help)

Usage: jdeps  
 can be a pathname to a .class file, a directory, a JAR file.

Options:
  -dotoutput , --dot-output     Destination directory for DOT file output
  -s, -summary                            Print dependency summary only
  -v, -verbose                            Print all class level dependencies
  -verbose:package                        Print package-level dependencies
  -verbose:class                          Print class-level dependencies
  -apionly, --api-only                    Restrict analysis to APIs only
  -jdkinternals, --jdk-internals          Find dependencies on JDK internal APIs
  --check [,...]  Analyze module dependencies
  --generate-module-info             Generate module-info.java for JARs
  --generate-open-module             Generate module-info.java for open modules
  --list-deps                             List dependencies and JDK internal API usage
  --list-reduced-deps                     Same as --list-deps without implied reads
  -cp, -classpath, --class-path     Specify where to find class files
  --module-path              Specify module path
  --upgrade-module-path      Specify upgrade module path
  --system                     Specify alternate system module path
  --add-modules [,...]       Add modules to root set
  -m, --module               Specify root module
  --multi-release                Version for multi-release jars (>=9 or base)
  -p, --package                      Find dependencies matching package
  -e, --regex                      Find dependencies matching pattern
  --require                  Find dependencies matching module
  -f, --filter                     Filter dependencies
  -filter:package                         Filter within same package (default)
  -filter:archive                         Filter within same archive
  -filter:module                          Filter within same module
  -filter:none                            No filtering
  -include                         Restrict analysis to matching classes
  -P, -profile                            Show profile containing a package
  -R, -recursive                          Recursively traverse runtime dependencies
  -I, --inverse                           Analyze inverse dependencies
  --compile-time                          Compile-time view of transitive dependencies
  -q, -quiet                              Quiet mode
  -version, --version                     Version information

การใช้งานทั่วไป

1. วิเคราะห์ JAR file

jdeps myapp.jar
jdeps -verbose myapp.jar          # class-level
jdeps -verbose:package myapp.jar  # package-level

2. หา JDK Internal API Usage

jdeps --jdk-internals myapp.jar
# หรือ
jdeps -jdkinternals myapp.jar

3. Generate module-info.java

jdeps --generate-module-info output_dir myapp.jar
jdeps --generate-open-module output_dir myapp.jar

4. Module Analysis

jdeps --check mymodule --module-path mods
jdeps --list-deps --module-path mods --module mymodule

5. Dependency Graph (DOT format)

jdeps --dot-output dots myapp.jar
# แล้วใช้ GraphViz: dot -Tpng dots/summary.dot -o deps.png

ตัวอย่าง Output

C:\>jdeps -verbose:package myapp.jar
myapp.jar -> java.base
myapp.jar -> java.logging
com.myapp.Main -> java.io
com.myapp.Main -> java.util
com.myapp.service -> com.myapp.model
com.myapp.service -> java.sql

ประโยชน์หลัก

  • Migration to Modules: ช่วยสร้าง module-info.java อัตโนมัติ
  • Internal API Detection: หาการใช้ JDK internal APIs ที่จะถูกบล็อกในอนาคต
  • Dependency Visualization: สร้างกราฟ dependencies ด้วย DOT format
  • Modularity Analysis: ตรวจสอบ module dependencies, unused exports
  • Classpath Cleanup: หา unused dependencies

ข้อจำกัด

  • Static analysis เท่านั้น - ไม่ตรวจสอบ reflection, dynamic loading
  • ต้องมี dependencies ทั้งหมดอยู่ใน classpath/module-path
  • Multi-release JAR ต้องระบุ --multi-release version