مقدمه#
فرض کنید به عنوان یک توسعهدهنده میخواهید پروژه خودتون رو برای استفاده کاربر منتشر کنید. آیا پروژتون رو با دهها یا صدها کلاس نوشته شده در فولدرهای مختلف در اختیار کاربر قرار میدید؟ نه! اینجاست که باید با jar آشنا بشید.
فایل jar یک فایل فشردهشده است که کلاسهای جاوا، عکس، متن و… به همراه فایل Manifest(در ادامه بهش میرسیم) را در خود جای میدهد و از فرمتهای فشردهسازی مانند zip استفاده میکند.
ساختن فایل jar#
برای شروع اول مطمئن بشید که JDK روی سیستمتون نصب است. از این لینک میتونید نسخه مورد نظرتون رو دانلود کنید.
برای ساخت فایل jar کافیست به فولدری که فایلها و کلاسها قرار گرفتهاند برویم و با دستور زیر در محیط ترمینال فایل jar ساخته میشود:
Syntax:
jar -cf jarfilename inputfiles
- jarfilename: نام فایل خروجی
- inputfiles: نام فایلهایی است که قرار است فشرده شوند
- -c: یک فایل آرشیو خالی و جدید میسازد
- -f: مشخص میکند پس از آن، نام فایل خروجی به عنوان پارامتر دریافت شود
مثال از ساخت فایل jar#

در اینجا ما با دو فایل JavaClass1.class و JavaClass2.class روبهرو هستیم و با دستور زیر یک فایل jar ساخته شده:
jar -cvf export.jar *.class
استفاده از v- فرایند فشردهسازی را در خروجی نمایش میدهد.
اگر تعداد زیادی فایل کلاس را میخواهید در فایل jar قرار دهید میتوانید از class.* استفاده کنید به جای اینکه تک تک نام فایلها را بنویسید.
مشاهده محتوای فایل jar#
پس از آنکه یک فایل jar بدست آمد، برای دیدن فایلهای موجود در آن از دستور زیر استفاده میشود:
Syntax:
jar -tf jarfilename
Example:
jar -tf export.jar
خروجی:
META-INF/
META-INF/MANIFEST.MF
JavaClass1.class
JavaClass2.class
یک فایل jar به طور پیش فرض دارای فایل Manifest میباشد و همیشه در فولدر META-INF قرار دارد.
استخراج کردن فایل jar#
برای extract کردن از دستور زیر استفاده میشود:
Syntax:
jar -xf jarfilename
Example:
jar -xf export.jar
برای extract کردن حتی میتوان از ابزارهایی که یک فایل zip را extract میکنند، استفاده کرد.
آپدیت کردن فایل jar#
اگر پروژهی ما یک پروژهی حجیم و بزرگی باشد، پس از تغییراتی که در پروژه اعمال میکنیم، برای تبدیل آن به فایل جدید jar زمان طولانی صرف میشود. در اینجا بهتر است به جای ساختن یک فایل جدید jar، فایل قبلی را آپدیت بکنیم.
برای آپدیت کردن محتوای فایل از دستور زیر استفاده میکنیم:
Syntax:
jar -uf jar-file input-file(s)
Example:
java -uf export.jar *.class
بعد از نوشتن نام فایل jar مورد نظر، فایلها و کلاسهایی را که میخواهیم آپدیت بکنیم مینویسیم. این امکان باعث میشود تا به جای اینکه دوباره تمام فایلها را فشرده بکنیم، فقط فایلهایی که تغییرات داشتنند را جایگزین فایلهای قبلی در jar بکنیم.
قابلیت اجرا شدن فایل jar#
پیش از آنکه یاد بگیریم چگونه یک فایل jar را اجرا کنیم، باید آن را برای اجرا شدن آمادهسازی کنیم.
فرض میکنیم در پروژه، کلاسی با نام Main.class ساختهایم و در آن متد main را پیادهسازی کردهایم. اکنون باید به فایل jar بفهمانیم که متد main در چه کلاسی قرار دارد تا هنگام اجرا شدن jar، آن را اجرا کند. با استفاده از دستور زیر هنگام ساخت فایل jar این امکان را اضافه میکنیم:
Syntax:
jar -cfe jarfilename mainclass import-files
Example:
jar -cfe export.jar Main client.class server.class logo.jpeg
توجه کنید که کلاس Main بدون class. نوشته میشود.
روش دیگری هم برای اضافه کردن Main وجود دارد که در ادامه در مبحت Manifest به آن میرسیم.
اکنون میتوان فایل jar خود را با دستور زیر اجرا کرد:
Syntax:
java -jar jarfilename
Example:
java -jar export.jar
فایل Manifest#
زمانی که یک فایل jar ساخته میشود به صورت اتوماتیک در آن فایل Manifast هم ساخته میشود. حالا اصلا Manifast چی است؟

هر فایل jar یک فایل Manifest دارد که جزئیات و اطلاعات آن در Manifest نوشته شده است. نام این فایل به صورت پیش فرض MANIFEST.MF نامگذاری شده و در فولدر META-INF قرار دارد. در تصویر بالا نمونهای از این فایل آمدهاست؛ حتی میتواند شامل جزئیات بیشتری باشد.
ورودی فایل Manifest از دو قسمت تشکیل شده است، نام و مقدار. نوشتن نام و مقدارهای Manifest چند نکته دارد که به آن میپردازیم:
باید یک اسپیس پس از ":" و قبل از مقدار باشد.
بعد از آخرین خط، یک خط باید خالی باشد.
متن باید از انکودر UTF-8 استفاده کند.
وقتی کلاس main را مشخص میکنیم نباید پسوند class. را پس از آن بنویسیم.
آپدیت کردن فایل Manifest#

اگر فایل jar را ساختهایم و میخواهیم تغییراتی روی فایل Manifest بدهیم؛ ابتدا یک فایل txt. میسازیم و سپس برای اعمال تغییرات از دستور زیر استفاده میکنیم:
Example:
jar -ufm export.jar manifest.txt
شناساندن کلاس main از طریق Manifest
در قسمتهای بالاتر توضیح داده شد که چگونه هنگام ساخت یک فایل jar، کلاس main را برای اجرا شدن به آن اضافه کنیم. حال اگر فایل jar را قبلا ساخته باشیم و کلاس main را به آن اضافه نکرده باشیم، کافیست خط زیر را به فایل Manifest اضافه کنیم:
Main-Class: Main
حتما دقت کنید که class. پس از آن را نباید بنویسیم.
استفاده از IDE#
تا به این جا با jar و با انواع دستورهاش آشنا شدیم. اگر پروژهی ما از کتابخانههای خارجی استفاده میکرد، قرار دادن این کتابخانهها در فایل jar کمی پیچیده میشد. محیطهای توسعه قابلیتهای پیشرفتهای در اختیارمان قرار میدهند که کار را برای ما سادهتر میکنند. در این قسمت ساختن یک فایل jar را در IntelliJ بررسی میکنیم.

ابتدا از نوار بالا گزینه File را انتخاب میکنیم و به قسمت Artifacts میرویم.
روی علامت + و سپس روی jar کلیک میکنیم. گزینهی From modules with dependencies انتخاب میکنیم.
در فیلدهای پیش رو میتوان کلاس Main را انتخاب کرد.
در انتها روی OK کلیک میکنیم.
در صفحه اصلی نرمافزار از نوار بالا روی Build و سپس Build Artifacts کلیک میکنیم.
فایل jar مورد نظر را انتخاب کنید تا فرایند ساخت فایل jar آغاز شود.
فایلهای jar به طور پیش فرض در مسیر out/artifacts قرار میگیرد.