JMOD(1) JDK Commands JMOD(1)

jmod - ایجاد و مدیریت فایل‌های ماژول JMOD جاوا در OpenJDK 21

jmod (create|extract|list|describe|hash) [options] jmod-file

شامل موارد زیر است:

حالت‌های اصلی عملیات

create
یک فایل آرشیو JMOD جدید ایجاد می‌کند.
extract
تمام فایل‌ها را از فایل آرشیو JMOD استخراج می‌کند.
list
نام تمام ورودی‌ها و محتویات را چاپ می‌کند.
describe
جزئیات و مشخصات ماژول را چاپ می‌کند.
hash
ماژول‌های برگ (leaf) را تعیین کرده و هش وابستگی‌هایی را که به‌طور مستقیم و غیرمستقیم به آن‌ها نیاز دارند ثبت می‌کند.

گزینه‌ها

بخش گزینه‌های jmod را ببینید.

الزامی

نام فایل JMOD را برای ایجاد یا برای بازیابی اطلاعات از آن مشخص می‌کند.

نکته: برای بیشتر وظایف توسعه، از جمله استقرار ماژول‌ها در مسیر ماژول (module path) یا انتشار آن‌ها در یک مخزن Maven، همچنان ماژول‌ها را در قالب فایل‌های مدولار JAR بسته‌بندی کنید. ابزار jmod برای ماژول‌هایی در نظر گرفته شده است که دارای کتابخانه‌های بومی (native libraries) یا فایل‌های پیکربندی دیگر هستند، یا برای ماژول‌هایی که قصد دارید با ابزار jlink به یک ایمیج زمان اجرا (runtime image) پیوند دهید.

قالب فایل JMOD به شما امکان می‌دهد فایل‌هایی غیر از فایل‌های .class، متادیتا و منابع را تجمیع کنید. این قالب قابل حمل و انتقال است اما قابل اجرا نیست، به این معنی که می‌توانید در زمان کامپایل یا زمان پیوند (link time) از آن استفاده کنید، اما در زمان اجرا (run time) قابل استفاده نیست.

بسیاری از گزینه‌های jmod شامل مشخص کردن مسیری است که محتویات آن در فایل‌های JMOD حاصل کپی می‌شود. این گزینه‌ها تمام محتویات مسیر مشخص‌شده، از جمله زیرشاخه‌ها و محتویات آن‌ها را کپی می‌کنند، اما فایل‌هایی را که نام آن‌ها با الگوی مشخص‌شده توسط گزینه --exclude مطابقت دارد مستثنی می‌کنند.

با گزینه --hash-modules یا دستور jmod hash، می‌توانید در توصیف‌کننده (descriptor) هر ماژول، هش محتوای ماژول‌هایی را که مجاز به وابستگی به آن هستند ثبت کنید و بدین ترتیب این ماژول‌ها را به یکدیگر متصل نمایید. این کار امکان می‌دهد یک بسته از طریق برون‌سپاری اختصاصی (qualified exports) به یک یا چند ماژول با نام مشخص برون‌سپاری شود و به هیچ ماژول دیگری ارسال نگردد. زمان اجرا بررسی می‌کند که آیا هش ثبت‌شده یک ماژول با هش حل‌شده در زمان اجرا مطابقت دارد یا خیر؛ در غیر این صورت، زمان اجرا خطایی برمی‌گرداند.

