# فناوری جاوا > برنامه‌نویسی جاوا > بحث و گفتگو در مورد فناوری های مرتبط با جاوا >  ساخت Setup و Deployment جاوا

## abarkarbar

با سلام

بنده مدت هاست روی ایجاد فایل نصبی پروژه های جاوا تحقیق می کنم. یافته ها و مشکلات موجود و راه حل ها را تا حدی که یافته ام در اینجا خدمت دوستان ارائه می دم. مشابه این تاپیک در بخش ASP هست ولی در بخش جاوا وجود نداشت که بنده ایجاد کردم تا دوستان مطالب خود را به اشتراک بگذارند.

هدف ما روی برنامه کوچکی است که با جاوا برای ویندوز ساخته شده است که می خواهیم فایل نصبی و انتشار آن را ایجاد کنیم و به راحتی به هر سیستمی میخواهیم نصب کنیم انتقال دهیم و نصب را انجام بدیم.

بنده از نرم افزارهای زیر استفاده کرده ام:


Advanced InstallerInstall 4jNSIS NullSoftJSmoothizPackInno Setup Compiler 

می خواهم از پکیج برنامه ساخته شده در جاوا یک فایل اجرایی ویندوز .exe حالا یا .msi ساخته بشه که کاربر با اجرای آن مرحله به مرحله install انجام بده. ولی مشکلی که دارم اینه که پایگاه داده MySQL را نمی دونم چه کنم، و نیز وقتی فایل نصبی ساخته میشه بعد از نصب، در واقع همه فایل های .java و .class ها را کپی می کنه، کار خاصی نکرده. من نمیخواهم برنامه نصب شده به صورت فایل های جاوا و کلاس های آن در جای مقصد باشه باید این فایل ها به یه چیزهای دیگه تبدیل بشند عین همه برنامه نصبی دیگه که از اینترنت دریافت کرده و نصب می کنیم، مگه در اونها فایل های جاوا و کلاس ها به صورت آشکار وجود داره.

باید چگونه این کار را کرد؟ /

----------


## محمد فدوی

اولا بهتره برنامه رو در نهایت به صورت یک بستهٔ jar در بیارید و اجرا کنید و نه به صورت چندین فایل class کنار هم.
ثانیا در عمل برای برنامه‌های جاوا چیزی به اسم «نصب کردن» بی‌معنیه. همین که JRE نصب باشه، فایل jar قابل اجراست (هرجا که باشه).
من اگر بودم خیلی ساده با یک چارچوب محلی (مثلا MFC یا امثالش توی ویندوز) برنامه‌ٔ کوچکی می‌نوشتم که پرونده‌ها و پوشه‌های برنامه‌ها رو به محل موردنظر منتقل کنه، قوانین استفاده از نرم‌افزار و حق‌نشرش رو نمایش بده، در صورت لزوم نصاب MySQL رو اجرا کنه و در نهایت پایگاه‌دادهٔ موردنیاز رو ایجاد کنه..
نوشتن چنین برنامه‌‌ای که همون نصابه اصلا کاری نداره. اما به هرحال برنامه‌های آماده هم زیاد هست که با یه جستجو می‌تونید تعداد زیادیشون رو پیدا کنید.

----------


## abarkarbar

با تشکر از پاسخ شما بنده طی مدتی به چیزهایی تونستم دست بیابم و تا حدودی کاری را که می خواستم، عملی کردم. اینجا شرح مختصری میدم تا هم دوستان استفاده ای کرده باشند هم هنوز مشکلات کوچکی وجود دارد که می توان روی آن فکر کرد.

بله همینطور است، بنده برنامه را به صورت یک فایل .jar اجرا می کنم، این فایل از برنامه در NetBeans بعد از کامپایل برنامه ساخته می شه و کلاس ها و فایل های برنامه را یکجا جمع می کنه و فایل .jar تشکیل می ده.

*آنچه که من یافتم:

*برای ساخت فایل نصبی برنامه نوشته شده جاوا در ابتدا نیاز به دو گونه فایل دارید: 


فایل .jar برنامهفایل .exe برنامه 

