JNATIVESCAN(1) JDK Commands JNATIVESCAN(1)

jnativescan - پویشگر کدهای بومی و کتابخانه‌های نیتیو در جاوا (نسخه ۲۶)

jnativescan [گزینه‌ها]

گزینه‌ها
بخش گزینه‌ها (OPTIONS) را ببینید.

ابزار jnativescan یک ابزار تحلیل ایستا است که توسط JDK ارائه شده و یک یا چند فایل JAR را برای یافتن موارد استفاده از قابلیت‌های بومی (native)، مانند فراخوانی متدهای محدودشده یا اعلان متدهای native، پویش می‌کند.

دستور jnativescan پیکربندی مسیر کلاس (class path) و مسیر ماژول (module path) زمان اجرا، و همچنین مجموعه‌ای از ماژول‌های ریشه و یک نسخه انتشار هدف را می‌پذیرد. این ابزار فایل‌های jar موجود در مسیرهای کلاس و ماژول را پویش کرده و استفاده از قابلیت‌های بومی را یا در یک ساختار درختی (که کلاس‌ها و متدهای فراخواننده را نیز مشخص می‌کند) و یا در صورت تعیین فلگ --print-native-access به صورت فهرستی از نام‌های ماژول‌ها گزارش می‌دهد.

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

برای تعیین فهرستی از مسیرهای اشاره‌کننده به فایل‌های jar جهت پویش استفاده می‌شود.

تمامی فایل‌های jar مشخص‌شده از طریق این فهرست پویش خواهند شد. اگر یک فایل jar حاوی ویژگی Class-Path در مانیفست خود باشد، فایل‌های jar فهرست‌شده در آن نیز پویش خواهند شد. فایل‌های jar ذکرشده در ویژگی مانیفست Class-Path که یافت نشوند، نادیده گرفته می‌شوند. با تمام فایل‌های jar یافت‌شده طوری رفتار می‌شود که گویی متعلق به ماژول بدون نام (unnamed module) هستند.

برای تعیین فهرستی از مسیرهای اشاره‌کننده به فایل‌های jar یا دایرکتوری‌های حاوی فایل‌های jar که ابزار می‌تواند برای یافتن ماژول‌های نیازمند پویش از آن‌ها استفاده کند، به کار می‌رود. فهرست فایل‌های jar که پویش خواهند شد به گزینه --add-modules بستگی دارد.
برای هر دو گزینه --class-path و --module-path، مقدار path باید یک مسیر جستجو متشکل از یک یا چند فایل jar باشد که با جداکننده مسیر مخصوص سیستم‌عامل از یکدیگر جدا شده‌اند. برای مثال:
•
لینوکس و مک‌او‌اس (macOS):

--class-path /some/foo.jar:/another/different/bar.jar

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

--class-path C:\some\foo.jar;C:\another\different\bar.jar

برای تعیین فهرستی از نام‌های ماژول‌ها که با کاما از هم جدا شده‌اند استفاده می‌شود و ماژول‌های ریشه را جهت پویش مشخص می‌کند. تمامی ماژول‌های ریشه و همچنین هر ماژولی که به آن‌ها وابسته باشند پویش خواهند شد. این شامل وابستگی‌ها به پیاده‌سازی‌های سرویس مشخص‌شده از طریق دستورالعمل uses در فایل module-info یک ماژول نیز می‌شود. تمام ماژول‌های یافت‌شده در مسیر ماژول که پیاده‌سازی چنین سرویسی را ارائه می‌دهند نیز پویش خواهند شد.
برای تعیین نسخه Java SE که مجموعه متدهای محدودشده جهت پویش را مشخص می‌کند، استفاده می‌شود. برای فایل‌های jar چندنسخه‌ای (multi-release)، این گزینه همچنین نسخه فایل کلاسی را که باید از jar بارگذاری شود مشخص می‌کند. این گزینه باید روی نسخه زمان اجرایی تنظیم شود که برنامه در نهایت قرار است تحت آن اجرا گردد. اگر این فلگ حذف شود، نسخه jnativescan به عنوان نسخه انتشار استفاده می‌شود که همان نسخه JDK متعلق به ابزار است.
به جای ساختار درختی پیش‌فرض، فهرستی از نام‌های ماژول‌هایی را که از قابلیت‌های بومی استفاده می‌کنند و با کاما از هم جدا شده‌اند چاپ می‌کند.
پیام راهنمای کامل را نمایش می‌دهد.
رشته کوتاه نسخه ابزار را چاپ می‌کند.

دستور jnativescan پیکربندی زمان اجرا را در قالب مسیر کلاس، مسیر ماژول، مجموعه‌ای از ماژول‌های ریشه و نسخه انتشار هدف می‌پذیرد. برای مسیر کلاس، ابزار تمامی فایل‌های jar را پویش می‌کند، از جمله فایل‌هایی که به صورت بازگشتی از طریق ویژگی مانیفست Class-Path یافت می‌شوند. برای مسیر ماژول، ابزار تمامی ماژول‌های ریشه مشخص‌شده با --add-modules و هرگونه وابستگی (تعدی‌پذیر) ماژول‌های ریشه را پویش می‌کند، از جمله ماژول‌هایی که شامل پیاده‌سازی‌های سرویس استفاده‌شده توسط یک ماژول پویش‌شده باشند.

به طور پیش‌فرض، ابزار فایل‌های jar، کلاس‌ها و متدهایی را که از قابلیت‌های بومی استفاده می‌کنند در یک ساختار درختی چاپ می‌کند. در ادامه یک نمونه خروجی آورده شده است:

$ jnativescan --class-path app.jar
app.jar (ALL-UNNAMED):
  foo.Main:
    foo.Main::main(String[])void references restricted methods:
      java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment
    foo.Main::nativeMethod()void is a native method declaration

عبارت app.jar (ALL-UNNAMED) مسیر فایل jar است که نام ماژول داخل پرانتز در پشت آن قرار دارد. از آنجا که در این مورد فایل jar در مسیر کلاس قرار دارد، عبارت ALL-UNNAMED برای نشان دادن ماژول بدون نام چاپ شده است. خط دوم خروجی، یعنی foo.Main، نشان می‌دهد که متدهایی با استفاده از قابلیت‌های بومی در کلاس foo.Main یافت شده‌اند. خط بعدی:

foo.Main::main(String[])void references restricted methods:

نشان می‌دهد که متد main(String[]) در کلاس foo.Main به یک متد محدودشده ارجاع می‌دهد، که در خط بعدی به صورت زیر فهرست شده است:

java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment

در نهایت، متن:

foo.Main::nativeMethod()void is a native method declaration

نشان می‌دهد که کلاس foo.Main شامل یک اعلان متد native به نام nativeMethod است.

اگر گزینه --print-native-access را به خط فرمان مثال اضافه کنیم، در عوض فهرستی از نام‌های ماژول‌هایی دریافت می‌کنیم که حاوی دسترسی به قابلیت‌های بومی هستند:

$ jnativescan --class-path app.jar --print-native-access
ALL-UNNAMED

در این حالت خروجی تنها شامل ALL-UNNAMED است که نشان می‌دهد یک فایل jar در مسیر کلاس، یعنی در ماژول بدون نام، حاوی دسترسی به قابلیت‌های بومی است.

2026 JDK 26.0.2.1