رتبه موضوع:
  • 2 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کامپایل و اجرای برنامه های جاوا در خط فرمان
#1
خب اول که JDK رو نصب میکنیم.
محیط کار من: windows xp sp3

این کد مثال ماست:
public class Test {

    public static void main(String args[]){

        System.out.println("hello world!");

 Internal.t();

 }

}



class Internal {

 public static void t() {

 System.out.println("internal");

 }

}
در هر فایل جاوا فقط یک کلاس public باید وجود داشته باشه (ولی کلاسهای غیر public هم میتونن موجود باشن)، و اسم فایل هم باید با اسم کلاس یکسان باشه (حتی کوچکی و بزرگی حروف هم باید یکسان باشه). پس ما این برنامه رو در فایلی بنام Test.java ذخیره میکنیم.

برای کامپایل، دایرکتوری جاری خط فرمان رو به پوشه ای که این فایل درش هست میبریم. بعد با فرمان:
javac.exe Test.java
برنامه رو کامپایل میکنیم.
البته دقت کنید که اینجا به شکل کلی و برای سادگی فقط نوشتم javac.exe، وگرنه در واقعیت اگر javac.exe در مسیر فایلهای اجرایی سیستم شما نباشه اونوقت باید آدرس کاملش رو در خط فرمان درج کنید (میتونید با کشیدن آیکون این فایل از پوشهء bin واقع در پوشهء نصب JDK به پنجرهء خط فرمان، این کار رو انجام بدید).

خب بعد از کامپایل، یک فایل بنام Test.class در پوشهء برنامه ایجاد میشه. ما میتونیم این فایل رو به این شکل مستقیما اجرا کنیم:
[shcode-bash]java Test[/shcode]
دقت کنید که پسوند فایل (class) رو نباید درج کنیم.

میشه مستقیما فایلهای کامپایل شدهء جاوا رو که پسوند class دارن اجرا کرد، ولی در برنامه های حرفه ای حجیم تر که شامل چندین فایل هستن میان و تمام فایلهای برنامه رو به شکل یک فایل با پسوند jar درمیارن. فایل های jar هیچ چیز خاص و پیچیده ای نیستن و درواقع یک فایل آرشیو فشرده شده هستن که تمام فایلهای برنامه رو در خودش ذخیره میکنه. حتی میتونید یک فایل jar رو با برنامه هایی مثل winrar هم باز کنید و محتویاتش رو ببینید یا حتی استخراج یا دستکاری کنید، چون فرمت آرشیو و فشرده سازی فایل jar تاجاییکه میدونم همون فرمت zip است.

خب حالا ما برنامهء خودمون رو به این شکل به فایل jar تبدیل میکنیم:
اول یک فایل به اسم manifest.txt ایجاد میکنیم (البته اسم این فایل میتونه چیز دیگه هم باشه ولی استاندارد عرفش manifest.txt است) و توش این متن رو درج و ذخیره میکنیم:
Main-Class: Test
این بخاطر اینه که معرفی کنیم از فایلها/کلاسهای ما کدومش حاوی entry point برنامه (متد main که برنامه با اجرای اون شروع میشه) است.
خب بعد با این فرمان فایل jar رو میسازیم:
jar.exe cvfm test.jar manifest.txt *.class
حالا میتونیم به این شکل در خط فرمان فایل jar رو اجرا کنیم:
java -jar test.jar
وقتی جاوا روی سیستمی نصب باشه، با دابل کلیک روی فایل jar هم میشه اون رو اجرا کرد، ولی چون برنامهء ما تحت کنسول است باید از طریق خط فرمان اجراش کنیم و روی ویندوز روش کلیک درموردش کار نمیکنه، برای اینکه بتونیم از طریق کلیک برنامهء خودمون رو اجرا کنیم میتونیم یک فایل با پسوند bat درست کنیم و این کدها رو داخلش درج کنیم:
@echo off

java -jar test.jar
اینطور وقتی بچ فایل رو با کلیک اجرا میکنیم، عملا برنامهء ما در خط فرمان اجرا میشه.
البته ما میتونیم فایل class رو هم به همین شکل اجرا کنیم و این روش برای هردوی فایل class و فایل jar عمل میکنه:
@echo off

java Test
خب این تا اینجا!
اما برنامه های جدی تر و حرفه ای جاوا از دسته بندی و ساختار سلسله مراتبی با استفاده دستور package هم استفاده میکنن، و دستورات خط فرمان که در این پست ارائه کردم برای اینکه با اون نوع برنامه ها هم قابل استفاده باشن نیاز به مقداری تغییرات دارن که مقداری پیچیده تره، البته نه خیلی، که انشاا… در مقالهء بعدی قصد دارم این مطلب رو ارائه کنم.
پاسخ
تشکر شده توسط: YN97
#2
در پست قبلی روش کامپایل و اجرای یک برنامهء خیلی ساده و تک فایل جاوا رو نشون دادیم. در اون برنامه از پکیج خبری نبود.

