ฉันจะสร้าง JAR จากไฟล์. java ได้อย่างไร


88

ฉันกำลังเขียนโปรแกรมง่ายๆโดยใช้แอปพลิเคชัน Java (ไม่ใช่แอปพลิเคชันที่มีโปรเจ็กต์ แต่เป็นแอปพลิเคชันภายในโปรเจ็กต์; .java ) ที่มีเฟรมเดียว ไฟล์ทั้งสองเป็น. javaดังนั้นฉันจึงไม่สามารถเขียนไฟล์ Manifestที่ JAR ต้องการได้

MyApp.javaเริ่มต้นเช่นชั้นเรียนกับแพคเกจนำเข้าชั้นเรียนแล้วประชาชนMyAppและมีฟังก์ชั่นหลัก แต่ก็ยังคงไฟล์ .java! ฉันเขียนมันใน JDeveloper 11g ถ้ามันช่วยได้

มีแนวคิดในการสร้าง JAR จากไฟล์เหล่านี้หรือไม่?


1
ฉันคิดว่าสิ่งนี้สามารถทำได้ง่ายกว่ามากโดยใช้เครื่องมือบรรจุภัณฑ์เช่น ANT หรือ Maven
— Churk

เห็นด้วยกับ Chuck ลองดูที่ ANT IDE เหมาะสำหรับการพัฒนา แต่คุณต้องเข้าใจว่าสิ่งต่างๆทำงานอย่างไร ไฟล์ java ถูกคอมไพล์ผ่านไฟล์ javac เป็น. class หลังจากนี้ไฟล์. class สามารถถูกแพ็กเกจลงใน jar ด้วยคำสั่ง jar (Ant มีงานที่ต้องทำแม้กระทั่ง jdeveloper ก็มีวิซาร์ดสำหรับทำสิ่งนี้)
— BigMike

JDeveloper เองควรมีความสามารถในการสร้างไฟล์ jar ค้นหาด้วย Google ได้อย่างรวดเร็วมี howto ที่นี่: tompeez.wordpress.com/2011/06/01/…
— stolzem

1
คุณสามารถชี้แจงคำถามของคุณได้หรือไม่?
— Romain Hippeau

ไปที่ dir แหล่งที่มาและคำสั่งการทำงาน: - * javac .java && ขวด CVF JarName.jar * .class
— ฉูดฉาด

คำตอบ:


104

เปิดพรอมต์คำสั่ง

ไปที่ไดเร็กทอรีที่คุณมีไฟล์. java

สร้างไดเร็กทอรีบิลด์

เรียกใช้การคอมไพล์ java จากบรรทัดคำสั่ง

javac -d ./build *.java

หากไม่มีข้อผิดพลาดในไดเร็กทอรี build คุณควรมีคลาสทรีของคุณ

ย้ายไปที่ไดเร็กทอรี build และทำไฟล์

jar cvf YourJar.jar *

สำหรับการเพิ่มสวิตช์บรรทัดคำสั่งเช็ค jar manifest


ฉันได้ลองรวบรวมจากบรรทัดคำสั่งแล้ว แต่ฉันได้รับข้อผิดพลาด: Frame1.java:23: package oracle.jdeveloper.layout ไม่มีอยู่ฉันจะแก้ปัญหาได้อย่างไร ขออภัยสำหรับคำถามมือใหม่ ...
— user1303007

คุณต้องสร้าง classpath ที่อ้างอิงไลบรารีทั้งหมดที่คุณอ้างถึงในชั้นเรียนของคุณ ตรวจสอบกับการติดตั้ง jdeveloper ของคุณควรมีตัวอย่างการสร้างมด (ไฟล์ build.xml) และอย่างน้อยคำแนะนำที่ดีเกี่ยวกับวิธีใช้ jDeveloper กับ ANT บนไซต์ของ Oracle
— BigMike

@ user1303007 ดูที่นี่oracle.com/technetwork/articles/adf/part4-098813.html
— BigMike

1
ฉันได้เพิ่มตัวเลือกให้กับคำสั่ง jar ของฉันเพื่อเพิ่ม Main-Class ไปยังรายการโดยอัตโนมัติ ... jar cfe Main.jar Main *(ฉันรู้สึกสับสนฉันต้องใส่ชื่อ Main-Class หลังชื่อไฟล์เอาต์พุต)
— Klaider

32

เพียงแค่ใช้บรรทัดคำสั่ง:

javac MyApp.java
jar -cf myJar.jar MyApp.class

แน่ใจว่า IDE หลีกเลี่ยงการใช้เทอร์มินัลบรรทัดคำสั่ง


11
ข้างต้นใช้งานได้ แต่ฉันต้องระบุ.classmyApp มันก็เลยjar -cf myJar.jar myApp.class
— Navigatron

3
ข้อผิดพลาดในการสะกดที่นี่ด้วยและถือว่าไม่มีคำสั่งแพ็คเกจ ไม่เพียงพอ
— user207421

14

