วันนี้พอจะมีเวลาและอยากจะเขียนโปรแกรมที่ติดค้างมานานแล้ว เป็นโปรแกรมภาษา Java และจะเขียนแบบง่ายๆเป็น Desktop Application แต่เนื่องจากห่างหายจากการเขียนแบบนี้มานานมาก เมื่อก่อนเคยใช้ NetBeans เขียนเป็นประจำ แต่ว่า ตั้งแต่บริษัท Sun Microsystems ขายกิจการไปให้บริษัท Oracle Corporation (ปีคศ. 2010) มันเหมือนเรารู้สึกเคว้งคว้างไปด้วย ไม่รู้ว่าอนาคตของภาษา Java จะเป็นอย่างไร ตั้งแต่นั้นก็ไม่ได้ใช้ NetBeans อีกเลย ก็หันมาใช้ Eclipse อยู่พักหนึ่ง แต่ก็ไม่ค่อยถูกใจมากนัก สุดท้าย 2-3 ปีมานี้ หันมาจับ Android Studio เสียส่วนใหญ่ วันนี้ก็เลยคิดอยากจะเขียน Java Desktop Application ด้วย Android Studio ขึ้นมา
เอ้า พอลองค้นๆดูว่าทำได้หรือเปล่า ก็พบว่ามีคนแนะนำไว้พอสมควรครับ แต่จะนำมาสรุปบันทึกไว้เพื่อช่วยจำและจะได้เป็นประโยชน์กับคนอื่นๆดังนี้
Create New Module
ปกติแล้ว Project ที่เราสร้างด้วย Android Studio นั้น จะเป็น Android Application ซึ่งเมื่อสร้างแล้วจะได้ Module แรกชื่อ app ขึ้นมา ในกรณีนี้ เราจะไม่ใช้ Module นี้ บางความเห็นที่ค้นๆมาบอกว่าให้ลบทิ้ง แต่ผมคิดว่าไม่จำเป็นต้องลบทิ้ง เผื่อว่าเราอาจจะเปลี่ยนใจพัฒนาเป็น Android Application ก็จะได้ไม่ต้องสร้างใหม่ให้ยุ่งยาก ก็ปล่อยไว้แบบนั้นไปก่อน
เมื่อต้องการสร้าง Java Application เราจะใช้วิธีสร้าง Module ใหม่ โดยเลือกเมนู File/New/New Module แล้วเลือก Module แบบ Java Library ดังภาพ
จากนั้นก็กรอก Library name (ชื่อของ Module) Java package name (ชื่อ Package หลัก) และ Java class name ชื่อคลาสไฟล์ที่จะถูกสร้างขึ้นไฟล์แรก
Set Main Class
เมื่อสร้าง Module เสร็จเรียบร้อยแล้ว เราจะได้คลาสไฟล์แรกมาด้วย ถ้าต้องการให้ไฟล์นี้เป็นโปรแกรมหลัก ให้เพิ่มฟังก์ชัน main() ไว้ที่ไฟล์นี้ เช่น
package com.example;
public class MyClass {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
เมื่อเขียน main() เสร็จแล้วควร Build ด้วยเมนู Build/Make Module ... เสียก่อน จากนั้น เราจะสามารถรันโปรแกรมได้จากเมนู Run/Run... จะปรากฎป๊อบอัพเมนูให้เลือกรัน MyClass ดังภาพ
หากเคยเลือกรันไปแล้วครั้งหนึ่ง จะปรากฏชื่อคลาสตรงปุ่มข้างๆปุ่มรันที่ Toolbar ดังภาพ
แต่หากไม่ปรากฎชื่อคลาสหลักเพื่อจะรันโปรแกรม เราก็สามารถสร้างใหม่เองได้ด้วยการเลือก Edit Configurations... แล้วเพิ่ม Configuration แบบ Application ด้วยการกดปุ่มเครื่องหมาย + ตรงมุมบนซ้าย
กำหนด Name และ Main class ให้ถูกต้อง ก็จะได้ Configuration สำหรับรันโปรแกรมหลัก
Create Jar File with Dependencies
ปกติแล้วเมื่อ Build Module แล้วจะได้ Jar ไฟล์ของโปรแกรมอยู่ในโฟลเดอร์
<โปรเจ็คโฟลเดอร์>/<โมดูลโฟลเดอร์>/build/libs
เช่น AndroidStudioProjects/MyApplication/lib/build/libs เป็นต้น
แต่หากโปรแกรมมีการเรียกใช้ Library อื่นๆด้วย Jar ไฟล์ของ Library ที่จำเป็นต้องใช้งานร่วมกันนั้น อาจจะไม่ได้รวมอยู่ใน Jar ไฟล์เดียวกัน ซึ่งจะทำให้ไม่สะดวกในการนำไปใช้งานก็เป็นได้ ซึ่งเราสามารถเพิ่ม Task สำหรับการสร้าง All-in-One Jar ไฟล์ได้ ด้วยการแก้ไขไฟล์ build.gradle script ของโมดูลนี้ โดยเพิ่ม Task ชื่อ fatJar ดังนี้
version='1.0'
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'MyClass Jar File Example',
'Implementation-Version': version,
'Main-Class': 'com.example.MyClass'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
เมื่อเพิ่ม Task ชื่อ fatJar เข้าไปแล้ว และสามารถ Sync Gradle ได้อย่างถูกต้อง เราจะพบชื่อ Task นี้ในหน้าต่างของ Gradle Properties ดังภาพ
ซึ่งสามารถเรียกใช้ได้ด้วยการ Double-Click ที่ชื่อ หรือคลิ๊กเมาส์ปุ่มขวาแล้วเลือกเมนูรันได้เลย ซึ่งผลลัพธ์จะได้ Jar ไฟล์อยู่ในโฟลเดอร์เดียวกับ Jar ไฟล์ปกติ แต่ชื่อไฟล์จะมี
-all เพิ่มเข้ามา
อ้างอิง