JDEPRSCAN(1) JDK Commands JDEPRSCAN(1)

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

jdeprscan [options] {dir|jar|class}

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

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

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

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

error: cannot find class ...

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

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

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

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

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

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

پویش یا فهرست‌بندی را به APIهایی محدود می‌کند که برای حذف منسوخ شده‌اند. نمی‌توان همراه با مقدار release برابر با 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> است، که یک نام ویژه بوده و به این معنی است که این متد در واقع یک سازنده است. نام ویژه دیگر <clinit> است که نشان‌دهنده یک مقدارده اولیه ایستا برای کلاس است.

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

(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 25.0.4.1