สาเหตุของปัญหานี้ก็คือ พอดีมีลูกค้ามาถามผมว่า "ปกติเวลาเราเขียน application ของ java ส่วนใหญ่มักจะประกอบไปด้วย library (jar) หลายๆตัว เมื่อเราเขียน application เสร็จแล้วถ้าเราจะเอา application ตัวนี้ไปใช้ก็ต้องยกโขยง library ต่าง ๆ ของเราไปด้วย ไม่งั้นจะทำงานไม่ได้"
จึงเกิดคำถามที่ว่า...จะทำอย่างไรที่จะรวม library ต่าง ๆ เหล่านี้เป็น jar ตัวเดียว??
ซึ่งจริง ๆ แล้ว การที่เราต้องยกโขยง library ต่าง ๆ ของ application ไปทั้งหมด มันเป็นสิ่งที่ไม่สะดวกเลยจริง ๆ ดังนั้น จึงมีวิธีการที่เรียกว่า Jar File หรือ Java ARchive ซึ่งเป็นการรวมหลาย ๆ ไฟล์เป็นเป็นไฟล์เพียงตัวเดียว ซึ่ง Developer มักจะใช้การสร้าง .jar ไฟล์นี้ในการทำ Java applications หรือ libraries ซึ่งจะมีทั้งข้อมูล classes, metadata และข้อมูลที่เป็น text, images, และอื่น ๆ อีกมากมาย
ซึ่งตัว JAR file นี้ จะถูกสร้างออกมาในรูปแบบของ ZIP file เมื่อต้องการจะแตก (extract) JAR file ได้โดยพิมพ์คำสั่ง jar command ที่มากับ JDK นั่นเอง
เรามาดูวิธีการทำ Jar File กันเลยดีกว่า
Step 1:
ให้สร้าง xml file โดยตั้งชื่อเป็น "build.xml" แล้วใส่คำสั่งตามข้างล่างนี้
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_jar" name="Create Jar for Project TodoListTool">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required -->
<target name="create_jar">
<jar destfile="C:/Documents and Settings/com11/Desktop/de.allianz.vpl.VPLTransformer.jar"
filesetmanifest="mergewithoutmain">
filesetmanifest="mergewithoutmain">
<manifest>
<!--<attribute name="Main-Class" value="systemtool.guiApplication.GuiApplication" />-->
<attribute name="Class-Path" value="." />
</manifest>
<fileset dir="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/bin" />
<zipfileset excludes="META-INF/*.SF"
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/jdom.jar" />
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/jdom.jar" />
<zipfileset excludes="META-INF/*.SF"
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/de.allianz.jFrame.jni.jar" />
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/de.allianz.jFrame.jni.jar" />
<zipfileset excludes="META-INF/*.SF"
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/utility.jar" />
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/utility.jar" />
<zipfileset excludes="META-INF/*.SF"
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/org.eclipse.swt_3.5.0.v3550b.jar" />
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/org.eclipse.swt_3.5.0.v3550b.jar" />
<zipfileset excludes="META-INF/*.SF"
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/org.eclipse.swt.win32.win32.x86_3.5.0.v3550b.jar" />
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/org.eclipse.swt.win32.win32.x86_3.5.0.v3550b.jar" />
</jar>
</target>
</project>
ผมขออธิบายคำสั่งที่สำคัญ 4 ส่วน ก่อนนะครับ
<jar destfile="C:/Documents and Settings/com11/Desktop/de.allianz.vpl.VPLTransformer.jar"
filesetmanifest="mergewithoutmain">
filesetmanifest="mergewithoutmain">
src="D:/java/jFrame_WorkSpace/de.allianz.vpl.VPLTransformer/lib/jdom.jar" />
และ
<!--<attribute name="Main-Class" value="systemtool.guiApplication.GuiApplication" />-->
value: This value is main class.
Step 2:
ให้ Copy "build.xml" ที่เรา้เพิ่งสร้างเมื่อกี้ นำไปไว้ที่ root directory ของโปรเจค (ตามรูป)
Step 3:
คลิกขวาที่ "build.xml" เลือก Run As > Ant Build
เท่านี้ก็เรียบร้อยครับ ^^
Credit by @plaumkamon