วิธีรวมไฟล์ jar ด้วยไฟล์ java และคอมไพล์ใน command prompt


121

ฉันมีไฟล์ jar 3 ไฟล์และไฟล์. java ที่ขึ้นอยู่กับไฟล์ jar เหล่านี้ ฉันจะรวบรวมไฟล์. java ด้วยไฟล์ jar เหล่านี้โดยใช้พรอมต์คำสั่งได้อย่างไร


9
พิมพ์ "javac -help"
Sean Patrick Floyd


2
หวังว่านี่จะช่วยคุณได้ ..
Fahim Parkar

2
หมายเหตุถึงตนเอง: คุณต้องใช้แฟล็ก -cp / -classpath ก่อนชื่อของไฟล์ java ที่คุณต้องการรันมิฉะนั้นจะไม่สนใจแฟล็ก java -cp ".;magic.jar" Fooก็โอเคjava Foo -cp ".;magic.jar"ไม่ใช่
Dmitry

คำตอบ:


108

คุณสามารถรวมไฟล์ jar ของคุณในคำสั่ง "javac" โดยใช้ตัวเลือก "-cp"

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

แทนที่จะใช้ "-cp" คุณยังสามารถใช้ "-classpath"

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

คุณสามารถรวมไหทุกครั้งที่คุณคอมไพล์โดยตั้งค่าตัวแปรสภาพแวดล้อม "CLASSPATH" ให้ถูกต้อง ตัวแปรสภาพแวดล้อมจะเก็บพา ธ ที่ไหและคลาสที่ต้องใช้สำหรับการคอมไพล์ / เรียกใช้ไฟล์ java ใด ๆ คุณจะไม่ต้องรวมไหแยกกันทุกครั้งที่คุณรวบรวมไฟล์

เครื่องจักรที่แตกต่างกันมีวิธีการที่แตกต่างกันในการตั้งค่า classpath เป็นตัวแปรสภาพแวดล้อม คำสั่งสำหรับ Windows, Linux และอื่น ๆ นั้นแตกต่างกัน

คุณสามารถดูรายละเอียดเพิ่มเติมได้ในบล็อกนี้

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html

7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javaทำงานให้ฉัน ฉันใช้ mac ฉันอ่านที่ไหนสักแห่งว่า ':' ใช้สำหรับยูนิกซ์
ศรี

2
ฉันใช้คำสั่งนี้ แต่เมื่อพยายามเข้าถึงคลาสที่มีอยู่ในไฟล์ jar ฉันได้รับ ClassNotFoundException
Mohammed Rampurawala

3
สิ่งที่ไม่.:ทำอะไร? ขออภัยหากเป็นคำถามที่โง่ แต่ไม่ชัดเจนสำหรับฉัน
Miranda

1
@kensen พิมพ์ผิด แทนที่: (โคลอน) ด้วยอัฒภาค (;)
Pankaj Shinde

ด้านบนไม่ได้ผลสำหรับฉันบน Ubuntu ฉันลองโดยไม่มีเครื่องหมายคำพูดและมันได้ผล อดีต javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani

24

โปรดลองบน Linux

javac -cp jarfile source file 

ตัวอย่าง: -

