| JMOD(1) | JDK Commands | JMOD(1) |
نام (NAME)
jmod - ایجاد فایلهای JMOD و فهرست کردن محتوای فایلهای JMOD موجود
خلاصه دستور (SYNOPSIS)
jmod (create|extract|list|describe|hash) [options] jmod-file
شامل موارد زیر است:
حالتهای عملیاتی اصلی
- create
- یک فایل آرشیو JMOD جدید ایجاد میکند.
- extract
- تمام فایلها را از فایل آرشیو JMOD استخراج میکند.
- list
- نام تمام مدخلها را چاپ میکند.
- describe
- جزئیات ماژول را چاپ میکند.
- hash
- ماژولهای برگ را تعیین کرده و هشهای وابستگیهایی را که بهطور مستقیم یا غیرمستقیم به آنها نیاز دارند ثبت میکند.
گزینهها
- options
- بخش گزینههای jmod را ببینید.
ضروری
- jmod-file
- نام فایل JMOD را برای ایجاد یا برای بازیابی اطلاعات از آن مشخص میکند.
توضیحات (DESCRIPTION)
نکته: برای بیشتر کارهای توسعه، از جمله استقرار ماژولها در مسیر ماژول (module path) یا انتشار آنها در یک مخزن Maven، همچنان به بستهبندی ماژولها در فایلهای JAR ماژولار ادامه دهید. ابزار jmod برای ماژولهایی در نظر گرفته شده است که دارای کتابخانههای بومی (native) یا سایر فایلهای پیکربندی هستند، یا ماژولهایی که قصد دارید آنها را با ابزار jlink به یک ایمیج زمان اجرا (runtime image) پیوند دهید.
قالب فایل JMOD به شما امکان میدهد فایلهایی غیر از فایلهای .class، متادیتا و منابع را تجمیع کنید. این قالب قابلحمل است اما قابلاجرا نیست، به این معنی که میتوانید در زمان کامپایل یا زمان پیوند از آن استفاده کنید، اما نه در زمان اجرا.
بسیاری از گزینههای jmod شامل تعیین مسیری هستند که محتویات آن در فایلهای JMOD نهایی کپی میشوند. این گزینهها تمام محتویات مسیر مشخصشده، شامل زیردایرکتوریها و محتوای آنها را کپی میکنند، اما فایلهایی را که نام آنها با الگوی مشخصشده توسط گزینهٔ --exclude مطابقت دارد مستثنی میکنند.
با گزینهٔ --hash-modules یا دستور jmod hash، میتوانید در توصیفگر هر ماژول، هشهای محتوای ماژولهایی را که مجاز به وابستگی به آن هستند ثبت کنید، و بدین ترتیب این ماژولها را به یکدیگر «پیوند» (tie) دهید. این قابلیت این امکان را فراهم میکند که از طریق برونریزیهای مشروط (qualified exports)، یک بسته فقط به یک یا چند ماژول با نام مشخص برونریزی شود و نه به هیچ ماژول دیگری. محیط زمان اجرا بررسی میکند که آیا هش ثبتشدهٔ یک ماژول با هشی که در زمان اجرا حلوفصل شده است مطابقت دارد یا خیر؛ در غیر این صورت، زمان اجرا یک خطا برمیگرداند.
گزینههای JMOD (OPTIONS FOR JMOD)
- --class-path path
- مکان فایلهای JAR برنامه یا دایرکتوری حاوی کلاسها را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --cmds path
- مکان دستورهای بومی را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --compress compress
- میزان فشردهسازی مورد استفاده هنگام ایجاد فایل JMOD را مشخص میکند. مقادیر پذیرفتهشده zip-[0-9] هستند که در آن zip-0 بدون فشردهسازی است، و zip-9 بیشترین فشردهسازی را ارائه میدهد. پیشفرض zip-6 است.
- --config path
- مکان فایلهای پیکربندی قابل ویرایش توسط کاربر را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --dateTIMESTAMP
- برچسب زمان در قالب تاریخ-زمان با افست گسترشیافتهٔ ISO-8601 همراه با قالب اختیاری منطقهٔ زمانی، برای استفاده به عنوان برچسب زمان مدخلها؛ مانند: "2022-02-12T12:30:00-05:00".
- --dir path
- مکانی را مشخص میکند که jmod فایلهای استخراجشده از آرشیو JMOD مشخصشده را در آن قرار میدهد.
- --dry-run
- یک اجرای آزمایشی (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
- مکان فایلهای هدر را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --help یا -h
- پیام راهنمای استفاده را چاپ میکند.
- --help-extra
- راهنمای گزینههای اضافی را چاپ میکند.
- --legal-notices path
- مکان اعلانهای حقوقی را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --libs path
- مکان کتابخانههای بومی را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --main-class class-name
- کلاس اصلی را برای ثبت در فایل module-info.class مشخص میکند.
- --man-pages path
- مکان صفحات راهنما را برای کپی شدن در فایل JMOD حاصل مشخص میکند.
- --module-version module-version
- نسخهٔ ماژول را برای ثبت در فایل module-info.class مشخص میکند.
- --module-path path یا -p path
- مسیر ماژول را مشخص میکند. اگر --hash-modules را نیز مشخص کنید، این گزینه الزامی است.
- --target-platform platform
- سکوی مقصد را مشخص میکند.
- --version
- اطلاعات نسخهٔ ابزار jmod را چاپ میکند.
- @filename
- گزینهها را از فایل مشخصشده میخواند.
-
#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
- مستثنی کردن از مجموعه ریشه (root set) پیشفرض ماژولها
- --warn-if-resolved
- راهنمایی برای ابزار جهت صدور هشدار در صورتی که ماژول حلوفصل (resolve) شود. یکی از مقادیر deprecated، deprecated-for-removal یا incubating.
مثال ایجاد JMOD (JMOD CREATE EXAMPLE)
در ادامه مثالی از ایجاد یک فایل 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
مثال هش JMOD (JMOD HASH EXAMPLE)
مثال زیر نشان میدهد هنگامی که تلاش میکنید یک ماژول برگ (در این مثال، ma) را با یک ماژول مورد نیاز (mb) پیوند (link) دهید و مقدار هش ثبتشده در ماژول مورد نیاز با مقدار هش ماژول برگ مطابقت ندارد، چه اتفاقی رخ میدهد.
- 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
| 2026 | JDK 25.0.4.1 |