JLINK(1) JDK Commands JLINK(1)

jlink - سرهم‌بندی و بهینه‌سازی مجموعه‌ای از ماژول‌ها و وابستگی‌های آن‌ها در یک ایمیج زمان اجرای سفارشی

jlink [options] --module-path modulepath --add-modules module[,module...]

گزینه‌های خط فرمان که با فاصله از هم جدا شده‌اند. بخش گزینه‌های jlink را ببینید.
مسیری که ابزار jlink ماژول‌های قابل مشاهده را در آن شناسایی می‌کند. این ماژول‌ها می‌توانند فایل‌های ماژولار JAR، فایل‌های JMOD یا ماژول‌های بازشده (exploded modules) باشند.
نام ماژول‌هایی که باید به ایمیج زمان اجرا افزوده شوند. ابزار jlink این ماژول‌ها و وابستگی‌های متعدی آن‌ها را اضافه می‌کند.

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

نکته:

توسعه‌دهندگان خود مسئول به‌روزرسانی ایمیج‌های زمان اجرای سفارشی‌شان هستند.

ماژول‌های نام‌برده، mod، را به مجموعه پیش‌فرض ماژول‌های ریشه اضافه می‌کند. مجموعه پیش‌فرض ماژول‌های ریشه خالی است.
پیوند دادن ماژول‌های ارائه‌دهنده سرویس و وابستگی‌های آن‌ها.
فشرده‌سازی منابع را فعال می‌کند. مقادیر پذیرفته‌شده عبارتند از: zip-{0-9}، که در آن zip-0 بدون فشرده‌سازی و zip-9 بیشترین فشرده‌سازی را فراهم می‌کند. پیش‌فرض zip-6 است.
مقادیر منسوخ‌شده که در نسخه‌های بعدی حذف خواهند شد:
  • 0: بدون فشرده‌سازی. به جای آن از zip-0 استفاده کنید.
  • 1: اشتراک‌گذاری رشته‌های ثابت (Constant string sharing).
  • 2: ZIP. به جای آن از zip-6 استفاده کنید.