ابتدا فایل .jar از برنامه موردنظر دارید که از روی آن باید یک فایل اجرایی ویندوز .exe بسازید. فایل exe از روی فایل جار از طریق برنامه های زیادی مانند Launch5j ، JSooth ، NSIS و غیره به راحتی می توان ساخت. بنده از Launch4j استفاده کرده ام.

بعد از اینکه این فایل ها را در دست داشتید می توانید نرم افزار Inno Setup Compiler را به کار ببرید که برای شما یک نصب برنامه با جزئیات کافی از روی فایل اجرایی می سازد. این نرم افزار برمبنای اسکریپت عمل کرده فایل اجرایی شما را با بسته بندی در فایل نصبی ویندوز به شما ارائه می دهد که کاربر می تواند برای نصب از آن فایل استفاده کرده و مرحله به مرحله نصب را انجام دهد.

نمونه ای از ساخت برنامه نصبی بنده در مرحله آخر در زیر نشان داده شده است:

sssss.png



حال که فایل نصبی برنامه را ساختیم چند مشکل وجود دارد که می توان روی آنها فکر کرد.


*پیاده سازی پایگاه داده قابل حمل* 

بنده تحقیقی که کردم برای اینکه بهتر و سریع به نتیجه برسیم برای برنامه های دسکتاپ بهتر است از پایگاه داده هایی در جاوا استفاده کنیم که قابل حمل باشند و به بتوانند به صورت توکار (Embedded) در برنامه جاوا قرار گیرند. از جمله پایگاه داده های SQLite ، Derby برای این منظور مناسب هستند. شما با استفاده از این پایگاه داده ها تنها یک فایل درایور .jar در حد 6 مگابایت را به برنامه خود اضافه می کنید.

حال برای برنامه ای که از MySQL استفاد کند، کار کمی سخت تر است. برای استفاده از MySQL باید به روشی آن را در نصب برنامه اضافه نمایید که برنامه هنگام نصب در سیستم کاربر، آن را چک کند که در سیستم ایشان اگر نصب نشده بوده باشد، به عنوان بخشی از عملیات نصب، MySQL را هم در ادامه به صورت خودکار نصب نماید.


*مخفی بودن فایل های برنامه*  

مسأله دوم که بنده با آن مواجه شدم این است که وقتی فایل .exe از پکیج برنامه ساخته میشود، آن را میتوان دوباره عین فایل زیپ از حالت فشرده بودن خارج کرد که در این صورت فایل های برنامه کلاس ها و غیره آشکار می شوند. فایل کلاس ها کامپایل شده هستند و ناخوانا هستند و مشکلی ندارد که کاربر بتواند آن ها ببیند. ولی بنده از JavaFX FXML ها استفاده کنم. GUI ها را از طریق فایل های FXML ساخته ام که این فایلها به صورت کامل استخراج می شوند و کاربر می تواند آنها را مشاهده کند/


*اضافه کردن جاوا JRE به برنامه به منظور نصب در سیستم مقصد* 

در واقع برنامه جاوا برای اجرا نیازمند JRE متناسب نصب شده در سیستم هدف می باشد. برای این منظور در هنگام اولین اجرا ابتدا باید بررسی کرده اگر در سیستم JRE یافت نشد باید پیغام مناسبی ارائه کند. در نصب ساز این پیغام و ورژن JRE مورد بررسی تنظیم می شود.

در ساده ترین شکل، می توان فایل JRE را در کنار فایل نصبی برنامه منتشر کرد که برنامه تنها پیغام نبودن JRE را می دهد و کاربر آن را برداشته و نصب می کند و برنامه را اجرا می کند.

ولی ایده آل این است که که خود برنامه در هنگام نصب به طور خودکار نصب JRE را هم در صورت نیاز انجام دهد، که نیازمند JRE جاسازی شده در داخل فایل واحد نصب می باشد که و البته حجم آن را افزایش می دهد (البته می توان با حذف کلاس ها و قسمت هایی از آن که برای سیستم عامل های دیگر مثلاً لینوکس تهیه شده، حجم آن را بسیار کاهش داد). /

----------


## abarkarbar