--class-path path
محل فایل‌های JAR برنامه یا یک دایرکتوری حاوی کلاس‌ها را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--cmds path
محل دستورات اجرایی بومی (native commands) را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--compress compress
میزان فشرده‌سازی مورد استفاده در ایجاد فایل JMOD را مشخص می‌کند. مقادیر پذیرفته‌شده zip-[0-9] هستند که در آن zip-0 فشرده‌سازی انجام نمی‌دهد و zip-9 بالاترین میزان فشرده‌سازی را فراهم می‌کند. مقدار پیش‌فرض zip-6 است.
--config path
محل فایل‌های پیکربندی قابل ویرایش توسط کاربر را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--date TIMESTAMP
برچسب زمانی با قالب تاریخ-زمان گسترش‌یافته ISO-8601 به همراه منطقه زمانی اختیاری، برای استفاده به عنوان برچسب زمانی ورودی‌ها؛ برای مثال "2022-02-12T12:30:00-05:00".
--dir path
مسیری را مشخص می‌کند که jmod فایل‌های استخراج‌شده از آرشیو JMOD مشخص‌شده را در آن قرار می‌دهد.
--dry-run
یک اجرای آزمایشی از حالت هش را انجام می‌دهد. این گزینه ماژول‌های برگ و ماژول‌های مورد نیاز آن‌ها را بدون ثبت هیچ‌گونه مقدار هش شناسایی می‌کند.
--exclude pattern-list
فایل‌های منطبق با لیست الگوهای ارائه‌شده که با کاما جدا شده‌اند را مستثنی می‌کند؛ هر عنصر از یکی از قالب‌های زیر استفاده می‌کند:
•
glob-pattern
•
glob:glob-pattern
•
regex:regex-pattern

برای ساختار نحوی glob-pattern به متد FileSystem.getPathMatcher مراجعه کنید. برای ساختار نحوی regex-pattern که نشان‌دهنده یک عبارت منظم است به کلاس Pattern مراجعه کنید.

--hash-modules regex-pattern
بر اساس گراف ماژول ماژول‌های منطبق با regex-pattern داده‌شده، ماژول‌های برگ را تعیین کرده و هش وابستگی‌هایی را که به‌طور مستقیم و غیرمستقیم به آن‌ها نیاز دارند ثبت می‌کند. هش‌ها در فایل آرشیو JMOD در حال ایجاد، یا یک آرشیو JMOD یا JAR مدولار در مسیر ماژول مشخص‌شده توسط دستور jmod hash ثبت می‌شوند.
--header-files path
محل فایل‌های هدر (header files) را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--help یا -h
پیام راهنمای نحوه استفاده را چاپ می‌کند.
--help-extra
راهنمای گزینه‌های اضافی را چاپ می‌کند.
--legal-notices path
محل اعلانات حقوقی و مجوزها را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--libs path
محل کتابخانه‌های بومی (native libraries) را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--main-class class-name
کلاس اصلی را برای ثبت در فایل module-info.class مشخص می‌کند.
--man-pages path
محل صفحات راهنما (man pages) را برای کپی شدن در فایل JMOD حاصل مشخص می‌کند.
--module-version module-version
نسخه ماژول را برای ثبت در فایل module-info.class مشخص می‌کند.
--module-path path یا -p path
مسیر ماژول (module path) را مشخص می‌کند. در صورت استفاده از گزینه --hash-modules، این گزینه الزامی است.
--target-platform platform
پلتفرم هدف را مشخص می‌کند.
--version
اطلاعات نسخه ابزار jmod را چاپ می‌کند.
@filename
گزینه‌ها را از فایل مشخص‌شده می‌خواند.

