เรียกใช้คลาสในไฟล์ Jar


176

หากคุณมีไฟล์ jar ชื่อmyJar.jarอยู่ใน/ myfolderและคุณต้องการใช้คลาสที่เรียกmyClassจากนั้นคุณจะทำอย่างไรจากบรรทัดคำสั่ง

ฉันคิดว่ามันจะเป็นการเข้าไปในไดเรกทอรีและพูดjava -cp myJar.jar.myClassแต่นั่นไม่ทำงาน ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม


java -cp myJar.jar myClassทำงานได้ดีสำหรับฉัน - คุณมีช่วงเวลาที่น่าเกรงขามในบรรทัดคำสั่งของคุณแทนที่จะเว้นวรรคหรือไม่?
Chris Dodd

1
คุณหมายถึงอะไรเมื่อคุณพูดว่าคุณต้องการ 'ใช้' คลาสนั้น? มีวิธีหลักที่คุณต้องการโทรโดยเฉพาะ?
Marsellus Wallace

คำตอบ:


256

java -cp myjar.jar com.mypackage.myClassใช้

  1. java -cp myjar.jar myClassถ้าชั้นไม่ได้อยู่ในแพคเกจแล้วก็

  2. หากคุณไม่ได้อยู่ในไดเรกทอรีที่myJar.jarตั้งอยู่คุณสามารถทำได้:

    1. บนแพลตฟอร์ม Unix หรือ Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. บน Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass


10
เพียงเพิ่มลงไป - ในกรณีที่ com.mypackage.myClass (ในตัวอย่างด้านบน) มีการพึ่งพาบนไหอื่น ๆ ให้รันดังนี้: java -cp dependentfile1.jar; dependentfile2.jar; c: \ location_of_jar \ myjar.jar com mypackage.myClass
akjain

2
เส้นทางความล้มเหลวที่เป็นไปได้ที่ต้องระวังในกรณีที่ไม่ได้ผล: ตรวจสอบให้แน่ใจว่าเส้นทางที่ผ่านการรับรองอย่างเต็มรูปแบบไปยังคลาสของคุณตรงกับสิ่งที่อยู่ในไฟล์ jar ของคุณ หากคุณทำ unzip -l /location-of-jar/myjar.jar และดูสิ่งอื่นที่ไม่ใช่ com / mypackage / myClass นี่เป็นปัญหาของคุณ (ตัวอย่างเช่นหากคุณเห็น bin / com / mypackage / myClass คุณควรมี cd'ed ลงใน bin เพื่อสร้างไฟล์ jar ของคุณสิ่งที่คุณจะไม่ได้ผล)
Scott C Wilson

ใช้ MyClass ไม่ใช่ myClass
Breno Inojosa

โดยการลองข้างต้นฉันได้รับข้อผิดพลาดยกเว้นในหัวข้อ "หลัก" java.lang.NoClassDefFoundError: cucumber / api / cli / Main ที่ com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) เกิดจาก: java.lang.ClassNotFoundException: cucumber.api.cli.Main ที่ java.net.URLClassLoader.findClass (แหล่งที่ไม่รู้จัก) ที่ java.lang.ClassLoader.loadClass (ไม่ทราบแหล่งที่มา) ที่ sun.misc.Launcher $ AppClassLoader loadClass (ไม่ทราบแหล่งที่มา) ที่ java.lang.ClassLoader.loadClass (ไม่ทราบแหล่งที่มา) ... 1 เพิ่มเติม
Vaibhav_Sharma


18

มีไฟล์ JAR สองประเภทใน Java:

  1. ไฟล์ jar ที่รันได้ / เรียกใช้ซึ่งมีไฟล์รายการ ในการเรียกใช้ Jar Runnable คุณสามารถใช้java -jar fileName.jarหรือjava -jar -classpath abc.jar fileName.jar

  2. ไฟล์ jar แบบง่ายที่ไม่มีไฟล์รายการดังนั้นคุณสามารถรันคลาสหลักของคุณโดยกำหนดพา ธ java -cp ./fileName.jar MainClass


6

สมมติว่าคุณอยู่ในไดเรกทอรีที่myJar.jarไฟล์อยู่และmyClassมีpublic static void main()วิธีการ:

คุณใช้บรรทัดคำสั่งต่อไปนี้:

java -cp ./myJar.jar myClass

ที่ไหน:

  1. myJar.jarอยู่ในเส้นทางปัจจุบันโปรดทราบว่าไม่ได้.อยู่ในเส้นทางปัจจุบันในระบบส่วนใหญ่ เส้นทางครบถ้วนเป็นที่ต้องการที่นี่เช่นกัน

  2. myClassเป็นเส้นทางแพคเกจที่มีคุณสมบัติครบถ้วนในชั้นเรียน, ตัวอย่างเช่นสมมติว่าmyClassอยู่ในแพคเกจเริ่มต้นcom.mycompany.mycode.myClassซึ่งเป็นวิธีปฏิบัติที่ไม่ดีถ้ามันอยู่ในแพคเกจที่ซ้อนกันมันจะเป็น


1

นี่เป็นวิธีที่ถูกต้องในการรัน a .jarและสิ่งใดก็ตามที่มีหนึ่งคลาสในที่.jarควรมีmain()และพารามิเตอร์ต่อไปนี้:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.