جاوا در گنو/لینوکس
زبان Java یکی از قدرتمندترین و کارامدترین زبان‌های بـرنامه سازی است که توسط شرکت SUN Microsystems طراحی شده است. این زبان که یک زبان کاملا شی گراست دارای قابلیت‌های بسیار زیادی در زمینه‌های مختلف می‌باشد.
Java و تکنولوژی‌های وابسته به آن در زمینه‌هایی چون برنامه‌های کاربردی، وب، شبکه، امنیت، پایگاه داده، پردازش موازی، طراحی و پردازش چند رسانه ای و غیره کاربرد بسیار دارند.
سوالی کـــه ممکن است برای هر توسعه دهنده نرم افزارهای Java کـه به تازگی با دنیای سیستم عامل لینوکس آشنا شده است مطرح شود، این است که در لینوکس چگونه می‌توان از Java استفاده نمود؟ مــا در این مقاله به بررسی این موضوع خواهیم پرداخت.
برای این منظور دو راه در لینوکس وجود دارد که نسبت به بقیه موارد متعارف‌تر است:
۱) استفاده از بسته JDK شرکت SUN
۲) استفاده از کامپایلر و دیگر ابزار های مربوط به Java در مجموعه GCC

بسته JDK
همان طور که می دانید یکی از Platform های متعددی کــه Java پشتیبانی می‌کند، لینــوکس است . یعنی به سادگی می‌توانید بــا مــراجعه به سایت جاوا [۱] و یا یکی از mirror های آن و دریــافت بستـــه JDK و نصب آن، از ایـــن بســـته استفاده کنید. بــرای این کار فایل با پسوند bin را download کـرده و به صورت زیر اجرا کنید تا JDK بر روی سیستم شما نصب شود.
# ./jdk-1_5_0_04-linux-i586.bin

پس از اجرای این دستور فایل‌ها از حـالت فشرده خارج شده و در دایرکتوری جاری شما قرار خواهند گرفت. با استفاده از دستور export برای تنظیم متغیر های PATH و CLASSPATH می‌توانید از این بسته استفاده کنید.
$ export PATH=/home/<user>/jdk1.5.0_04/bin:$PATH
$ export CLASSPATH=/home/<user>/jdk1.5.0_04/lib:<other paths to class libraries>
بـــرای اطلاعات کامــلتر در مورد نصب و پیــکربندی JDK به فایلـهــای install.html و system-configurations.html در وب سایت جاوا مراجعه کنید.

نحوه استفاده از ابزارهای JDK
بسته JDK دارای ابزارهای مختلفی می‌باشد. در اینجا به چند نمونه از مهم ترین این ابزارها خواهیم پرداخت.
javac : این ابزار کامپایلر Java می‌باشد که کدهای منبع Java را به bytecode تبدیل می‌کند. صورت کلی این دستور به صورت زیر می باشد:
$ javac [options] [sourcefiles.java]
معمــولا option هــای زیــادی با javac به کار نمی‌رود. شــاید مهم ترین آنها g- و classpath- باشند. بــرای آگــاهــی از لیست کامل این گزینه ها دستور زیر را اجرا کنید:
$ man javac
java: این ابزار یک Java Application را اجرا می کند. صورت کلی این دستور به دو صورت زیر می باشد:
$ java [options] class [arguments]
$ java [options] –jar file.jar [arguments]
Options ورودی هایی هستند که می‌توانند نحوه اجرا را تغییر دهند. مانند javac معمـــولا option های زیــادی با java به کار نمی‌رود. برای اطلاع از لیست کامل این option ها دستور man java را اجرا کنید.
Class نام کلاسی است که به عنوان main صدا زده خواهد شد. file.jar نام jar فایلی است که مورد اجرا قرار می‌گیرد و در نهایت arguments ورودی‌هایی هستند که به تابع اصلی برنامه پاس خواهند شد.
jar: این ابزار چندین فایــل را بــه صــورت یــک فــایــل jar ترکیب می‌کنـــد. این ابزار می تواند jar فایل را به روز کند، آن را Extract کند، محتوای آن را لیست کند و یا به آن یک index اضافه کــنــد. ایــن دستـور دارای صورت‌های بسیار زیادی می‌باشد. برای استفاده مناسب از این ابزار به manual page آن مراجعه کنید.
jdb: برنامه اشکال زدایی کدهای Java – صورت کلی این دستور به صورت زیر می باشد:
$ jdb [options] class [arguments]
یک مثال: فرض کنید که دو فایل Hello.java و MyString.java داریم و کدهای زیر را به صورت زیر در ان وارد کرده‌ایم .
/* Hello.java */
public class Hello {
public static void main(String args[]) {
MyString str = new MyString();
str.add(“Hello”);
str.add(“World”);
str.print();
}
}
/* MyString.java */
public class MyString {
private String string = “”;
public void add(String newword) {
if (string.length() > 0)
string += “ ”;
string += newword;
}
public void print() {
if (string.length() > 0)
System.out.println(string);
else
System.out.println(“The string is empty”);
}
}
به سادگی با دو دستور زیر می‌توانید این برنامه کامپایل و اجرا نمایید:
$ javac Hello.java
$ java Hello