javac  -cp .:/jars/* com/template/*.java

เมื่อผมลองตัวอย่าง: -ด้วยการ.:/jarsแทนที่ด้วยไดเรกทอรีที่ไฟล์ JAR javac: invalid flag: /location/of/first/jar/file.jarฉันจะอยู่ที่ฉันได้รับข้อความแสดงข้อผิดพลาด
Arturo don Juan

stackoverflow.com/questions/27915204/…โปรดอ้างอิงสิ่งนี้อาจช่วยแก้ปัญหาของคุณได้
Jamsheer

20

ไวยากรณ์จะทำงานบนคำสั่ง windows dos:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java

4
หลังจากดำเนินการคำสั่งด้านบนสำเร็จแล้วจะรันไฟล์คลาส java ได้อย่างไร?
Yash Agrawal

java -cp first.jar: second.jar: third.jar MyFile
Krsna Chaitanya

15

ลองเพิ่มไฟล์ jar การพึ่งพาทั้งหมดในพา ธ คลาสของคุณผ่านการตั้งค่าตัวแปรสภาพแวดล้อมหรือใช้ขั้นตอนด้านล่าง:

  1. เปิดพรอมต์คำสั่ง
  2. เปลี่ยนไดเร็กทอรีไปยังตำแหน่งของไฟล์ java ที่คุณต้องการคอมไพล์
  3. ตั้งค่า classpath สำหรับไฟล์ jar การพึ่งพาของคุณดังที่แสดงด้านล่าง:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. ตอนนี้คุณสามารถรวบรวมไฟล์ java ของคุณได้ (คำสั่งjavac YourJavaFile.java)

หวังว่านี่จะช่วยแก้ปัญหาการพึ่งพาของคุณได้


15

ดังต่อไปนี้เป็นขั้นตอน

  1. คัดลอก jar ทั้งหมดและไฟล์. java ของคุณไว้ในโฟลเดอร์เดียวกัน (จะง่ายต่อการเอ่ยชื่อไฟล์แทนที่จะพูดถึงเส้นทางยาวแม้ว่าคุณจะสามารถเก็บ jar และ. java ไว้ในโฟลเดอร์แยกกันได้)

  2. ในการรวบรวม

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. เพื่อดำเนินการ

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

ฉันหวังว่านี่จะช่วยได้!


1
ขอขอบคุณที่แสดงวิธีดำเนินการ จุดโคลอนทำอะไรอีก? เป็นไดเร็กทอรีปัจจุบันและตัวคั่นไฟล์หรือไม่
ThisClark

ใช่มันคือไดเร็กทอรีปัจจุบันและตัวคั่นไฟล์ Unix (ใน Windows จะเป็นเซมิโคลอน)
MathuSum Mut

6

สิ่งนี้จะสร้างไฟล์. class:

javac -classpath "[jarname with specified path]" [java filename]

สิ่งนี้จะเรียกใช้ไฟล์คลาส:

java -cp [jarname with specified path]: [java filename]

1
คำสั่ง java แสดงข้อผิดพลาดที่เกิดจาก: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory ฉันต้องการรวบรวม ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javaและ ** run java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Yash Agrawal


2

คุณต้องระบุการอ้างอิงในเวลาคอมไพล์เช่นเดียวกับรันไทม์

ในการคอมไพล์ให้ใช้รูปแบบนี้

javac -cp "*.jar;classfile_path" filename.java

ตัวอย่าง:

javac -cp "ojdbc6.jar;c:\programs" Main.java

คำตอบนี้แม้ว่าจะถูกต้อง แต่ดูเหมือนจะไม่ได้เพิ่มสิ่งที่คำตอบอื่น ๆ ยังไม่ได้พูด หากมีข้อแตกต่างที่สำคัญระหว่างสิ่งนี้กับคำตอบอื่น ๆ ก็จะเป็นการดีกว่าที่จะอธิบายว่าเหตุใดคำตอบของคุณจึงแตกต่างกัน
DaveyDaveDave

คุณได้กล่าวถึงการระบุการอ้างอิงที่รันไทม์รวมถึงเวลาคอมไพล์ แต่ไม่ได้อธิบายวิธีระบุที่รันไทม์
Michael Fulton


1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java

5
แม้ว่ารหัสนี้จะช่วยแก้ปัญหาได้รวมถึงคำอธิบายว่าทำไมจึงแก้ปัญหานี้ได้จะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้อย่างแท้จริงและอาจส่งผลให้มีการโหวตเพิ่มขึ้น จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตไม่ใช่แค่คนที่ถามตอนนี้ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายและระบุข้อ จำกัด และสมมติฐานที่ใช้
เสียงบี๊บสองครั้ง

0

หากคุณใช้ Ubuntu:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

ไปที่ตำแหน่งโฟลเดอร์ (โครงสร้างไม่อยู่ในแพ็คเกจ)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

หมายเหตุ: โปรดดูตำแหน่งไฟล์และชื่อแพ็กเกจ


-1

สำหรับ windows

  1. เชื่อมต่อกับไดเร็กทอรีที่มีไฟล์ java อยู่บนพรอมต์คำสั่ง
  2. ตั้งค่า classpath (ที่นี่ d = ชื่อโฟลเดอร์) ตั้งค่า classpath = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. กด Enter และ
  4. ตอนนี้รวบรวมไฟล์ java javac filename.java
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.