پلاگین مشخص‌شده را غیرفعال می‌کند. برای مشاهده فهرست پلاگین‌های پشتیبانی‌شده، بخش پلاگین‌های jlink را ببینید.
ترتیب بایت‌ها (Endianness) را برای ایمیج ایجادشده تعیین می‌کند. مقدار پیش‌فرض، ساختار معماری سیستم شماست.
پیام راهنما را نمایش می‌دهد.
از بروز خطای مهلک هنگام پیوند دادن JARهای ماژولار امضاشده در ایمیج زمان اجرا جلوگیری می‌کند. فایل‌های مرتبط با امضا در JARهای ماژولار امضاشده به ایمیج زمان اجرا کپی نمی‌شوند.
نام دستور اجراکننده (launcher) را برای ماژول، یا نام دستور را برای ماژول و کلاس اصلی مشخص می‌کند (نام ماژول و کلاس اصلی با یک اسلش (/) جدا می‌شوند).
محدوده ماژول‌های قابل مشاهده را به موارد موجود در بستار متعدی (transitive closure) ماژول‌های نام‌برده، mod، به‌علاوه ماژول اصلی (در صورت وجود)، به‌علاوه هر ماژول دیگری که در گزینه --add-modules مشخص شده است، محدود می‌کند.
پلاگین‌های موجود را که می‌توانید از طریق گزینه‌های خط فرمان به آن‌ها دسترسی داشته باشید، فهرست می‌کند؛ بخش پلاگین‌های jlink را ببینید.
مسیر ماژول را مشخص می‌کند.
اگر این گزینه مشخص نشود، مسیر ماژول پیش‌فرض $JAVA_HOME/jmods خواهد بود. این پوشه حاوی ماژول java.base و سایر ماژول‌های استاندارد و JDK است. اگر این گزینه مشخص شود اما ماژول java.base از طریق آن قابل تحلیل و یافتن نباشد، دستور jlink مسیر $JAVA_HOME/jmods را به انتهای مسیر ماژول ضمیمه می‌کند.
فایل‌های سرآیند (header files) را مستثنی می‌کند.
صفحات راهنما (man pages) را مستثنی می‌کند.
محل ذخیره ایمیج زمان اجرای تولیدشده را تعیین می‌کند.
گزینه‌های jlink را در فایل مشخص‌شده ذخیره می‌کند.
ارائه‌دهندگانی را از مسیر ماژول پیشنهاد می‌کند که انواع سرویس داده‌شده را پیاده‌سازی کرده باشند.
اطلاعات نسخه را چاپ می‌کند.
@filename
گزینه‌ها را از فایل مشخص‌شده می‌خواند.
یک فایل گزینه‌ها، فایلی متنی است که حاوی گزینه‌ها و مقادیری است که معمولاً در خط فرمان وارد می‌کنید. گزینه‌ها ممکن است در یک خط یا در چندین خط قرار گیرند. نمی‌توانید برای نام مسیرها از متغیرهای محیطی استفاده کنید. می‌توانید با درج علامت هش (#) در ابتدای خط، آن را تبدیل به توضیح (comment) کنید. در ادامه نمونه‌ای از یک فایل گزینه‌ها برای دستور jlink آمده است:
#Wed Dec 07 00:40:19 EST 2016
--module-path mlib
--add-modules com.greetings
--output greetingsapp
نکته:

پلاگین‌هایی که در این بخش فهرست نشده‌اند پشتیبانی نمی‌شوند و ممکن است تغییر کنند.

برای گزینه‌های پلاگینی که به یک pattern-list نیاز دارند، مقدار ورودی فهرستی از عناصر است که با کاما از یکدیگر جدا شده‌اند و هر عنصر از یکی از قالب‌های زیر پیروی می‌کند:

  • glob-pattern
  • glob:glob-pattern
  • regex:regex-pattern
  • @filename
•
filename نام فایلی است که الگوهای مورد استفاده را در بر دارد؛ در هر خط یک الگو.

برای مشاهده فهرست کامل تمام پلاگین‌های موجود، دستور jlink --list-plugins را اجرا کنید.

گزینه‌ها
--compress=zip-{0-9}[:filter=pattern-list]
توضیحات
تمام منابع موجود در ایمیج خروجی را فشرده می‌کند. مقادیر مجاز عبارتند از: zip-{0-9}، که در آن zip-0 فاقد فشرده‌سازی بوده و zip-9 بهترین فشرده‌سازی را ارائه می‌دهد. پیش‌فرض zip-6 است.
مقادیر منسوخ‌شده‌ای که در انتشار‌های آینده حذف خواهند شد:
  • سطح 0: بدون فشرده‌سازی. به‌جای آن از zip-0 استفاده کنید.
  • سطح 1: اشتراک‌گذاری رشته‌های ثابت (Constant string sharing)
  • سطح 2: ZIP. به‌جای آن از zip-6 استفاده کنید. یک فیلتر اختیاری pattern-list می‌تواند برای مشخص کردن الگوی فایل‌های مشمول مشخص شود.

گزینه‌ها
--include-locales=langtag[,langtag]*
توضیحات
فهرستی از لوکال‌ها را شامل می‌شود که در آن langtag یک برچسب زبان BCP 47 است. این گزینه از تطبیق لوکال به صورتی که در RFC 4647 تعریف شده پشتیبانی می‌کند. اطمینان حاصل کنید که هنگام استفاده از این گزینه، ماژول jdk.localedata را اضافه کرده باشید.
مثال:

--add-modules jdk.localedata --include-locales=en,ja,*-IN

گزینه‌ها
--order-resources=pattern-list
توضیحات
مسیرهای مشخص‌شده را بر اساس اولویت مرتب می‌کند. اگر @filename مشخص شده باشد، آنگاه هر خط در pattern-list باید تطابق دقیقی برای مسیرهای مرتب‌شونده داشته باشد.
مثال:

--order-resources=/module-info.class,@classlist,/java.base/java/lang/

گزینه‌ها
--strip-debug
توضیحات
اطلاعات اشکال‌زدایی (debug) را از ایمیج خروجی حذف می‌کند.

گزینه‌ها
--generate-cds-archive
توضیحات
در صورتی که ایمیج زمان اجرا از قابلیت CDS پشتیبانی کند، آرشیو CDS را تولید می‌کند.

دستور زیر یک ایمیج زمان اجرا در دایرکتوری greetingsapp ایجاد می‌کند. این دستور ماژول com.greetings را که تعریف ماژول آن در دایرکتوری mlib قرار دارد، پیوند (link) می‌دهد.

jlink --module-path mlib --add-modules com.greetings --output greetingsapp

دستور زیر ماژول‌های موجود در ایمیج زمان اجرای greetingsapp را فهرست می‌کند:

greetingsapp/bin/java --list-modules
com.greetings
java.base@11
java.logging@11
org.astro@1.0

دستور زیر یک ایمیج زمان اجرا در دایرکتوری compressedrt ایجاد می‌کند که نمادهای اشکال‌زدایی از آن پاک شده‌اند، برای کاهش فضا از فشرده‌سازی استفاده می‌کند و شامل اطلاعات محلی (locale) زبان فرانسوی است:

jlink --add-modules jdk.localedata --strip-debug --compress=2 --include-locales=fr --output compressedrt

مثال زیر اندازهٔ ایمیج زمان اجرای compressedrt را با fr_rt مقایسه می‌کند که نمادهای اشکال‌زدایی از آن حذف نشده‌اند و از فشرده‌سازی استفاده نمی‌کند:

jlink --add-modules jdk.localedata --include-locales=fr --output fr_rt
du -sh ./compressedrt ./fr_rt
23M     ./compressedrt
36M     ./fr_rt

مثال زیر ارائه‌دهندگانی (providers) را که java.security.Provider را پیاده‌سازی می‌کنند فهرست می‌کند:

jlink --suggest-providers java.security.Provider
Suggested providers:
  java.naming provides java.security.Provider used by java.base
  java.security.jgss provides java.security.Provider used by java.base
  java.security.sasl provides java.security.Provider used by java.base
  java.smartcardio provides java.security.Provider used by java.base
  java.xml.crypto provides java.security.Provider used by java.base
  jdk.crypto.cryptoki provides java.security.Provider used by java.base
  jdk.security.jgss provides java.security.Provider used by java.base

مثال زیر یک ایمیج زمان اجرای سفارشی به نام mybuild ایجاد می‌کند که تنها شامل java.naming و jdk.crypto.cryptoki و وابستگی‌های آن‌ها است و هیچ ارائه‌دهندهٔ دیگری را در بر نمی‌گیرد. توجه داشته باشید که این وابستگی‌ها باید در مسیر ماژول (module path) وجود داشته باشند:

jlink --add-modules java.naming,jdk.crypto.cryptoki --output mybuild

دستور زیر مشابه دستوری است که ایمیج زمان اجرایی با نام greetingsapp ایجاد می‌کند، با این تفاوت که ماژول‌های تحلیل‌شده از ماژول‌های ریشه را با پیوند سرویس (service binding) لینک می‌کند؛ متد Configuration.resolveAndBind را ببینید.

jlink --module-path mlib --add-modules com.greetings --output greetingsapp --bind-services

دستور زیر ماژول‌های موجود در ایمیج زمان اجرای greetingsapp ایجادشده توسط این دستور را فهرست می‌کند:

greetingsapp/bin/java --list-modules
com.greetings
java.base@11
java.compiler@11
java.datatransfer@11
java.desktop@11
java.logging@11
java.management@11
java.management.rmi@11
java.naming@11
java.prefs@11
java.rmi@11
java.security.jgss@11
java.security.sasl@11
java.smartcardio@11
java.xml@11
java.xml.crypto@11
jdk.accessibility@11
jdk.charsets@11
jdk.compiler@11
jdk.crypto.cryptoki@11
jdk.crypto.ec@11
jdk.crypto.mscapi@11
jdk.internal.opt@11
jdk.jartool@11
jdk.javadoc@11
jdk.jdeps@11
jdk.jfr@11
jdk.jlink@11
jdk.localedata@11
jdk.management@11
jdk.management.jfr@11
jdk.naming.dns@11
jdk.naming.rmi@11
jdk.security.auth@11
jdk.security.jgss@11
jdk.zipfs@11
org.astro@1.0
2026 JDK 26.0.2.1