نحوه استفاده از ابزارهای GCC
یکی از زبان‌های مــورد پشتیبانی در مجــمــوعه بـسیــار مـعروف GCC کامپایلر زبان Java می باشد . این مجموعه دارای ابزارهای زیادی در ارتباط با Java می‌باشد. مــهـم ترین ابزارهای آن که ما در این مقاله به آنها خواهیم پرداختjar ،gij gcj می‌باشند.
ابزارهای مجموعه GCC کاملا با استاندارد Java مطابقـت دارند بدین معنی که اگر شما کد Java ای را با استفاده از GCC کامپایل کنید بدون هیچ گونه ایرادی با استفاده از ابزارهای JDK قابل اجرا می باشد و بالعکس.
gcj: کامپایلر کدهای Java در مجموعه GCC ( معادل javac در JDK )
gij: مترجم Java bytecode در مجموعه GCC ( معادل java در JDK )
jar: ابزاری برای Java Archives ( معادل jar در JDK )
مــزیتی کــه ابـزارهای GCC بر ابزارهای JDK دارند این است که می‌توانند عملیات بسیار بیشتری را بر روی کدهای Java انجام دهند. برخی از این عملیات عبارتند از: ایــجــاد کد اسمبلی – ایجــاد کتابخانه ( static و shared ) و از همه مهمتر تولید برنامه قابل اجرا. در زیر به این موارد خواهیم پرداخت:

عملیاتی بر روی یک فایل
فرض کنید که کد Java زیر را داشته باشیم:
/* MyHello.java */
public class MyHello {
public static void main(String args[])
{
System.out.println(“Hello World”);
}
}
برای تبدیل این کد به یک کد اجرایی دستور زیر را وارد کنید.
$ gcj --main=MyHello --Wall MyHello.java -o MyHello
بایستی با استفاده از main-- کلاس اصلی را مشخص کنید و برای اجرای ان به صورت زیر عمل کنید:
$ ./MyHello
برای تبدیل همین کد به bytecode دستور زیر را به کار ببرید.
$ gcj --C --Wall MyHello.java
و برای اجرای ان به دو صورت زیر می توانید عمل کنید.
$ gij MyHello
$ java MyHello

برای تبدیل این کد Java به object file دستور زیر را به کار ببرید.
$ gcj -c MyHello.java
و برای تبدیل object file ها به فایل اجرایی دستور زیر را به کار ببرید:
$ gcj --main=MyHello MyHello.o -o MyHello
و برای تبدیل فایل bytecode به فایل اجرایی دستور زیر را به کار ببرید:
$ gcj MyHello.class -o MyHello
و در نهایت برای تولید کد اسمبلی دستور زیر را به کار ببرید:
$ gcj -S MyHello.java
عملیاتی بر روی چند فایل
مثال بخش مربوط به JDK که شامل دو فایل بود را در نظر بگیرید . برای تبدیل ان مثال به برنامه قابل اجرا دستور زیر را به کار ببرید.
$ gcj --main=Hello Hello.java MyString.java -o Hello
$ ./Hello
می توانید هر کدام از دو فایل Java را به object file تبدیل کرده و با یکدیگر لینک کنید به صورت زیر:
$ gcj -c Hello.java
$ gcj -c MyString.jaav
$ gcj --main=Hello Hello.o MyString.o -o Hello
$ ./Hello
همچنین می توانید هر کدام از دو فایل java را به bytecode تبدیل کرده و پس از ان با یکدیگر لینک کنید. به صورت زیر :
$ gcj -C Hello.java MyString.java
$ gcj --main=Hello Hello.class MyString.class -o Hello
$ ./Hello
یا اینکه می توانید مستقیما bytecode را به وسیله java یا gij اجرا کنید:
$ java Hello or $ gij Hello

ایجاد static library
برای این کار ابتدا باید فایلهای java را به object file تبدیل کنید و سپس با استفاده از دستور ar این کار انجام می پذیرد.
$ ar -rc libMyString.a MyString.o …… ( other object files )

ایجاد shared object
بــرای تولید shared object ابتدا باید فایل‌های java را بــه شــکــلی متفـاوت نسبت به قبل کامپایل کنید. به صورت زیر با


استفاده از ورودی –fpic
$ gcj -fpic -c MyString.java
و به صورت زیر shared object ساخته خواهد شد.
$ gcj -shared MyString.o …… ( other object files ) -o libMyString.so

ایجاد jar فایل
ابتدا بایستی فایل‌های java را به byetcode تبدیل کنید:
$ gcj -C MyString.java
و سپس با استفاده از دستور زیر jar فایل ساخته خواهد شد:
$ jar cf libMyString.jar MyString.class …… ( other class files )

نتیجه گیری
در این مقاله به بررسی اجمالــی دو بستــه JDK و GCC-Java کــه بـــرای تــوســعــه Java Applications بـه کار می‌روند پرداختیم. مــوارد ذکر شده در ایـن مقاله تنها بخش کوچکی از امکانات و ابزارهای موجود در سیستم عامل لینوکس برای توسعه کد های Java می‌باشد. امید است که مورد فایده واقع شود.