เรียกใช้ Java Application จาก Command Line

1. ภาพรวม

โดยทั่วไปแล้วทุกแอปพลิเคชันที่มีความหมายจะมีไฟล์ JAR อย่างน้อยหนึ่งไฟล์เป็นการอ้างอิง อย่างไรก็ตามมีหลายครั้งที่ไฟล์ JAR เป็นตัวแทนของแอปพลิเคชันแบบสแตนด์อโลนหรือเว็บแอปพลิเคชัน

เราจะเน้นไปที่สถานการณ์แอปพลิเคชันแบบสแตนด์อโลนในบทความนี้ ต่อจากนี้เราจะเรียกมันว่าแอปพลิเคชัน JAR

ในบทช่วยสอนนี้เราจะเรียนรู้วิธีสร้างแอปพลิเคชัน JAR ก่อน ต่อมาเราจะได้เรียนรู้วิธีการที่จะเรียกใช้โปรแกรมประยุกต์ JAR มีหรือไม่มีอาร์กิวเมนต์บรรทัดคำสั่ง

2. สร้างแอปพลิเคชันJAR

ไฟล์ JAR สามารถมีคลาสหลักตั้งแต่หนึ่งคลาสขึ้นไป แต่ละชั้นหลักคือจุดเริ่มต้นของโปรแกรมประยุกต์ ดังนั้นในทางทฤษฎีไฟล์ JAR สามารถมีได้มากกว่าหนึ่งแอปพลิเคชัน แต่ต้องมีคลาสหลักอย่างน้อยหนึ่งคลาสเพื่อให้สามารถรันได้

ไฟล์ JAR สามารถมีจุดเข้าใช้งานได้หนึ่งจุดในไฟล์รายการ ในกรณีนี้ไฟล์ JAR เป็น JAR ที่ปฏิบัติการได้ คลาสหลักจะต้องรวมอยู่ในไฟล์ JAR นั้น

ก่อนอื่นเรามาดูตัวอย่างสั้น ๆ เกี่ยวกับวิธีการคอมไพล์คลาสของเราและสร้าง JAR ที่ปฏิบัติการได้ด้วยไฟล์ manifest:

$ javac com/baeldung/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class

JAR ที่ไม่สามารถเรียกใช้งานได้เป็นเพียงไฟล์ JAR ที่ไม่มีMain-Class ที่กำหนดไว้ในไฟล์รายการ ดังที่เราจะเห็นในภายหลังเรายังสามารถเรียกใช้คลาสหลักที่มีอยู่ในไฟล์ JAR ได้

นี่คือวิธีที่เราจะสร้าง JAR ที่ไม่สามารถเรียกใช้งานได้โดยไม่มีไฟล์ Manifest:

$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class

3. อาร์กิวเมนต์บรรทัดคำสั่ง Java

เช่นเดียวกับแอปพลิเคชันใด ๆ แอปพลิเคชัน JAR ยอมรับอาร์กิวเมนต์จำนวนเท่าใดก็ได้รวมทั้งไม่มีอาร์กิวเมนต์ ทุกอย่างขึ้นอยู่กับความต้องการของแอปพลิเคชัน

นี้จะช่วยให้ผู้ใช้สามารถระบุข้อมูลการกำหนดค่าเมื่อโปรแกรมประยุกต์ที่มีการเปิดตัว

เป็นผลให้แอปพลิเคชันสามารถหลีกเลี่ยงค่าฮาร์ดโค้ดได้และยังสามารถจัดการกับกรณีการใช้งานต่างๆ

อาร์กิวเมนต์สามารถมีอักขระที่เป็นตัวเลขและตัวอักษรอักขระ Unicode และอาจมีอักขระพิเศษบางตัวที่เชลล์อนุญาตเช่น "@"

อาร์กิวเมนต์จะมีการแยกจากกันโดยหนึ่งหรือมากกว่าหนึ่งช่องว่าง ถ้าอาร์กิวเมนต์จำเป็นต้องมีช่องว่างต้องมีช่องว่างระหว่างเครื่องหมายคำพูด คำพูดเดี่ยวหรือคำพูดคู่ก็ใช้ได้ดี

โดยปกติสำหรับแอ็พพลิเคชัน Java ทั่วไปเมื่อเรียกใช้แอ็พพลิเคชันผู้ใช้ป้อนอาร์กิวเมนต์บรรทัดคำสั่งหลังชื่อของคลาส

อย่างไรก็ตามแอปพลิเคชัน JAR อาจไม่เป็นเช่นนั้นเสมอไป

