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