من نمیدونم چرا استقبالی از این موضوع نشده این همه در فروم های خارجی توسعه دهندگان با جاوا کار می کنند و مسأله نصب در سیستم مقصد وجود داره.

----------


## mostafabahrami

> اولا بهتره برنامه رو در نهایت به صورت یک بستهٔ jar در بیارید و اجرا کنید و نه به صورت چندین فایل class کنار هم.
> ثانیا در عمل برای برنامه‌های جاوا چیزی به اسم «نصب کردن» بی‌معنیه. همین که JRE نصب باشه، فایل jar قابل اجراست (هرجا که باشه).
> من اگر بودم خیلی ساده با یک چارچوب محلی (مثلا MFC یا امثالش توی ویندوز) برنامه‌ٔ کوچکی می‌نوشتم که پرونده‌ها و پوشه‌های برنامه‌ها رو به محل موردنظر منتقل کنه، قوانین استفاده از نرم‌افزار و حق‌نشرش رو نمایش بده، در صورت لزوم نصاب MySQL رو اجرا کنه و در نهایت پایگاه‌دادهٔ موردنیاز رو ایجاد کنه..
> نوشتن چنین برنامه‌‌ای که همون نصابه اصلا کاری نداره. اما به هرحال برنامه‌های آماده هم زیاد هست که با یه جستجو می‌تونید تعداد زیادیشون رو پیدا کنید.


************
با سلام
 همونطور که آقای محمد فدوی هم گفتن برای اجرای برنامه نوشته شده به زبان جاوا، برای JRE و JVM وجود همون فایل بسته jar کفایت میکنه، بهتر و درستش اینه که فقط به فایل jar و یا class.  احتیاج دارن چه ما خوشمون بیاد چه نیاد. باید دید منظور از setup چیه؟ 
خدمت abarkarbarعزیز باید بگم اگه فقط میخای کاربر، تنظیمات و کپی فایلهای و نصب پکیجهای لازم و .... رو که یه کار تخصصیه انجام نده، خب بله میشه setup درست کرد و مشکلی نیست و اصلا لازمه. اما اگه منظورت اینه که بخوای فایل exe درست کنی که نخای فایل jar بدی دست کاربر خب این کار نشدنیه چون اگه exe  هم بسازی در اصل میره همون jar رو اجرا میکنه و اگه برنامه ت به تنظیمات خاص و کار خاصی احتیاج نداره میتونی یه batch فایل بسازی و با استفاده از دستورات جاوا فایلت رو اجرا کنی . چون اگه قرار بود جاوا هم exe داشته باشه که مزیت "مستقل بودن از پلتفرم" از بین میرفت. چون ساخت فایل exe نرم افزار رو کاملا به ماشین وابسته میکنه .
با این حال نرم افزار install shield یکی از قویترین ها ست و خیلی امکانات داره یه دوری توش بزن.

----------


## abarkarbar

> ************
> با سلام
>  همونطور که آقای محمد فدوی هم گفتن برای اجرای برنامه نوشته شده به زبان جاوا، برای JRE و JVM وجود همون فایل بسته jar کفایت میکنه، بهتر و درستش اینه که فقط به فایل jar و یا class.  احتیاج دارن چه ما خوشمون بیاد چه نیاد. باید دید منظور از setup چیه؟ 
> خدمت abarkarbarعزیز باید بگم اگه فقط میخای کاربر، تنظیمات و کپی فایلهای و نصب پکیجهای لازم و .... رو که یه کار تخصصیه انجام نده، خب بله میشه setup درست کرد و مشکلی نیست و اصلا لازمه. اما اگه منظورت اینه که بخوای فایل exe درست کنی که نخای فایل jar بدی دست کاربر خب این کار نشدنیه چون اگه exe  هم بسازی در اصل میره همون jar رو اجرا میکنه و اگه برنامه ت به تنظیمات خاص و کار خاصی احتیاج نداره میتونی یه batch فایل بسازی و با استفاده از دستورات جاوا فایلت رو اجرا کنی . چون اگه قرار بود جاوا هم exe داشته باشه که مزیت "مستقل بودن از پلتفرم" از بین میرفت. چون ساخت فایل exe نرم افزار رو کاملا به ماشین وابسته میکنه .
> با این حال نرم افزار install shield یکی از قویترین ها ست و خیلی امکانات داره یه دوری توش بزن.


