jdeprscan tool ใช้สำหรับ static analysis ของ classes, archives, และ folders เพื่อหา API elements ที่ถูก mark ว่า deprecated Tool นี้ตรวจจับเฉพาะ items ที่ mark deprecated ใน Java SE ไม่ตรวจจับใน libraries อื่น ทุก classes ที่คลาสที่ตรวจสอบ depend ต้องมีอยู่ตอน compiling หรือ running ถ้า ขาด dependent class tool จะแสดงรายการ unavailable classes พร้อม error: cannot find a class
Syntax
jdeprscan [options] {dir | jar | class}
คำสั่ง jdeprscan รองรับโดย module file jmods\jdk.jdeps.jmod ซึ่ง link เข้า lib\modules JImage file ใน JDK 9, 10, และ 11
Options สำหรับ jdeprscan tool
Options:
--class-path PATH Search path for dependent classes
--for-removal Limit to APIs deprecated for removal
--full-version Print full version string
-?, -h, --help Print help message
-l, --list List deprecated APIs (no scanning)
--release 6|7|8|9|10|11 Java SE release for deprecated API set
-v, --verbose Verbose output
--version Print abbreviated version
การใช้งานทั่วไป
1. สแกน Class File
jdeprscan MyClass.class
jdeprscan --verbose MyClass.class
2. สแกน JAR File
jdeprscan myapp.jar
jdeprscan --for-removal myapp.jar # เฉพาะที่ deprecated for removal
3. สแกน Directory (package hierarchy)
jdeprscan --class-path libs/* com/myapp
4. แสดง Deprecated APIs ทั้งหมดของ Release
jdeprscan --list --release 9
jdeprscan --list --release 11 --for-removal
5. ใช้กับ Module
jdeprscan --module-path mods --module com.myapp
ตัวอย่าง Output
C:\>jdeprscan --release 9 myapp.jar
myapp.jar -> com.myapp.LegacyClass
Method deprecatedMethod()Ljava/lang/String; deprecated since 9
Field deprecatedField deprecated since 1.1
C:\>jdeprscan --list --release 9
java.lang.Thread stop() deprecated since 1.2 forRemoval=true
java.lang.Thread suspend() deprecated since 1.2 forRemoval=true
java.lang.Thread resume() deprecated since 1.2 forRemoval=true
java.lang.System runFinalizersOnExit(boolean) deprecated since 1.2 forRemoval=true
java.security.Security getPolicy() deprecated since 9
...
ความแตกต่าง: Deprecated vs For Removal
| ประเภท | @Deprecated | @Deprecated(forRemoval=true) |
|---|---|---|
| ความหมาย | ไม่ควรใช้ แต่อาจคงอยู่ | จะถูกลบใน version ถัดไป |
| jdeprscan default | รวม | รวม |
| jdeprscan --for-removal | ไม่รวม | รวมเฉพาะตัวนี้ |
ข้อจำกัด
- Static analysis only - ไม่จับ dynamic/reflection usage
- Java SE APIs เท่านั้น - ไม่รวม third-party libraries
- ต้องมี dependent classes ครบ
- ไม่วิเคราะห์ source code - เฉพาะ bytecode