ตกลงนี่เป็นวิธีแก้ปัญหาที่ฉันอยากจะหาแทนที่จะเขียนที่นี่:

ขั้นแรกให้สร้างโครงสร้างไดเร็กทอรีที่สอดคล้องกับแพ็กเกจที่กำหนดไว้สำหรับไฟล์. java หากเป็น my.super.application ให้สร้างไดเร็กทอรี "my" และภายใน "super" และภายในไฟล์. java "App.java"

จากบรรทัดคำสั่ง:

   javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java

โปรดสังเกตว่าข้างต้นจะรวมไลบรารีหลาย ๆ ไลบรารีหากภายใต้ windows ใช้ "," เพื่อแยกไฟล์หลายไฟล์มิฉะนั้นภายใต้ GNU / Linux ให้ใช้ ":" ในการสร้างไฟล์ jar

   jar -cvfe App.jar App my/app/

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

การรวมไลบรารีที่จำเป็นภายในไฟล์ jar นั้นไม่สามารถทำได้โดยใช้พารามิเตอร์บรรทัดคำสั่ง java หรือ jar

คุณสามารถทำสิ่งต่อไปนี้แทนได้

  1. แยกไลบรารีไปยังโฟลเดอร์รูทของไฟล์ jar ด้วยตนเอง
  2. ใช้ IDE เช่น Netbeans และแทรกกฎภายในส่วน post-jar ของ nbproject / build-im.xml เพื่อแยกไลบรารีภายใน jar ดูด้านล่าง
<target name="-post-jar">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
  <jar jarfile="${dist.jar}" update="true">  
            <zipfileset src="${dist.jar}" includes="**/*.class" />  
            <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
      <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
  </jar>
    </target>

พบชื่อ file.reference ภายในไฟล์ project.properties หลังจากที่คุณเพิ่มไลบรารีเข้ากับ Netbeans IDE


9

บ่อยครั้งที่คุณต้องการระบุไฟล์ Manifest ดังนี้:

jar -cvfm myJar.jar myManifest.txt myApp.class

ซึ่งอ่านว่า: "create verbose jarFilename manifestFilename" ตามด้วยไฟล์ที่คุณต้องการรวม Verbose หมายถึงพิมพ์ข้อความเกี่ยวกับสิ่งที่กำลังทำ

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


6

สามารถทำได้โดยไม่ต้องเทอร์มินัลโดยตรงจาก IDE Netbeans เป็นต้น

  1. สร้างโปรเจ็กต์แยกต่างหากพร้อมแพ็กเกจ (Create Project - Java - Java Class Library)
  2. ใส่คลาส. java ของคุณที่นั่น
  3. สร้างโครงการนี้
  4. ไปที่โฟลเดอร์โครงการของคุณและค้นหาโฟลเดอร์ build และ dist ที่นั่น
  5. ค้นหาไฟล์. jar ในโฟลเดอร์ dist ของคุณ
  6. รับโปรเจ็กต์อื่นของคุณและเพิ่มไฟล์. jar นี้ลงในไลบรารีโปรเจ็กต์
  7. ตอนนี้คุณสามารถอ้างอิงคลาสจากไลบรารีนี้และเมธอดได้โดยตรงจากโค้ดหากนำเข้าโดยอัตโนมัติสำหรับคุณ

3

นี่เป็นอีกวิธีที่น่าสนใจในการทำสิ่งนี้:

$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

ซึ่งจะดึงไฟล์. java ทั้งหมด ( ls | grep .java) จากไดเร็กทอรีปัจจุบันของคุณและคอมไพล์ลงใน. class ( xargs -I {} javac {}) จากนั้นสร้างไฟล์ jar จากคลาสที่คอมไพล์ไว้ก่อนหน้านี้ ( jar -cf myJar.jar *.class)


2

บางทีวิธีที่เป็นมิตรกับผู้เริ่มต้นที่สุดในการรวบรวม JAR จากโค้ด Java ของคุณคือการใช้ IDE (สภาพแวดล้อมการพัฒนาแบบรวมโดยพื้นฐานแล้วเป็นเพียงซอฟต์แวร์ที่ใช้งานง่ายสำหรับการพัฒนา) เช่น Netbeans หรือ Eclipse

  • ติดตั้งและตั้งค่า IDE นี่คือรุ่นล่าสุดของคราส
  • สร้างโปรเจ็กต์ใน IDE ของคุณและใส่ไฟล์ Java ของคุณไว้ในโฟลเดอร์โปรเจ็กต์
  • เลือกโปรเจ็กต์ใน IDE และเอ็กซ์พอร์ตโปรเจ็กต์เป็น JAR ตรวจสอบอีกครั้งว่ามีการเลือกไฟล์ java ที่เหมาะสมเมื่อส่งออก

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

javac YourApp.java
jar -cf YourJar.jar YourApp.class

... เปลี่ยน "YourApp" และ "YourJar" เป็นชื่อที่ถูกต้องของไฟล์ของคุณตามลำดับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.