با تشکر از پاسخ شما، در واقع هدف از ساخت نصب هردوی اینها هست هم کاربر طبق عرف تنظیمات و کپی فایل ها و پکیج های لازم رو انجام بده هم اینکه به کاربر به جای فایل .jar فایل exe داده بشه. به نکته خوبی اشاره کردید. آیا آخیراً با Install Shield روی پروژه جاوا کار کردید؟

----------


## mostafabahrami

> با تشکر از پاسخ شما، در واقع هدف از ساخت نصب هردوی اینها هست هم کاربر طبق عرف تنظیمات و کپی فایل ها و پکیج های لازم رو انجام بده هم اینکه به کاربر به جای فایل .jar فایل exe داده بشه. به نکته خوبی اشاره کردید. آیا آخیراً با Install Shield روی پروژه جاوا کار کردید؟


راستشو بخای خیلی وقت پیش بوده. اونم با ورژن 9 بوده و پروژه من دیتا بیس نداشت. ولی پکیجای jre رو داشت که در صورت نیاز رو سیستم کاربر نصب میکرد. 
متاسفانه جدیدا کار نکردم چون کار windows app کمتر میکنم و معمولا چون خودم برا کاربر راه اندازی میکنم بندرت setup میسازم و تا این لحظه نمیدونم تا چه ورژنی اومده. اما حتما برا اطلاع خودمم که شده باهاش کار میکنم. یه تستی میزنم چیز بدرد بخوری پیدا کردم بهت میگم ایشالا...

----------


## mostafabahrami

> راستشو بخای خیلی وقت پیش بوده. اونم با ورژن 9 بوده و پروژه من دیتا بیس نداشت. ولی پکیجای jre رو داشت که در صورت نیاز رو سیستم کاربر نصب میکرد. 
> متاسفانه جدیدا کار نکردم چون کار windows app کمتر میکنم و معمولا چون خودم برا کاربر راه اندازی میکنم بندرت setup میسازم و تا این لحظه نمیدونم تا چه ورژنی اومده. اما حتما برا اطلاع خودمم که شده باهاش کار میکنم. یه تستی میزنم چیز بدرد بخوری پیدا کردم بهت میگم ایشالا...


تا من بخام بگیرم نصبش کنم پیشنهاد میکنم این pdf ها رو بخون هم وقت از دست ندی هم خودت بهتر یاد میگیری
http://dl.irpdf.com/ebooks/Part32/ww....com(9228).pdf  ورژن 2011 هستش
و اگه حوصله داری زبان اصلیش
http://www.softwareasia.com/download...ftwareasia.pdf ورژن 2013 شه
اتفاقا یکی از قویترین تو بحث دیتابیس ستاپ سازی همین installshield هست.
قابلیت کار با ODBC و سایر انواع کانکشن db داره
یه بخش sql script هم داره که تقریبا هر کاری میشه توش کرد. تنظیمات دیتابیس و کانکشن و... وانتقال محتویات جداول بانک روی سیستم تو این بخشه . هم بصورت ویزاردی داره و هم اگه به sql نویسی مسلط باشی و کار خاصی بخای بکنی میتونی دستی کد بزنی.
خیلی قویه.
فعلا با مطالعه pdf ها رو نرم افزار کار کن اگه مشکلی بود بگو ببینم چکار میشه برات کرد

----------


## abarkarbar

> فعلا با مطالعه pdf ها رو نرم افزار کار کن اگه مشکلی بود بگو ببینم چکار میشه برات کرد


باشه ممنون روی آنها مطالعه و کار خواهم کرد. یافته هام رو در اینجا می نویسم. البته لینک زبان اصلی، نمیاره ..

----------


## mostafabahrami

> باشه ممنون روی آنها مطالعه و کار خواهم کرد. یافته هام رو در اینجا می نویسم. البته لینک زبان اصلی، نمیاره ..


فیلتره
اینجا گذاشتمش بردار
http://bayanbox.ir/download/11360950...ftwareasia.pdf

----------