یک فایل گزینه‌ها، فایلی متنی است که شامل گزینه‌ها و مقادیری است که معمولاً در اعلان خط فرمان وارد می‌کنید. گزینه‌ها می‌توانند در یک خط یا در چندین خط قرار گیرند. نمی‌توانید متغیرهای محیطی را برای نام مسیرها مشخص کنید. می‌توانید با قرار دادن یک نماد هش (#) در ابتدای خط، آن خط را به عنوان یادداشت (کامنت) مشخص کنید.

در ادامه نمونه‌ای از یک فایل گزینه‌ها برای دستور jmod آمده است:


#Wed Dec 07 00:40:19 EST 2016
create --class-path mods/com.greetings --module-path mlib
  --cmds commands --config configfiles --header-files src/h
  --libs lib --main-class com.greetings.Main
  --man-pages man --module-version 1.0
  --os-arch "x86_x64" --os-name "macOS"
  --os-version "10.10.5" greetingsmod

علاوه بر گزینه‌های شرح‌داده‌شده در بخش گزینه‌های jmod، موارد زیر گزینه‌های اضافی هستند که می‌توان با این دستور استفاده کرد:

--do-not-resolve-by-default
استثنا کردن از مجموعه ریشه پیش‌فرض ماژول‌ها.
--warn-if-resolved
راهنمایی برای یک ابزار جهت صدور هشدار در صورت حل شدن ماژول. یکی از مقادیر deprecated، deprecated-for-removal یا incubating.

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


jmod create --class-path mods/com.greetings --cmds commands
  --config configfiles --header-files src/h --libs lib
  --main-class com.greetings.Main --man-pages man --module-version 1.0
  --os-arch "x86_x64" --os-name "macOS"
  --os-version "10.10.5" greetingsmod

ایجاد یک فایل JMOD با تعیین تاریخ برای ورودی‌ها به صورت 2022 March 15 00:00:00:


jmod create --class-path build/foo/classes --date 2022-03-15T00:00:00Z
   jmods/foo1.jmod

مثال زیر نشان می‌دهد چه اتفاقی می‌افتد هنگامی که تلاش می‌کنید یک ماژول برگ (در این مثال ma) را با یک ماژول مورد نیاز (mb) پیوند دهید، در حالی که مقدار هش ثبت‌شده در ماژول مورد نیاز با مقدار هش ماژول برگ مطابقت ندارد.

1.
فایل‌های .java زیر را ایجاد و کامپایل کنید:
•
jmodhashex/src/ma/module-info.java

module ma {
  requires mb;
}
•
jmodhashex/src/mb/module-info.java

module mb {
}
•
jmodhashex2/src/ma/module-info.java

module ma {
  requires mb;
}
•
jmodhashex2/src/mb/module-info.java

module mb {
}
2.
برای هر ماژول یک آرشیو JMOD ایجاد کنید. دایرکتوری‌های jmodhashex/jmods و jmodhashex2/jmods را ایجاد کرده و سپس دستورات زیر را ابتدا از دایرکتوری jmodhashex و سپس از دایرکتوری jmodhashex2 اجرا کنید:
•
jmod create --class-path mods/ma jmods/ma.jmod
•
jmod create --class-path mods/mb jmods/mb.jmod
3.
به‌صورت اختیاری پیش‌نمایش دستور jmod hash را مشاهده کنید. دستور زیر را از دایرکتوری jmodhashex اجرا کنید:

jmod hash --dry-run -module-path jmods --hash-modules .*

دستور خروجی زیر را چاپ می‌کند:


Dry run:
mb
  hashes ma SHA-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a

این خروجی نشان می‌دهد که دستور jmod hash (بدون گزینه --dry-run) مقدار هش ماژول برگ ma را در ماژول mb ثبت خواهد کرد.

4.
مقادیر هش را در فایل‌های آرشیو JMOD موجود در دایرکتوری jmodhashex ثبت کنید. دستور زیر را از دایرکتوری jmodhashex اجرا کنید:

jmod hash --module-path jmods --hash-modules .*

دستور خروجی زیر را چاپ می‌کند:

Hashes are recorded in module mb

5.
اطلاعات مربوط به هر آرشیو JMOD موجود در دایرکتوری jmodhashex را چاپ کنید. دستورات برجسته‌شده را از دایرکتوری jmodhashex اجرا کنید:

jmod describe jmods/ma.jmod
ma
  requires mandated java.base
  requires mb
jmod describe jmods/mb.jmod
mb
  requires mandated java.base
  hashes ma SHA-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a
6.
تلاش کنید یک ایمیج زمان اجرا (runtime image) ایجاد کنید که شامل ماژول ma از دایرکتوری jmodhashex2 و ماژول mb از دایرکتوری jmodhashex باشد. دستور زیر را از دایرکتوری jmodhashex2 اجرا کنید:
•
لینوکس و macOS:

jlink --module-path $JAVA_HOME/jmods:jmods/ma.jmod:../jmodhashex/jmods/mb.jmod --add-modules ma --output ma-app

•
ویندوز:

jlink --module-path %JAVA_HOME%/jmods;jmods/ma.jmod;../jmodhashex/jmods/mb.jmod --add-modules ma --output ma-app

دستور پیامی مشابه خطای زیر را چاپ می‌کند:


Error: Hash of ma (a2d77889b0cb067df02a3abc39b01ac1151966157a68dc4241562c60499150d2) differs to
expected hash (07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a) recorded in mb
2023 JDK 21