اما اکثر برنامه های جاوا از package استفاده میکنن.
حالا میخوایم طرز کامپایل و اجرای این برنامه ها در خط فرمان رو توضیح بدیم.

خب میدونید که در جاوا، اسم پکیج ها با دایرکتوری های کد منبع ارتباط مستقیم دارن. یعنی مثلا اگر اسم پکیج یک فایل رو گذاشتیم packageOne، اون فایل باید در یک دایرکتوری بنام packageOne قرار بگیره. یا اگر گذاشتیم packageOne.subPackage اونوقت باید یک دایرکتوری بنام subPackage هم در داخل packageOne ایجاد کنیم و فایل جاوا رو داخل اون بذاریم.
همچنین این نام پکیج ها برای نامیدن کلاس های موجود در فایلهای کد منبع ما هم استفاده میشن، یعنی مثلا در ابتدای یک فایل جاوا مینویسیم import packageOne.Parent و به این شکل کلاس Parent رو که در پکیج packageOne قرار داره به درون سورس جاری ایمپورت میکنیم.

خب میریم سر کار عملی.

در برنامهء تست ما دوتا فایل جاوا داریم که هرکدام توی پکیج جداگانه خودشون هستن. یک فایل بنام Parent.java داریم در پکیج packageOne، دیگری فایل Child.java که در پکیج packageTwo است. خب در پوشهء جاری که قاعدتا پوشهء ریشهء پروژهء جاوای ماست، دوتا فولدر بنامهای packageOne و packageTwo ایجاد کنید و فایل Parent.java رو در فولدر packageOne و فایل Child.java رو در packageTwo قرار بدید.

محتویات Parent.java اینه:
package packageOne;



public class Parent {



	protected String name = "prasad kharkar";



}
و محتویات Child.java:
package packageTwo;



import packageOne.Parent;



class Child extends Parent {

	public void testMethod() {

		System.out.println("name is " + name);

	}



	public static void main(String args[]) {

		Child n = new Child();

		n.testMethod();

	}

}
پوشهء جاری خط فرمان ما باید در ریشهء پروژه باشه.
برای کامپایل Parent.java اینطور عمل میکنیم:
javac packageOneParent.java
و برای کامپایل Child.java:
javac packageTwoChild.java
حالا اگر بررسی کنید فایل class مربوط به هر فایل جاوا در پوشهء مربوط به پکیج خودش ایجاد شده.

و سرانجام اجرای برنامه با این فرمان:
java packageTwo.Child

منبع این مطالب: http://www.thejavageek.com/2013/07/21/us...a-programs

خب حالا چطور یک فایل jar ایجاد کنیم؟
اگر میخوایم یک jar قابل اجرای مستقیم (standalone) داشته باشیم ابتدا باید entry point برنامه (کلاسی که متد main برنامه درش هست) رو مشخص کنیم. برای این کار یک فایل بنام manifest.txt با این محتویات در فولدر ریشهء پروژه ایجاد میکنیم:
Main-Class: packageTwo.Child
نکته: دقت کنید این فایل با new line خاتمه پیدا کرده باشه (در انتهای آخرین خط، کلید Enter رو زده باشید).

فرمان ایجاد فایل jar:
jar cvfm test.jar manifest.txt .
کاراکتر آخر غیر از نقطه میتونست ستاره (*) هم باشه.
این فرمان خود فایل manifest.txt رو هم به فایل jar اضافه میکنه، چون این فایل در دایرکتوری جاری و پروژه ما هست و با این فرمان به jar گفتیم که تمام فایلهای موجود در این دایرکتوری و دایرکتوری های زیرمجموعه اون رو اضافه کن. نیازی نیست این فایل در فایل jar ما باشه، ولی بودنش ضرری هم نمیزنه. اگر بخوایم حذفش کنیم میتونیم مثلا اون رو در پوشهء دیگری قرار بدیم و مثلا از فرمانی به این شکل استفاده کنیم:
jar cvfm test.jar c:manifest.txt *
یا میتونستیم فایلهایی رو که میخوایم به jar اضافه بشن با آدرس دقیق اونها مشخص کنیم تا فایلهای دیگری به jar ما اضافه نشن:
jar cvfm test.jar manifest.txt packageOneParent.class packageTwoChild.class
پاسخ
تشکر شده توسط: YN97




کاربران در حال بازدید این موضوع: 1 مهمان