JDEPRSCAN(1) دستورات JDK JDEPRSCAN(1)

jdeprscan - ابزار تحلیل ایستا برای بررسی و پویش فایل JAR (یا مجموعه‌ای دیگر از فایل‌های کلاس) جهت یافتن موارد استفاده از عناصر منسوخ‌شده API

jdeprscan [گزینه‌ها] {dir|jar|class}

گزینه‌ها
بخش گزینه‌های دستور jdeprscan را ببینید.
دستور jdeprscan هر آرگومان را برای موارد استفاده از APIهای منسوخ‌شده (deprecated) پویش می‌کند. آرگومان‌ها می‌توانند شامل موارد زیر باشند:
  • dir: دایرکتوری
  • jar: فایل JAR
  • class: نام کلاس یا فایل کلاس نام کلاس باید از نقطه (.) به عنوان جداکننده استفاده کند. برای نمونه: java.lang.Thread برای کلاس‌های تودرتو (nested)، باید از نویسه جداکننده علامت دلار $ استفاده شود. برای نمونه: java.lang.Thread$State یک فایل کلاس نیز می‌تواند مشخص شود. برای نمونه: build/classes/java/lang/Thread$State.class

ابزار jdeprscan یک ابزار تحلیل ایستا ارائه‌شده توسط JDK است که یک فایل JAR یا مجموعه‌ای دیگر از فایل‌های کلاس را برای یافتن موارد استفاده از عناصر منسوخ‌شده API پویش می‌کند. APIهای منسوخ‌شده شناسایی‌شده توسط ابزار jdeprscan فقط مواردی هستند که توسط Java SE تعریف شده‌اند. APIهای منسوخ‌شده تعریف‌شده توسط کتابخانه‌های شخص ثالث (Third-party) گزارش نمی‌شوند.

برای پویش یک فایل JAR یا مجموعه‌ای از فایل‌های کلاس، ابتدا باید اطمینان حاصل کنید که تمام کلاس‌هایی که کلاس‌های تحت پویش به آن‌ها وابسته‌اند در مسیر کلاس (class path) وجود دارند. مسیر کلاس را با استفاده از گزینه --class-path شرح داده شده در بخش گزینه‌های دستور jdeprscan تنظیم کنید. به طور معمول، شما از همان مسیر کلاسی استفاده می‌کنید که هنگام فراخوانی برنامه خود به کار می‌برید.

اگر jdeprscan نتواند تمام کلاس‌های وابسته را پیدا کند، یک پیام خطا برای هر کلاسی که مفقود است تولید خواهد کرد. این پیام‌های خطا معمولاً به این صورت هستند:

error: cannot find class ...

در صورت بروز این خطاها، باید مسیر کلاس را به گونه‌ای تنظیم کنید که شامل تمام کلاس‌های وابسته باشد.

گزینه‌های زیر در دسترس هستند:

یک مسیر جستجو برای یافتن و حل وابستگی‌های کلاس‌ها فراهم می‌کند.
path می‌تواند یک مسیر جستجو باشد که شامل یک یا چند دایرکتوری است که با جداکننده مسیر مخصوص سیستم‌عامل از هم جدا شده‌اند. برای نمونه:
•
لینوکس و macOS:

--class-path /some/directory:/another/different/dir

نکته: در ویندوز، از یک سمیکالن (;) به عنوان جداکننده به جای دونقطه (:) استفاده کنید.
•
ویندوز:

--class-path \some\directory;\another\different\dir

پویش یا فهرست‌کردن را به APIهایی محدود می‌کند که برای حذف منسوخ شده‌اند (deprecated for removal). نمی‌توان با مقدار انتشار 6، 7 یا 8 استفاده کرد.
رشته نسخه کامل ابزار را چاپ می‌کند.
پیام راهنمای کامل را چاپ می‌کند.
مجموعه APIهای منسوخ‌شده را چاپ می‌کند. هیچ پویشی انجام نمی‌شود، بنابراین نباید هیچ آرگومان دایرکتوری، jar یا کلاس ارائه شود.
انتشار Java SE را مشخص می‌کند که مجموعه APIهای منسوخ‌شده را برای پویش فراهم می‌آورد.
خروجی پیام‌های تکمیلی و تفصیلی را در طول پردازش فعال می‌کند.
رشته نسخه مختصر ابزار را چاپ می‌کند.

