| jar(1) | Basic Tools | jar(1) |
نام (NAME)
jar - مدیریت و دستکاری فایلهای آرشیو جاوا (JAR).
خلاصه دستور (SYNOPSIS)
ایجاد فایل JAR
jar c[efmMnv0] [entrypoint] [jarfile] [manifest] [-C dir] file ... [-Joption ...] [@arg-file ...]
بهروزرسانی فایل JAR
jar u[efmMnv0] [entrypoint] [jarfile] [manifest] [-C dir] file ... [-Joption ...] [@arg-file ...]
استخراج فایل JAR
jar x[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]
فهرست کردن محتویات فایل JAR
jar t[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]
افزودن نمایه به فایل JAR
jar i jarfile [-Joption ...] [@arg-file ...]دستور jar یک ابزار همهمنظوره برای بایگانی و فشردهسازی بر پایهٔ ZIP و قالب فشردهسازی ZLIB است. با این حال، دستور jar اساساً برای بستهبندی اپلتها یا برنامههای Java در یک بایگانی واحد طراحی شده است. زمانی که اجزای یک اپلت یا برنامه (فایلها، تصاویر و صداها) در یک بایگانی واحد ترکیب میشوند، میتوانند توسط یک کارگزار Java (مانند یک مرورگر) در یک تراکنش HTTP واحد بارگیری شوند، بهجای اینکه برای هر قطعه به یک اتصال جدید نیاز باشد. این امر زمان بارگیری را بهطور چشمگیری بهبود میبخشد. دستور jar همچنین فایلها را فشرده میکند که این نیز زمان بارگیری را بیش از پیش کاهش میدهد. این دستور به نویسندهٔ اپلت امکان میدهد که مدخلهای منفرد فایل را امضا کند تا اصالت مبدأ آنها قابل تأیید باشد. یک فایل JAR، فارغ از اینکه فشرده شده باشد یا نه، میتواند به عنوان یک مدخل class path استفاده شود.
نحو دستور jar شبیه نحو دستور tar است. این دستور چندین حالت عملیاتی دارد که توسط یکی از آرگومانهای عملیات اجباری تعیین میشوند. سایر آرگومانها یا گزینههایی هستند که رفتار عملیات را تغییر میدهند، یا عملوندهایی هستند که برای اجرای عملیات ضروریاند.
آرگومانهای عملیات (OPERATION ARGUMENTS)
هنگام استفاده از دستور jar، باید با تعیین یکی از آرگومانهای عملیات زیر، عملیاتی را که میخواهید اجرا شود انتخاب کنید. میتوانید آنها را با گزینههای تکحرفی دیگر در خط فرمان ترکیب کنید، اما معمولاً آرگومان عملیات نخستین آرگومان مشخصشده است.
گزینهها (OPTIONS)
از گزینههای زیر برای سفارشیسازی نحوهٔ ایجاد، بهروزرسانی، استخراج یا مشاهدهٔ فایل JAR استفاده کنید:
- e
- کلاس
مشخصشده
توسط
عملوند entrypoint
را به عنوان
نقطهٔ ورود
(entry point) برای یک
برنامهٔ
مستقل Java که
درون یک
فایل JAR
اجرایی
بستهبندی
شده است
تعیین
میکند.
استفاده از
این گزینه
مقدار
مشخصهٔ Main-Class
را در فایل
مانیفست
ایجاد کرده
یا
بازنویسی
میکند.
گزینهٔ e را
میتوان
هنگام
ایجاد (c) یا
بهروزرسانی
(u) فایل JAR به
کار برد.
برای نمونه، دستور زیر بایگانی Main.jar را همراه با فایل Main.class ایجاد میکند که در آن مقدار مشخصهٔ Main-Class در مانیفست بر روی Main تنظیم شده است:
jar cfe Main.jar Main Main.class
محیط زمان اجرای جاوا (JRE) میتواند با اجرای دستور زیر این برنامه را مستقیماً فراخوانی کند:
java -jar Main.jar
اگر نام کلاس نقطهٔ ورود درون یک پکیج باشد، میتوان از نقطه (.) یا ممیز (/) به عنوان جداکننده استفاده کرد. برای نمونه، اگر Main.class در پکیجی با نام mydir قرار داشته باشد، نقطهٔ ورود میتواند به یکی از روشهای زیر مشخص شود:
jar -cfe Main.jar mydir/Main mydir/Main.class
jar -cfe Main.jar mydir.Main mydir/Main.class
نکته
مشخص کردن همزمان هر دو گزینهٔ m و e هنگامی که یک مانیفست مشخص از پیش دارای مشخصهٔ Main-Class باشد، موجب ابهام در تعیین Main-Class میشود. این ابهام به بروز خطا منجر شده و عملیات ایجاد یا بهروزرسانی دستور jar متوقف میگردد.
- f
- فایلی را که توسط عملوند jarfile مشخص شده است، به عنوان نام فایل JAR که ایجاد میشود (c)، بهروزرسانی میشود (u)، محتوای آن استخراج میشود (x) یا مشاهده میشود (t) تعیین میکند. حذف گزینهٔ f و عملوند jarfile به دستور jar اعلام میکند که نام فایل JAR را از stdin دریافت کند (برای x و t) یا فایل JAR را به stdout بفرستد (برای c و u).
- m
- نامها و
مقادیر
مشخصهها
را از فایلی
که با
عملوند manifest
تعیین شده
است، در
فایل
مانیفست
دستور jar
(واقع در
بایگانی در
مسیر META-INF/MANIFEST.MF)
میگنجاند.
دستور jar
نام و مقدار
مشخصه را به
فایل JAR
میافزاید
مگر اینکه
مدخلی با
همان نام از
پیش وجود
داشته
باشد، که در
این حالت
دستور jar
مقدار آن
مشخصه را
بهروزرسانی
میکند.
گزینهٔ m را
میتوان
هنگام
ایجاد (c) یا
بهروزرسانی
(u) فایل JAR به
کار برد.
میتوانید جفتهای نام-مقدارِ مشخصه با کاربردهای ویژه را که در فایل مانیفست پیشفرض وجود ندارند به مانیفست بیفزایید. برای نمونه، میتوانید مشخصههایی برای تعیین اطلاعات سازنده (vendor)، اطلاعات انتشار، مهروموم کردن پکیج (package sealing)، یا اجرایی کردن برنامههای بستهبندیشده در JAR اضافه کنید. برای مشاهدهٔ مثالهایی از کاربرد گزینهٔ m، بخش Packaging Programs را در http://docs.oracle.com/javase/tutorial/deployment/jar/index.html ببینید.
- M
- مدخل فایل مانیفست ایجاد نمیکند (برای c و u)، یا در صورت وجود، مدخل فایل مانیفست را حذف میکند (برای u). گزینهٔ M را میتوان هنگام ایجاد (c) یا بهروزرسانی (u) فایل JAR استفاده کرد.
- n
- هنگام ایجاد (c) یک فایل JAR، این گزینه بایگانی را عادیسازی (normalize) میکند تا محتوای آن تحت تأثیر عملیات بستهبندی و باز کردنِ دستور pack200(1) قرار نگیرد. بدون این عادیسازی، ممکن است امضای یک فایل JAR دارای امضا نامعتبر شود.
- v
- خروجی پرگو (verbose) را در خروجی استاندارد تولید میکند. بخش «مثالها» را ببینید.
- 0
- (صفر) فایل JAR را بدون استفاده از فشردهسازی ZIP ایجاد (c) یا بهروزرسانی (u) میکند.
- -C dir
-
هنگام ایجاد (c) یا بهروزرسانی (u) یک فایل JAR، این گزینه در حین پردازش فایلهای مشخصشده توسط عملوندهای file، دایرکتوری را موقتاً تغییر میدهد. عملکرد آن مشابه گزینهٔ -C در ابزار UNIX tar طراحی شده است. برای نمونه، دستور زیر به دایرکتوری classes تغییر مسیر داده و فایل Bar.class را از آن دایرکتوری به my.jar میافزاید:jar uf my.jar -C classes Bar.class
دستور زیر به دایرکتوری classes تغییر مسیر داده و تمام فایلهای درون آن دایرکتوری را (بدون ایجاد دایرکتوری classes در فایل JAR) به my.jar میافزاید، سپس پیش از تغییر مسیر به دایرکتوری bin جهت افزودن Xyz.class به my.jar، به دایرکتوری اولیه بازمیگردد.
jar uf my.jar -C classes . -C bin Xyz.class
اگر classes شامل فایلهای bar1 و bar2 باشد، فایل JAR پس از اجرای دستور قبلی حاوی موارد زیر خواهد بود:
% jar tf my.jar
META-INF/
META-INF/MANIFEST.MF
bar1
bar2
Xyz.class
- -Joption
- گزینهٔ مشخصشدهٔ JVM را برای استفاده در زمان اجرای فایل JAR توسط JRE تنظیم میکند. گزینههای JVM در صفحهٔ راهنمای مرجع دستور java(1) شرح داده شدهاند. برای نمونه، -J-Xms48m مقدار حافظهٔ اولیه هنگام راهاندازی را روی 48 مگابایت تنظیم میکند..SH "عملوندها (OPERANDS)" عملوندهای زیر توسط دستور jar شناسایی میشوند.
- file
- هنگام ایجاد (c) یا بهروزرسانی (u) یک فایل JAR، عملوند file مسیر و نام فایل یا دایرکتوریای را که باید به آرشیو افزوده شود مشخص میکند. هنگام استخراج (x) یا فهرست کردن محتویات (t) یک فایل JAR، عملوند file مسیر و نام فایل مورد نظر برای استخراج یا فهرست شدن را مشخص میکند. حداقل یک فایل یا دایرکتوری معتبر باید مشخص شود. عملوندهای چندگانهٔ file را با فاصله از هم جدا کنید. در صورت استفاده از عملوندهای entrypoint، jarfile یا manifest، عملوندهای file باید پس از آنها مشخص شوند.
- entrypoint
- هنگام ایجاد (c) یا بهروزرسانی (u) یک فایل JAR، عملوند entrypoint نام کلاسی را مشخص میکند که باید نقطهٔ ورود برای یک برنامهٔ مستقل Java بستهبندیشده در یک فایل JAR اجرایی باشد. اگر گزینهٔ e مشخص شده باشد، عملوند entrypoint نیز باید مشخص شود.
- jarfile
- نام فایلی
را مشخص
میکند که
قرار است
ایجاد (c)،
بهروزرسانی
(u)،
استخراج (x)
یا مشاهده
(t) شود. در
صورت وجود
گزینهٔ f،
عملوند jarfile
باید مشخص
شود. نادیده
گرفتن
گزینهٔ f و
عملوند jarfile
به دستور jar
اعلام
میکند که
نام فایل JAR
را از stdin
دریافت کند
(برای x و t)
یا فایل JAR را
به stdout
بفرستد
(برای c و u).
هنگام ایندکس کردن (i) یک فایل JAR، عملوند jarfile را بدون گزینهٔ f مشخص کنید.
- manifest
- هنگام ایجاد (c) یا بهروزرسانی (u) یک فایل JAR، عملوند manifest فایلهای مانیفست از پیش موجود را به همراه نامها و مقادیر مشخصههایی که باید در MANIFEST.MF فایل JAR گنجانده شوند مشخص میکند. اگر گزینهٔ f وجود داشته باشد، عملوند manifest باید مشخص شود.
- @arg-file
- برای کوتاه
کردن یا
سادهسازی
دستور jar،
میتوانید
آرگومانها
را در یک
فایل متنی
جداگانه
مشخص کرده و
آن را با
پیشوند
علامت ات (@)
به دستور jar
ارسال کنید.
هنگامی که
دستور jar به
آرگومانی
میرسد که
با علامت ات
شروع
میشود،
محتویات آن
فایل را در
فهرست
آرگومانها
گسترش
میدهد.
یک فایل آرگومان میتواند شامل گزینهها و آرگومانهای دستور jar باشد (بهجز گزینههای -J، زیرا آنها به اجراکننده (launcher) ارسال میشوند که از فایلهای آرگومان پشتیبانی نمیکند). آرگومانهای درون فایل را میتوان با فاصله یا نویسههای خط جدید از یکدیگر جدا کرد. نامهای فایل درون یک فایل آرگومان نسبت به دایرکتوری جاری که دستور jar را از آن اجرا میکنید سنجیده میشوند، نه نسبت به مکان فایل آرگومان. نویسههای عام (Wildcard) مانند ستاره (*)، که در حالت عادی توسط شل سیستمعامل باز میشوند، در اینجا باز نمیشوند.
مثال زیر نشان میدهد که چگونه یک فایل classes.list با نام فایلهای موجود در دایرکتوری جاری که از خروجی دستور find به دست آمده است، ایجاد کنید:
find . -name '*.class' -print > classes.list
سپس میتوانید دستور jar را اجرا کرده و فایل classes.list را با استفاده از نحو @arg-file به آن ارسال کنید:
jar cf my.jar @classes.list
یک فایل آرگومان میتواند همراه با یک مسیر مشخص شود، اما نام هر فایلی درون فایل آرگومان که دارای مسیر نسبی است نسبت به دایرکتوری کاری جاری دستور jar در نظر گرفته میشود، نه نسبت به مسیر ارسالشده؛ برای مثال:
jar @dir/classes.list
نکات (NOTES)
گزینههای e، f و m در خط فرمان باید دقیقاً به همان ترتیبی ظاهر شوند که عملوندهای entrypoint، jarfile و manifest مشخص شدهاند؛ برای مثال:
jar cmef myManifestFile MyMainClass myFile.jar *.class
مثالها (EXAMPLES)
مثال ۱ افزودن تمام فایلها از دایرکتوری جاری همراه با خروجی پرجزئیات
% ls
1.au Animator.class monkey.jpg
2.au Wave.class spacemusic.au
3.au at_work.gif
% jar cvf bundle.jar *
added manifest
adding: 1.au(in = 2324) (out= 67)(deflated 97%)
adding: 2.au(in = 6970) (out= 90)(deflated 98%)
adding: 3.au(in = 11616) (out= 108)(deflated 99%)
adding: Animator.class(in = 2266) (out= 66)(deflated 97%)
adding: Wave.class(in = 3778) (out= 81)(deflated 97%)
adding: at_work.gif(in = 6621) (out= 89)(deflated 98%)
adding: monkey.jpg(in = 7667) (out= 91)(deflated 98%)
adding: spacemusic.au(in = 3079) (out= 73)(deflated 97%)
مثال ۲ افزودن فایلها از زیردایرکتوریها
% ls -F
audio/ classes/ images/
% jar cvf bundle.jar audio classes images
added manifest
adding: audio/(in = 0) (out= 0)(stored 0%)
adding: audio/1.au(in = 2324) (out= 67)(deflated 97%)
adding: audio/2.au(in = 6970) (out= 90)(deflated 98%)
adding: audio/3.au(in = 11616) (out= 108)(deflated 99%)
adding: audio/spacemusic.au(in = 3079) (out= 73)(deflated 97%)
adding: classes/(in = 0) (out= 0)(stored 0%)
adding: classes/Animator.class(in = 2266) (out= 66)(deflated 97%)
adding: classes/Wave.class(in = 3778) (out= 81)(deflated 97%)
adding: images/(in = 0) (out= 0)(stored 0%)
adding: images/monkey.jpg(in = 7667) (out= 91)(deflated 98%)
adding: images/at_work.gif(in = 6621) (out= 89)(deflated 98%)
% ls -F
audio/ bundle.jar classes/ images/
مثال ۳ فهرست کردن محتویات JAR
% jar tf bundle.jar META-INF/
META-INF/MANIFEST.MF
audio/1.au
audio/2.au
audio/3.au
audio/spacemusic.au
classes/Animator.class
classes/Wave.class
images/monkey.jpg
images/at_work.gif
مثال ۴: افزودن یک نمایه
از گزینهٔ i زمانی استفاده کنید که کلاسهای وابسته به یکدیگر را برای یک برنامهٔ دادوستد سهام به سه فایل JAR تقسیم میکنید: main.jar، buy.jar و sell.jar. اگر مشخصهٔ Class-Path را در مانیفستِ main.jar مشخص کنید، میتوانید از گزینهٔ i برای افزایش سرعت زمان بارگذاری کلاس در برنامهٔ خود استفاده کنید:
Class-Path: buy.jar sell.jar
jar i main.jar
یک فایل INDEX.LIST در دایرکتوری META-INF درج میشود. این کار به بارگذار کلاس برنامه امکان میدهد تا هنگام جستوجو برای کلاسها یا منابع، فایلهای JAR مشخصشده را دریافت کند.
بارگذار کلاس برنامه از اطلاعات ذخیرهشده در این فایل برای بارگذاری بهینهٔ کلاسها استفاده میکند. برای کپی کردن دایرکتوریها، ابتدا فایلهای موجود در dir1 را به stdout فشرده کنید، سپس لولهکشی کرده و از stdin به dir2 استخراج نمایید (با حذف گزینهٔ -f از هر دو دستور jar):
(cd dir1; jar c .) | (cd dir2; jar x)
همچنین ببینید (SEE ALSO)
- •
- pack200(1).
- •
- بخش JAR در آموزشهای جاوا (The Java Tutorials) در http://docs.oracle.com/javase/tutorial/deployment/jar/index.html
| 21 November 2013 | JDK 8 |