.\" Automatically generated by Pandoc 3.10.2 .\" .TH "JAR" "1" "2026" "JDK 26.0.2.1" "JDK Commands" .SH "نام (NAME)" jar \- ایجاد بایگانی برای کلاس‌ها و منابع، و دستکاری یا بازیابی کلاس‌ها یا منابع منفرد از یک بایگانی .SH "خلاصه دستور (SYNOPSIS)" \f[CR]jar\f[R] [\f[I]OPTION\f[R] ...] [ [\f[CR]\-\-release\f[R] \f[I]VERSION\f[R]] [\f[CR]\-C\f[R] \f[I]dir\f[R]] \f[I]files\f[R]] ... .SH "توضیحات (DESCRIPTION)" دستور \f[CR]jar\f[R] یک ابزار چندمنظوره برای بایگانی و فشرده‌سازی بر پایه قالب‌های فشرده‌سازی ZIP و ZLIB است. در ابتدا، دستور \f[CR]jar\f[R] برای بسته‌بندی اپلت‌های جاوا (که از JDK 11 به بعد پشتیبانی نمی‌شوند) یا برنامه‌ها طراحی شده بود؛ با این حال، از JDK 9 به بعد، کاربران می‌توانند از دستور \f[CR]jar\f[R] برای ایجاد JARهای ماژولار استفاده کنند. برای جابه‌جایی و استقرار، معمولاً بسته‌بندی ماژول‌ها به‌صورت JARهای ماژولار راحت‌تر است. .PP نحو دستور \f[CR]jar\f[R] شبیه به نحو دستور \f[CR]tar\f[R] است. این دستور چندین حالت عملیاتی اصلی دارد که توسط یکی از آرگومان‌های اجباری عملیات تعریف می‌شوند. سایر آرگومان‌ها یا گزینه‌هایی هستند که رفتار عملیات را تغییر می‌دهند یا برای انجام عملیات الزامی هستند. .PP هنگامی که ماژول‌ها یا اجزای یک برنامه (فایل‌ها، تصاویر و صداها) در یک بایگانی واحد ترکیب می‌شوند، می‌توانند توسط یک عامل جاوا (مانند یک مرورگر) در یک تراکنش منفرد HTTP بارگیری شوند، به جای اینکه برای هر قطعه به یک اتصال جدید نیاز باشد. این امر زمان بارگیری را به‌طور چشمگیری بهبود می‌بخشد. همچنین دستور \f[CR]jar\f[R] فایل‌ها را فشرده می‌کند که زمان بارگیری را بیش از پیش کاهش می‌دهد. دستور \f[CR]jar\f[R] امکان امضا کردن مدخل‌های منفرد در یک فایل را نیز فراهم می‌آورد تا اصالت منشأ آن‌ها قابل اعتبارسنجی باشد. یک فایل JAR می‌تواند به عنوان یک مدخل class path استفاده شود، چه فشرده شده باشد چه نباشد. .PP یک بایگانی زمانی به یک JAR ماژولار تبدیل می‌شود که توصیف‌کننده ماژول، یعنی \f[CR]module\-info.class\f[R] را در ریشه دایرکتوری‌های ارائه‌شده یا در ریشه بایگانی \f[CR].jar\f[R] قرار دهید. عملیات زیر که در بخش \f[B]اصلاح‌کننده‌های عملیاتی معتبر فقط در حالت‌های ایجاد و به‌روزرسانی\f[R] شرح داده شده‌اند، تنها هنگام ایجاد یا به‌روزرسانی یک jar ماژولار یا به‌روزرسانی یک jar غیرماژولار موجود معتبر هستند: .IP \(bu 2 \f[CR]\-\-module\-version\f[R] .IP \(bu 2 \f[CR]\-\-hash\-modules\f[R] .IP \(bu 2 \f[CR]\-\-module\-path\f[R] .PP \f[B]نکته:\f[R] .PP تمام آرگومان‌های اجباری یا اختیاری برای گزینه‌های طولانی، برای هر یک از گزینه‌های کوتاه متناظر نیز اجباری یا اختیاری هستند. .SH "حالت‌های عملیاتی اصلی (MAIN OPERATION MODES)" هنگام استفاده از دستور \f[CR]jar\f[R]، باید عملیاتی را که می‌خواهید انجام دهد مشخص کنید. شما حالت عملیاتی دستور \f[CR]jar\f[R] را با درج آرگومان‌های عملیاتی مناسب شرح‌داده‌شده در این بخش تعیین می‌کنید. می‌توانید یک آرگومان عملیات را با دیگر گزینه‌های تک‌حرفی ترکیب کنید. معمولاً آرگومان عملیات نخستین آرگومانی است که در خط فرمان مشخص می‌شود. .TP \f[CR]\-c\f[R] یا \f[CR]\-\-create\f[R] بایگانی را ایجاد می‌کند. .TP \f[CR]\-i\f[R] \f[I]FILE\f[R] یا \f[CR]\-\-generate\-index=\f[R]\f[I]FILE\f[R] اطلاعات نمایه (index) را برای فایل JAR مشخص‌شده تولید می‌کند. این گزینه منسوخ شده است و ممکن است در نسخه‌های بعدی حذف شود. .TP \f[CR]\-t\f[R] یا \f[CR]\-\-list\f[R] فهرست محتویات بایگانی را نمایش می‌دهد. .TP \f[CR]\-u\f[R] یا \f[CR]\-\-update\f[R] یک فایل JAR موجود را به‌روزرسانی می‌کند. .TP \f[CR]\-x\f[R] یا \f[CR]\-\-extract\f[R] فایل‌های نام‌برده‌شده (یا همه فایل‌ها) را از بایگانی استخراج می‌کند. اگر فایلی با نام یکسان بیش از یک بار در بایگانی ظاهر شود، هر نسخه استخراج خواهد شد و نسخه‌های بعدی جایگزین نسخه‌های قبلی می‌شوند (رونویسی می‌شوند)، مگر اینکه \-k مشخص شده باشد. .TP \f[CR]\-d\f[R] یا \f[CR]\-\-describe\-module\f[R] توصیف‌کننده ماژول یا نام خودکار ماژول را چاپ می‌کند. .TP \f[CR]\-\-validate\f[R] محتویات فایل JAR را اعتبارسنجی می‌کند. برای جزئیات بیشتر، بخش \f[CR]Integrity of a JAR File\f[R] را در زیر ببینید..SH "اصلاح‌کننده‌های عملیات معتبر در هر حالت (OPERATION MODIFIERS VALID IN ANY MODE)" می‌توانید از گزینه‌های زیر برای سفارشی‌سازی عملکرد هر یک از حالت‌های عملیاتی موجود در دستور \f[CR]jar\f[R] استفاده کنید. .TP \f[CR]\-C\f[R] \f[I]DIR\f[R] هنگامی که همراه با حالت عملیاتی ایجاد (create) استفاده می‌شود، به دایرکتوری مشخص‌شده تغییر مسیر داده و \f[I]files\f[R] (فایل‌های) مشخص‌شده در انتهای خط فرمان را شامل می‌شود. .RS \f[CR]jar\f[R] [\f[I]OPTION\f[R] ...] [ [\f[CR]\-\-release\f[R] \f[I]VERSION\f[R]] [\f[CR]\-C\f[R] \f[I]dir\f[R]] \f[I]files\f[R]] هنگامی که با حالت عملیاتی استخراج (extract) استفاده شود، دایرکتوری مقصدی را مشخص می‌کند که فایل JAR در آن استخراج خواهد شد. برخلاف حالت عملیاتی create، این گزینه در حالت عملیاتی extract تنها یک‌بار می‌تواند مشخص شود. .RE .TP \f[CR]\-f\f[R] \f[I]FILE\f[R] یا \f[CR]\-\-file=\f[R]\f[I]FILE\f[R] نام فایل آرشیو را مشخص می‌کند. .TP \f[CR]\-\-release\f[R] \f[I]VERSION\f[R] یک فایل JAR چندنسخه‌ای (multirelease) ایجاد می‌کند. تمام فایل‌های مشخص‌شده پس از این گزینه را در دایرکتوری نسخه‌بندی‌شده‌ای از فایل JAR با نام \f[CR]META\-INF/versions/\f[R]\f[I]VERSION\f[R]\f[CR]/\f[R] قرار می‌دهد؛ که در آن \f[I]VERSION\f[R] باید یک عدد صحیح مثبت با مقدار ۹ یا بزرگ‌تر باشد. .RS در زمان اجرا، هنگامی که بیش از یک نسخه از یک کلاس در JAR وجود داشته باشد، JDK از نخستین نسخه‌ای که پیدا کند استفاده خواهد کرد؛ به این ترتیب که ابتدا در درخت دایرکتوری‌ای جستجو می‌کند که شمارهٔ \f[I]VERSION\f[R] آن با شمارهٔ نسخهٔ اصلی (major version) مربوط به JDK مطابقت داشته باشد. سپس دایرکتوری‌هایی با شماره‌های \f[I]VERSION\f[R] به‌طور متوالی کمتر را بررسی کرده و در نهایت ریشهٔ فایل JAR را بررسی می‌کند. .RE .TP \f[CR]\-v\f[R] یا \f[CR]\-\-verbose\f[R] خروجی پرجزئیات را به خروجی استاندارد ارسال کرده یا چاپ می‌کند. .SH "اصلاح‌کننده‌های عملیات معتبر تنها در حالت‌های CREATE و UPDATE (OPERATION MODIFIERS VALID ONLY IN CREATE AND UPDATE MODES)" می‌توانید از گزینه‌های زیر برای سفارشی‌سازی عملکرد حالت‌های عملیاتی اصلی create و update استفاده کنید: .TP \f[CR]\-e\f[R] \f[I]CLASSNAME\f[R] یا \f[CR]\-\-main\-class=\f[R]\f[I]CLASSNAME\f[R] نقطهٔ ورود برنامه (entry point) را برای برنامه‌های مستقلی که در یک فایل JAR پیمانه‌ای یا پیمانه‌ایِ قابل‌اجرا بسته‌بندی شده‌اند، مشخص می‌کند. .TP \f[CR]\-m\f[R] \f[I]FILE\f[R] یا \f[CR]\-\-manifest=\f[R]\f[I]FILE\f[R] اطلاعات مانیفست را از فایل مانیفست داده‌شده در بر می‌گیرد. .TP \f[CR]\-M\f[R] یا \f[CR]\-\-no\-manifest\f[R] فایل مانیفست را برای مدخل‌ها ایجاد نمی‌کند. .TP \f[CR]\-\-module\-version=\f[R]\f[I]VERSION\f[R] هنگام ایجاد یا به‌روزرسانی یک فایل JAR پیمانه‌ای، یا به‌روزرسانی یک فایل JAR غیرپیمانه‌ای، نسخهٔ ماژول را مشخص می‌کند. .TP \f[CR]\-\-hash\-modules=\f[R]\f[I]PATTERN\f[R] هش‌های ماژول‌هایی را که با الگوی داده‌شده مطابقت دارند و به‌طور مستقیم یا غیرمستقیم به فایل JAR پیمانه‌ایِ در حال ایجاد یا فایل JAR غیرپیمانه‌ایِ در حال به‌روزرسانی وابسته هستند، محاسبه و ثبت می‌کند. .TP \f[CR]\-p\f[R] یا \f[CR]\-\-module\-path\f[R] مکان وابستگی ماژول را برای تولید هش مشخص می‌کند. .TP \f[CR]\(at\f[R]\f[I]file\f[R] گزینه‌ها و نام‌های فایل‌های \f[CR]jar\f[R] را از یک فایل متنی می‌خواند، دقیقاً مانند اینکه در خط فرمان وارد شده باشند. .SH "اصلاح‌کننده‌های عملیات معتبر تنها در حالت‌های CREATE، UPDATE و GENERATE\-INDEX (OPERATION MODIFIERS VALID ONLY IN CREATE, UPDATE, AND GENERATE\-INDEX MODES)" می‌توانید از گزینه‌های زیر برای سفارشی‌سازی عملکرد حالت‌های عملیاتی اصلی create (\f[CR]\-c\f[R] یا \f[CR]\-\-create\f[R])، update (\f[CR]\-u\f[R] یا \f[CR]\-\-update\f[R]) و generate\-index (\f[CR]\-i\f[R] یا \f[CR]\-\-generate\-index=\f[R]\f[I]FILE\f[R]) استفاده کنید: .TP \f[CR]\-0\f[R] یا \f[CR]\-\-no\-compress\f[R] بدون استفاده از فشرده‌سازی ZIP ذخیره می‌کند. .TP \f[CR]\-\-date=\f[R]\f[I]TIMESTAMP\f[R] برچسب زمانی در قالب تاریخ\-زمان با افست گسترش‌یافته بر اساس ISO\-8601 همراه با منطقهٔ زمانی اختیاری، برای استفاده به عنوان برچسب زمانی مدخل‌ها؛ مانند: \(dq2022\-02\-12T12:30:00\-05:00\(dq..SH "اصلاح‌کننده‌های عملیات فقط در حالت استخراج (OPERATION MODIFIERS VALID ONLY IN EXTRACT MODE)" .TP \f[CR]\-\-dir\f[R] \f[I]DIR\f[R] دایرکتوری که فایل JAR در آن استخراج خواهد شد. .TP \f[CR]\-k\f[R] یا \f[CR]\-\-keep\-old\-files\f[R] فایل‌های موجود را رونویسی نمی‌کند. اگر مدخلی با نام یکسان در فایل JAR در دایرکتوری مقصد وجود داشته باشد، فایل موجود رونویسی نخواهد شد. در نتیجه، اگر یک فایل بیش از یک بار در یک بایگانی ظاهر شود، نسخه‌های بعدی نسخه‌های قبلی را رونویسی نمی‌کنند. همچنین توجه داشته باشید که برخی از فایل‌سیستم‌ها ممکن است به کوچک و بزرگی حروف حساس نباشند. .SH "سایر گزینه‌ها (OTHER OPTIONS)" گزینه‌های زیر توسط دستور \f[CR]jar\f[R] شناسایی شده و همراه با حالت‌های عملیاتی به کار نمی‌روند: .TP \f[CR]\-h\f[R] یا \f[CR]\-\-help\f[R][\f[CR]:compat\f[R]] راهنمای خط فرمان را برای دستور \f[CR]jar\f[R] یا به صورت اختیاری راهنمای سازگاری را نمایش می‌دهد. .TP \f[CR]\-\-help\-extra\f[R] راهنمای مربوط به گزینه‌های اضافی را نمایش می‌دهد. .TP \f[CR]\-\-version\f[R] نسخه برنامه را چاپ می‌کند. .SH "یکپارچگی یک فایل JAR (INTEGRITY OF A JAR FILE)" از آنجا که یک فایل JAR بر پایه قالب ZIP است، امکان ساخت یک فایل JAR با ابزارهایی غیر از دستور \f[CR]jar\f[R] نیز وجود دارد. گزینه \-\-validate می‌تواند برای انجام بررسی‌های یکپارچگی زیر روی یک فایل JAR استفاده شود: .IP \(bu 2 عدم وجود نام فایل‌های تکراری در میان مدخل‌های Zip .IP \(bu 2 تأیید اینکه نام مدخل Zip: .RS 2 .IP \(bu 2 یک مسیر مطلق نباشد .IP \(bu 2 نام فایل \(aq.\(aq یا \(aq..\(aq نباشد .IP \(bu 2 شامل یک بک‌اسلش، \(aq\(rs\(aq نباشد .IP \(bu 2 شامل حرف درایو نباشد .IP \(bu 2 بخش مسیر شامل \(aq.\(aq یا \(aq.. نباشد .RE .IP \(bu 2 واسط برنامه‌نویسی کاربردی (API) ارائه‌شده توسط یک بایگانی jar چندنسخه‌ای در میان تمام نسخه‌های مختلف انتشار سازگار باشد. .PP ابزار jar در صورتی که با هیچ مشکل یکپارچگی مواجه نشود با وضعیت 0 و در صورت بروز خطا/هشدار با وضعیتی بزرگتر از صفر (>0) خارج می‌شود. .PP هنگامی که یک مشکل یکپارچگی گزارش می‌شود، اغلب نیاز است که فایل JAR توسط منبع اصلی آن فایل مجدداً ساخته شود. .SH "مثال‌هایی از نحو دستور JAR (EXAMPLES OF JAR COMMAND SYNTAX)" .IP \(bu 2 ساخت یک بایگانی به نام \f[CR]classes.jar\f[R] که شامل دو فایل کلاس \f[CR]Foo.class\f[R] و \f[CR]Bar.class\f[R] است. .RS 2 .RS .PP \f[CR]jar \-\-create \-\-file classes.jar Foo.class Bar.class\f[R] .RE .RE .IP \(bu 2 ساخت یک بایگانی به نام \f[CR]classes.jar\f[R] شامل دو فایل کلاس \f[CR]Foo.class\f[R] و \f[CR]Bar.class\f[R] همراه با تنظیم تاریخ و زمان آخرین تغییر روی \f[CR]2021 Jan 6 12:36:00\f[R]. .RS 2 .RS .PP \f[CR]jar \-\-create \-\-date=\(dq2021\-01\-06T14:36:00+02:00\(dq \-\-file=classes.jar Foo.class Bar.class\f[R] .RE .RE .IP \(bu 2 ساخت یک بایگانی به نام \f[CR]classes.jar\f[R] با استفاده از یک مانیفست موجود به نام \f[CR]mymanifest\f[R] که شامل تمام فایل‌های موجود در دایرکتوری \f[CR]foo/\f[R] است. .RS 2 .RS .PP \f[CR]jar \-\-create \-\-file classes.jar \-\-manifest mymanifest \-C foo/\f[R] .RE .RE .IP \(bu 2 ساخت یک بایگانی JAR ماژولار به نام \f[CR]foo.jar\f[R] که در آن توصیف‌کننده ماژول در \f[CR]classes/module\-info.class\f[R] قرار دارد. .RS 2 .RS .PP \f[CR]jar \-\-create \-\-file foo.jar \-\-main\-class com.foo.Main \-\-module\-version 1.0 \-C foo/classes resources\f[R] .RE .RE .IP \(bu 2 به‌روزرسانی یک JAR غیرماژولار موجود به نام \f[CR]foo.jar\f[R] به یک فایل JAR ماژولار. .RS 2 .RS .PP \f[CR]jar \-\-update \-\-file foo.jar \-\-main\-class com.foo.Main \-\-module\-version 1.0 \-C foo/module\-info.class\f[R] .RE .RE .IP \(bu 2 ساخت یک JAR چندنسخه‌ای (multi\-release) به نام \f[CR]foo.jar\f[R] که فایل‌های موجود در دایرکتوری \f[CR]classes\f[R] را در ریشه JAR و فایل‌های موجود در دایرکتوری \f[CR]classes\-10\f[R] را در دایرکتوری \f[CR]META\-INF/versions/10\f[R] مربوط به JAR قرار می‌دهد. .RS 2 .PP در این مثال، دایرکتوری \f[CR]classes/com/foo\f[R] شامل دو کلاس است: \f[CR]com.foo.Hello\f[R] (کلاس نقطه ورود) و \f[CR]com.foo.NameProvider\f[R] که هر دو برای JDK 8 کامپایل شده‌اند. دایرکتوری \f[CR]classes\-10/com/foo\f[R] شامل نسخه متفاوتی از کلاس \f[CR]com.foo.NameProvider\f[R] است؛ این نسخه شامل کدهای اختصاصی JDK 10 بوده و برای JDK 10 کامپایل شده است. .PP با در نظر گرفتن این پیکربندی، با اجرای دستور زیر از دایرکتوری حاوی دایرکتوری‌های \f[CR]classes\f[R] و \f[CR]classes\-10\f[R]، فایل JAR چندنسخه‌ای \f[CR]foo.jar\f[R] را ایجاد کنید. .RS .PP \f[CR]jar \-\-create \-\-file foo.jar \-\-main\-class com.foo.Hello \-C classes . \-\-release 10 \-C classes\-10 .\f[R] .RE .PP فایل JAR با نام \f[CR]foo.jar\f[R] اکنون شامل این موارد است: .IP .EX % jar \-tf foo.jar META\-INF/ META\-INF/MANIFEST.MF com/ com/foo/ com/foo/Hello.class com/foo/NameProvider.class META\-INF/versions/10/com/ META\-INF/versions/10/com/foo/ META\-INF/versions/10/com/foo/NameProvider.class .EE .PP علاوه بر سایر اطلاعات، فایل \f[CR]META\-INF/MANIFEST.MF\f[R] شامل خطوط زیر خواهد بود تا نشان دهد که این یک فایل JAR چندنسخه‌ای با نقطه ورود \f[CR]com.foo.Hello\f[R] است. .IP .EX \&... Main\-Class: com.foo.Hello Multi\-Release: true .EE .PP با فرض اینکه کلاس \f[CR]com.foo.Hello\f[R] متدی را روی کلاس \f[CR]com.foo.NameProvider\f[R] فراخوانی می‌کند، اجرای برنامه با استفاده از JDK 10 تضمین خواهد کرد که کلاس \f[CR]com.foo.NameProvider\f[R] نسخه موجود در \f[CR]META\-INF/versions/10/com/foo/\f[R] خواهد بود. اجرای برنامه با استفاده از JDK 8 تضمین می‌کند که کلاس \f[CR]com.foo.NameProvider\f[R] نسخه موجود در ریشه JAR، در \f[CR]com/foo\f[R] خواهد بود. .RE .IP \(bu 2 ساخت یک بایگانی به نام \f[CR]my.jar\f[R] با خواندن گزینه‌ها و فهرست فایل‌های کلاس از فایل \f[CR]classes.list\f[R]. .RS 2 .PP \f[B]نکته:\f[R] .PP برای کوتاه‌تر کردن یا ساده‌سازی دستور \f[CR]jar\f[R]، می‌توانید یک فایل آرگومان فراهم کنید که فایل‌های مورد نظر برای قرار گرفتن در فایل JAR را فهرست کند و آن را با علامت ات‌ساین (\f[CR]\(at\f[R]) به عنوان پیشوند به دستور \f[CR]jar\f[R] ارسال نمایید. .RS .PP \f[CR]jar \-\-create \-\-file my.jar \(atclasses.list\f[R] .RE .PP اگر یک یا چند مدخل در فایل آرگومان پیدا نشود، دستور jar بدون ساخت فایل JAR با شکست مواجه می‌شود. .RE .IP \(bu 2 استخراج فایل JAR به نام \f[CR]foo.jar\f[R] در دایرکتوری \f[CR]/tmp/bar/\f[R]: .RS 2 .RS.PP \f[CR]jar \-xf foo.jar \-C /tmp/bar/\f[R] .RE .PP به‌عنوان روش جایگزین، می‌توانید این کار را نیز انجام دهید: .RS .PP \f[CR]jar \-\-extract \-\-file foo.jar \-\-dir /tmp/bar/\f[R] .RE .RE