فایل JAR برای این کتابخانه نامی شبیه به commons-math3-3.6.1.jar خواهد داشت. برای پویش این فایل JAR جهت بررسی استفاده از APIهای منسوخ‌شده، دستور زیر را اجرا کنید:

jdeprscan commons-math3-3.6.1.jar

این دستور چندین خط خروجی تولید می‌کند. برای نمونه، یک خط از خروجی ممکن است چنین باشد:

class org/apache/commons/math3/util/MathUtils uses deprecated method java/lang/Double::<init>(D)V

نکته:

نام کلاس با استفاده از نام باینری جداشده با اسلش، مطابق آنچه در JVMS 4.2.1 شرح داده شده، مشخص می‌شود. این قالبی است که به صورت درونی در فایل‌های کلاس استفاده می‌شود.

عنصر API منسوخ‌شده‌ای که استفاده می‌کند، متدی روی کلاس java.lang.Double است.

نام متد منسوخ‌شده <init> است که یک نام ویژه بوده و نشان می‌دهد متد در واقع یک سازنده (constructor) است. یک نام ویژه دیگر <clinit> است که یک مقداردهنده اولیه ایستا (static initializer) برای کلاس را نشان می‌دهد.

سایر متدها فقط با نام متدشان فهرست می‌شوند. به دنبال نام متد، فهرست آرگومان‌ها و نوع بازگشتی قرار دارد:

(D)V

این نشان می‌دهد که فقط یک مقدار double (نوع اولیه) دریافت می‌کند و void بازمی‌گرداند. انواع آرگومان و بازگشتی می‌توانند مبهم و رمزی به نظر برسند. برای نمونه، خط دیگری از خروجی ممکن است به این صورت باشد:

class org/apache/commons/math3/util/Precision uses deprecated method java/math/BigDecimal::setScale(II)Ljava/math/BigDecimal;

در این خط خروجی، متد منسوخ‌شده روی کلاس java.math.BigDecimal قرار دارد و نام متد setScale() است. در این مورد، (II) به این معنی است که دو آرگومان int دریافت می‌کند. عبارت Ljava/math/BigDecimal; بعد از پرانتزها نشان می‌دهد که ارجاعی به java.math.BigDecimal بازمی‌گرداند.

شما می‌توانید از jdeprscan نسبت به سه انتشار قبلی JDK استفاده کنید. برای نمونه، اگر در حال اجرای JDK 9 هستید، می‌توانید برنامه را در برابر JDK 8، 7 و 6 بررسی کنید.

به عنوان نمونه، به این قطعه کد نگاه کنید:

public class Deprecations {
   SecurityManager sm = new RMISecurityManager();    // deprecated in 8
   Boolean b2 = new Boolean(true);          // deprecated in 9
}

این کلاس کامل بدون هیچ هشداری در JDK 7 کامپایل می‌شود.

اگر jdeprscan را روی سیستمی با JDK 9 اجرا کنید، خروجی زیر را خواهید دید:

$ jdeprscan --class-path classes --release 7 example.Deprecations
(no output)

دستور jdeprscan را با مقدار انتشار 8 اجرا کنید:

$ jdeprscan --class-path classes --release 8 example.Deprecations
class example/Deprecations uses type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated

دستور jdeprscan را روی JDK 9 اجرا کنید:

$ jdeprscan --class-path classes example.Deprecations
class example/Deprecations uses type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated
class example/Deprecations uses method java/lang/Boolean <init> (Z)V deprecated
2026 JDK 26.0.2.1