ดังที่เราได้กล่าวไปแล้วจุดเริ่มต้นของคลาสหลักของ Java คือวิธีการหลัก ข้อโต้แย้งที่มีอยู่ทั้งหมดString sและมีการส่งผ่านไปยังวิธีการหลักเป็นStringอาร์เรย์

ที่กล่าวว่าภายในโปรแกรมที่เราสามารถแปลงองค์ประกอบของใด ๆStringอาร์เรย์ชนิดข้อมูลอื่น ๆ เช่นถ่าน , int , คู่,พวกเขาเรียนห่อหรือชนิดอื่น ๆ ที่เหมาะสม

4. เรียกใช้JAR ที่ปฏิบัติการได้ด้วยอาร์กิวเมนต์

มาดูไวยากรณ์พื้นฐานสำหรับการเรียกใช้ไฟล์ JAR ที่ปฏิบัติการได้พร้อมอาร์กิวเมนต์:

java -jar jar-file-name [args …]

JAR ปฏิบัติการที่สร้างขึ้นก่อนหน้านี้เป็นแอปพลิเคชั่นง่ายๆที่พิมพ์อาร์กิวเมนต์ที่ส่งผ่านเข้ามาเราสามารถรันได้โดยใช้อาร์กิวเมนต์กี่ตัวก็ได้ ด้านล่างนี้เป็นตัวอย่างที่มีอาร์กิวเมนต์สองตัว:

$ java -jar JarExample.jar "arg 1" [email protected] 

เราจะเห็นผลลัพธ์ต่อไปนี้ในคอนโซล:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected] 

ดังนั้นเมื่ออัญเชิญขวดปฏิบัติการเราไม่จำเป็นต้องระบุชื่อชั้นหลักในบรรทัดคำสั่ง เราเพียงเพิ่มอาร์กิวเมนต์ของเราหลังชื่อไฟล์ JAR หากเราระบุชื่อคลาสไว้หลังชื่อไฟล์ JAR ที่เรียกใช้งานได้มันจะกลายเป็นอาร์กิวเมนต์แรกของคลาสหลักจริง

บ่อยครั้งที่แอปพลิเคชัน JAR เป็น JAR ที่ปฏิบัติการได้ JAR ที่เรียกใช้งานได้สามารถมีคลาสหลักได้สูงสุดหนึ่งคลาสที่กำหนดไว้ในไฟล์รายการ

ดังนั้นแอปพลิเคชันอื่น ๆ ในไฟล์ JAR ที่ปฏิบัติการได้เดียวกันจึงไม่สามารถตั้งค่าในไฟล์รายการได้ แต่เรายังสามารถเรียกใช้จากบรรทัดคำสั่งได้เช่นเดียวกับที่เราทำกับ JAR ที่ไม่สามารถเรียกใช้งานได้ เราจะดูว่าเป็นอย่างไรในส่วนถัดไป

5. เรียกใช้JAR ที่ไม่สามารถปฏิบัติการได้ด้วยอาร์กิวเมนต์

การเรียกใช้โปรแกรมประยุกต์ในไฟล์ JAR ไม่สามารถทำงานได้เราต้องใช้-cpตัวเลือกแทนการ-jar เราจะใช้อ็อพชัน -cp (ย่อมาจาก classpath) เพื่อระบุไฟล์ JAR ที่มีไฟล์คลาสที่เราต้องการดำเนินการ:

java -cp jar-file-name ชื่อ main-class-name [args …]

ในขณะที่คุณสามารถมองเห็นในกรณีนี้เราจะต้องรวมถึงชื่อชั้นหลักในบรรทัดคำสั่งตามข้อโต้แย้ง

JAR ที่ไม่สามารถเรียกใช้งานได้ที่สร้างขึ้นก่อนหน้านี้มีแอปพลิเคชันพื้นฐานเดียวกัน เราสามารถเรียกใช้โดยมีอาร์กิวเมนต์ (รวมศูนย์) นี่คือตัวอย่างที่มีสองอาร์กิวเมนต์:

$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]

และเช่นเดียวกับที่เราเห็นด้านบนเราจะเห็นผลลัพธ์ต่อไปนี้:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]

6. บทสรุป

ในบทช่วยสอนนี้เราได้เรียนรู้สองวิธีในการเรียกใช้แอปพลิเคชัน JAR บนบรรทัดคำสั่งโดยมีหรือไม่มีอาร์กิวเมนต์

เรายังแสดงให้เห็นว่าอาร์กิวเมนต์สามารถมีช่องว่างและอักขระพิเศษ (เมื่อได้รับอนุญาตจากเชลล์)

เช่นเคยโค้ดสำหรับตัวอย่างมีอยู่บน GitHub