ฉันจะสร้าง 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.