.\" Automatically generated by Pandoc 3.10.2 .\" .TH "JAR" "1" "2026" "JDK 25.0.4.1" "دستورات JDK" .SH "نام (NAME)" jar-openjdk25 \- ابزار ایجاد، مشاهده و مدیریت بسته‌های آرشیو JAR در OpenJDK 25 .SH "خلاصه دستور (SYNOPSIS)" \f[CR]jar\f[R] [\f[I]گزینه\f[R] ...] [ [\f[CR]\-\-release\f[R] \f[I]نسخه\f[R]] [\f[CR]\-C\f[R] \f[I]پوشه\f[R]] \f[I]فایل‌ها\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 هنگامی که یک توصیف‌گر ماژول، یعنی \f[CR]module\-info.class\f[R] را در ریشه پوشه‌های داده‌شده یا در ریشه آرشیو \f[CR].jar\f[R] قرار دهید، آن آرشیو به یک JAR ماژولار تبدیل می‌شود. عملیات‌های زیر که در \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] اطلاعات ایندکس را برای فایل 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]یکپارچگی و سلامت فایل JAR\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]فایل‌ها\f[R]ی مشخص‌شده در انتهای خط فرمان را شامل می‌کند. .RS \f[CR]jar\f[R] [\f[I]گزینه\f[R] ...] [ [\f[CR]\-\-release\f[R] \f[I]نسخه\f[R]] [\f[CR]\-C\f[R] \f[I]پوشه\f[R]] \f[I]فایل‌ها\f[R]] هنگامی که همراه با حالت عملیاتی استخراج (extract) استفاده شود، پوشه مقصدی را که فایل JAR در آن استخراج می‌شود مشخص می‌کند. برخلاف حالت ایجاد، این گزینه در حالت استخراج فقط یک بار می‌تواند مشخص شود. .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] آن با شماره نسخه اصلی JDK مطابقت دارد جستجو می‌کند. سپس پوشه‌های دارای شماره‌های \f[I]VERSION\f[R] پایین‌تر را بررسی می‌کند و در نهایت ریشه فایل JAR را می‌جوید. .RE .TP \f[CR]\-v\f[R] یا \f[CR]\-\-verbose\f[R] خروجی مشروح را به خروجی استاندارد ارسال کرده یا چاپ می‌کند. .SH "تغییردهنده‌های عملیات معتبر فقط در حالت‌های ایجاد و به‌روزرسانی (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] نقطه ورود برنامه را برای برنامه‌های مستقلی که در یک فایل 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 "تغییردهنده‌های عملیات معتبر در حالت‌های ایجاد، به‌روزرسانی و تولید ایندکس (OPERATION MODIFIERS VALID ONLY IN CREATE, UPDATE, AND GENERATE\-INDEX MODES)" می‌توانید از گزینه‌های زیر برای سفارشی‌سازی رفتارهای حالت‌های اصلی ایجاد (\f[CR]\-c\f[R] یا \f[CR]\-\-create\f[R])، به‌روزرسانی (\f[CR]\-u\f[R] یا \f[CR]\-\-update\f[R]) و تولید ایندکس (\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..\(aq نباشد .RE .IP \(bu 2 تطابق و سازگاری API صادرشده توسط آرشیو jar چندنسخه‌ای در تمام نسخه‌های مختلف. .PP ابزار jar در صورتی که هیچ مشکلی در یکپارچگی مشاهده نشود با وضعیت 0 و در صورت بروز خطا یا هشدار با مقداری بزرگتر از صفر (>0) خارج می‌شود. .PP هنگامی که یک مشکل یکپارچگی گزارش می‌شود، اغلب نیاز است که فایل JAR توسط منبع اصلی تولیدکننده آن مجدداً ایجاد شود. .SH "مثال‌ها (EXAMPLES)" .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 چندنسخه‌ای به نام \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 با این ساختار، فایل JAR چندنسخه‌ای \f[CR]foo.jar\f[R] را با اجرای دستور زیر از داخل پوشه‌ای که حاوی پوشه‌های \f[CR]classes\f[R] و \f[CR]classes\-10\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]، می‌توانید یک فایل آرگومان (arg file) شامل فهرست فایل‌های مورد نظر برای گنجاندن در 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