| JDEPRSCAN(1) | JDK Commands | JDEPRSCAN(1) |
نام (NAME)
jdeprscan - ابزار تحلیل ایستا برای بررسی و پویش استفاده از المانهای منسوخشده در کلاسهای جاوا (نسخه ۱۷)
خلاصه دستور (SYNOPSIS)
jdeprscan [گزینهها] {dir|jar|class}
- گزینهها
- بخش گزینههای دستور jdeprscan را ببینید.
- dir|jar|class
- دستور jdeprscan هر آرگومان ورودی را برای یافتن موارد استفاده از APIهای منسوخشده (deprecated) پویش میکند. آرگومانها میتوانند یکی از موارد زیر باشند:
- •
- dir: دایرکتوری (پوشه)
- •
- jar: فایل JAR
- •
- class: نام کلاس یا فایل کلاس
نام کلاس باید از نقطه (.) به عنوان جداکننده استفاده کند. به عنوان مثال:
java.lang.Thread
برای کلاسهای تو در تو (nested classes)، باید از کاراکتر جداکننده علامت دلار $ استفاده شود. به عنوان مثال:
java.lang.Thread$State
فایل کلاس نیز میتواند مستقیماً نامگذاری شود. به عنوان مثال:
build/classes/java/lang/Thread$State.class
توضیحات (DESCRIPTION)
ابزار jdeprscan یک ابزار تحلیل ایستا ارائه شده توسط JDK است که یک فایل JAR یا مجموعهای از فایلهای کلاس را برای یافتن استفاده از المانهای منسوخشده API پویش میکند. APIهای منسوخشده شناساییشده توسط ابزار jdeprscan فقط مواردی هستند که توسط جاوا SE تعریف شدهاند. APIهای منسوخشده که توسط کتابخانههای شخص ثالث (third-party) تعریف شدهاند گزارش نمیشوند.
برای پویش یک فایل JAR یا مجموعهای از فایلهای کلاس، ابتدا باید اطمینان حاصل کنید که تمام کلاسهایی که کلاسهای مورد بررسی به آنها وابسته هستند، در مسیر کلاس (class path) موجود باشند. مسیر کلاس را با استفاده از گزینه --class-path که در بخش گزینههای دستور jdeprscan شرح داده شده است، تنظیم کنید. معمولاً از همان مسیر کلاسی استفاده میکنید که هنگام اجرای برنامه خود به کار میبرید.
اگر jdeprscan نتواند تمام کلاسهای وابسته را پیدا کند، برای هر کلاسی که مفقود است یک پیام خطا تولید میکند. این پیامهای خطا معمولاً به این شکل هستند:
error: cannot find class ...
در صورت بروز این خطاها، باید مسیر کلاس را به گونهای تنظیم کنید که شامل تمامی کلاسهای وابسته باشد.
گزینههای دستور JDEPRSCAN (OPTIONS FOR THE JDEPRSCAN COMMAND)
گزینههای زیر در دسترس هستند:
- --class-path path
- مسیر جستجو را برای تفکیک و یافتن کلاسهای وابسته فراهم میکند.
مقدار path میتواند یک مسیر جستجو متشکل از یک یا چند دایرکتوری باشد که با جداکننده مسیر مخصوص سیستمعامل از یکدیگر جدا شدهاند. به عنوان مثال:
- •
- لینوکس و macOS:
--class-path /some/directory:/another/different/dir
نکته:
در ویندوز، از نقطه ویرگول (;) به عنوان جداکننده به جای دو نقطه (:) استفاده کنید.
- •
- ویندوز:
--class-path \some\directory;\another\different\dir
- --for-removal
- پویش یا فهرستبندی را فقط به APIهایی محدود میکند که برای حذف در آینده نشانهگذاری شدهاند (deprecated for removal). همراه با نسخههای انتشار 6، 7 یا 8 قابل استفاده نیست.
- --full-version
- رشته نسخه کامل ابزار را چاپ میکند.
- --help یا -h
- یک پیام راهنمای کامل را چاپ میکند.
- --list یا -l
- مجموعه APIهای منسوخشده را چاپ میکند. هیچ پویشی انجام نمیشود، بنابراین نباید هیچ آرگومان دایرکتوری، فایل jar یا کلاسی ارائه شود.
- --release 6|7|8|9
- نسخه انتشار جاوا SE را مشخص میکند که مجموعه APIهای منسوخشده را برای پویش فراهم میآورد.
- --verbose یا -v
- خروجی پیامهای اضافی را در طول پردازش فعال میکند.
- --version
- رشته نسخه مختصر ابزار را چاپ میکند.
نمونه خروجی JDEPRSCAN (EXAMPLE OF JDEPRSCAN OUTPUT)
فایل 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
نکته:
نام کلاس با استفاده از نام باینری جدا شده با اسلش، طبق توضیحات بخش 4.2.1 در مشخصات ماشین مجازی جاوا (JVMS) مشخص شده است. این همان قالبی است که در داخل فایلهای کلاس استفاده میشود.
مورد منسوخشدهای که استفاده میکند، متدی در کلاس java.lang.Double است.
نام متد منسوخشده <init> است، که یک نام ویژه به معنای سازنده (constructor) بودن متد است. یک نام ویژه دیگر <clinit> است که نشاندهنده مقداردهی اولیه ایستا در کلاس (class static initializer) میباشد.
سایر متدها تنها با نام متد خود فهرست میشوند. به دنبال نام متد، لیست آرگومانها و نوع بازگشتی قرار میگیرد:
(D)V
این نشان میدهد که متد تنها یک مقدار double (یک نوع اولیه یا primitive) دریافت کرده و 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 میتواند وابسته به نسخه باشد (JDEPRSCAN ANALYSIS CAN BE VERSION-SPECIFIC)
شما میتوانید از 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
| 2021 | JDK 17 |