วิธีเรียกใช้ไฟล์ JAR


207

ฉันสร้างไฟล์ JAR แบบนี้:

jar cf Predit.jar *.*

ฉันรันไฟล์ JAR นี้โดยดับเบิลคลิกที่มัน (มันไม่ทำงาน) ดังนั้นฉันวิ่งจาก DOS พร้อมต์ดังนี้:

java -jar Predit.jar

มันยกข้อยกเว้น "ล้มเหลวในการโหลดคลาสหลัก" ดังนั้นฉันจึงแยกไฟล์ JAR นี้:

jar -xf Predit.jar

และฉันรันไฟล์คลาส:

java Predit

มันทำงานได้ดี ฉันไม่รู้ว่าทำไมไฟล์ JAR ไม่ทำงาน โปรดบอกขั้นตอนในการเรียกใช้ไฟล์ JAR

คำตอบ:


207

คุณต้องระบุ Main-Class ในไฟล์ jar

บทช่วยสอนของ Oracle ประกอบด้วยการสาธิตที่สมบูรณ์ แต่ที่นี่เป็นอีกตัวอย่างหนึ่ง คุณต้องการสองไฟล์:

Test.java:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}

manifest.mf:

Manifest-version: 1.0
Main-Class: Test

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

จากนั้นเรียกใช้:

javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar

เอาท์พุท:

Hello world

1
ถ้าคลาสทดสอบอ้างอิงคลาสอื่นผ่านไฟล์ jar ในกรณีนั้นการแก้ไขจะต้องทำอย่างไร?
อานันท์

@ จากนั้นคุณต้องรวมบรรทัด Class-Path ในรายการของคุณและอ้างอิง jar อื่น ๆ docs.oracle.com/javase/tutorial/deployment/jar/downman.html
rob

โปรดช่วยฉันในคำถามนี้: stackoverflow.com/questions/24740803/…
Sajad

ฉันคิดว่าการใช้ Manifest-version: 1.0 ไม่จำเป็นเพราะเนื้อหาของไฟล์ Manifest ที่ได้รับจะถูกผนวกเข้ากับไฟล์ Manifest ที่มีรุ่นdocs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii Oleinikov

2
นี่เป็นเพียงตัวอย่างจากต้นจนจบ คมชัดเรียบง่ายสมบูรณ์แบบ ฉันกำลังมองหาบางอย่างเช่นนี้มาหลายชั่วโมง ไม่แน่ใจว่าทำไมอินเทอร์เน็ตทั้งหมดเต็มไปด้วยขยะทั้งหมดโดยไม่มีตัวอย่างง่ายๆเมื่อค้นหาวิธีการสร้าง jar java "Hello world" ขอบคุณมาก ๆ
Atul

58
java -classpath Predit.jar your.package.name.MainClass

หากไหนี้ใช้ไหอื่น ๆ classpath จะไม่เหมือนกับ "/ path / to / jars / *" หรือไม่
Maxim Chetrusca

5
@Max Chetrusca ใช่ แต่แยกจะ:ใช้*จะไม่ทำงานเพราะเปลือกของคุณจะขยายมันเช่นนี้แต่สิ่งที่คุณต้องการจริงๆคือ:"/path/to/jars/a.jar" "/path/to/jars/b.jar" "/path/to/jars/a.jar:/path/to/jars/b.jar"
ลินช์

29

ก่อนที่จะเรียกใช้การตรวจสอบ jar Main-Class: classnameนั้นจะพร้อมใช้งานหรือไม่อยู่ในไฟล์MANIFEST.MF MANIFEST.MF มีอยู่ในโถ

java -jar filename.jar

16

คุณต้องเพิ่มรายการไปยัง jar ซึ่งจะบอกรันไทม์ของ java ว่าคลาสหลักคืออะไร สร้างไฟล์ 'Manifest.mf' ด้วยเนื้อหาต่อไปนี้:

Manifest-Version: 1.0
Main-Class: your.programs.MainClass

เปลี่ยน 'your.programs.MainClass' เป็นคลาสหลักที่แท้จริงของคุณ ตอนนี้ใส่ไฟล์ลงในไฟล์ Jar ในโฟลเดอร์ย่อยที่ชื่อว่า 'META-INF' คุณสามารถใช้โปรแกรมอรรถประโยชน์ ZIP ใดก็ได้


1
เพียงแค่อยากรู้อยากเห็นชื่อโฟลเดอร์ย่อย 'Meta-inf' มีความละเอียดอ่อนหรือไม่? ฉันได้เห็นแบบดั้งเดิมสะกดว่า 'META-INF'
Adam Paynter

คุณถูก. ข้อมูลจำเพาะระบุว่า "META-INF" และไม่ได้พูดอะไรเกี่ยวกับ case insensitivity ( java.sun.com/j2se/1.4.2/docs/guide/jar/ ...... )
Florian Fankhauser

12

วิธีการง่ายๆในการสร้าง. class, .jar file

การเรียกใช้ไฟล์ jar ไม่จำเป็นต้องกังวลเกี่ยวกับไฟล์ Manifest มากเกินไป ทำให้มันเรียบง่ายและดูดี

ตัวอย่างโปรแกรม Hello World Java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

รวบรวมไฟล์คลาส

javac HelloWorld.java

การสร้างไฟล์ jar

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

หรือ

jar cvfe HelloWorld.jar HelloWorld *.class

เรียกใช้ไฟล์ jar

 java -jar HelloWorld.jar

หรือ

java -cp HelloWorld.jar HelloWorld

ใช่jarตัวเลือกeให้คุณระบุMain-Class( จุดเข้าใช้งาน ) และสร้างไฟล์รายการที่เกี่ยวข้องให้คุณ ดูเอกสารอย่างเป็นทางการสำหรับขวด
Petr Bodnár

11

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

java -jar Predit.jar -classpath your.package.name.Test

สิ่งนี้ตั้งค่าคลาสหลักที่จะรันในไฟล์ jar


2
-classpathมาขวาหลังjavaและกำจัด-jar(คือคำตอบนี้ไม่ถูกต้อง)
พีท

4

ชวา

class Hello{
   public static void main(String [] args){
    System.out.println("Hello Shahid");
   }
}

manifest.mf

Manifest-version: 1.0
Main-Class: Hello

ในบรรทัดคำสั่ง:

$ jar cfm HelloMss.jar  manifest.mf Hello.class 
$ java -jar HelloMss.jar

เอาท์พุท:

Hello Shahid

3

หากคุณไม่ต้องการจัดการกับรายละเอียดเหล่านั้นคุณสามารถใช้ผู้ช่วยส่งออก jar จาก Eclipse หรือ NetBeans


3

Eclipse ไฟล์ JAR ที่รันได้

สร้างโครงการ Java - RunnableJAR

  • หากใช้ไฟล์ jarใด ๆ ให้เพิ่มลงในพา ธ การสร้างโปรเจ็กต์
  • เลือกคลาสที่มี main () ในขณะที่สร้างไฟล์ Runnable Jar ป้อนคำอธิบายรูปภาพที่นี่

ชั้นเรียนหลัก

public class RunnableMainClass {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Name : "+args[0]);
        System.out.println(" ID  : "+args[1]);
    }
}

รันไฟล์Jarโดยใช้โปรแกรม java ( cmd ) โดยการจัดหาอาร์กิวเมนต์และรับเอาต์พุตและแสดงในคอนโซล eclipse

public class RunJar { 
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        String jarfile = "D:\\JarLocation\\myRunnable.jar";
        String name = "Yash";
        String id = "777";

        try { // jarname arguments has to be saperated by spaces
            Process process = Runtime.getRuntime().exec("cmd.exe start /C java -jar "+jarfile+" "+name+" "+id);
                    //.exec("cmd.exe /C start dir java -jar "+jarfile+" "+name+" "+id+" dir");
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream ()));
            String line = null;
            while ((line = br.readLine()) != null){
                sb.append(line).append("\n");
            }
            System.out.println("Console OUTPUT : \n"+sb.toString());
            process.destroy();
        }catch (Exception e){
            System.err.println(e.getMessage());
        }
   }
}

ใน Eclipse เพื่อค้นหาทางลัด :

ช่วยเหลือ►เนื้อหาช่วยเหลือ►คู่มือผู้ใช้การพัฒนา Java ►การอ้างอิง►เมนูและการดำเนินการ


3

ฉันมีโครงสร้างโฟลเดอร์นี้:

D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ press \ OlivePressApp \ com \ lynda \ olivepress \ มะกอก \ Kalamata .class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ oligur \ oligurian.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive.class

Main.class อยู่ในแพคเกจ com.lynda.olivepress

มีสองแพ็คเกจอื่น ๆ :

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) สร้างไฟล์ที่"Manifest.txt"มีสองบรรทัดบรรทัดแรกกับคลาสหลักและบรรทัดว่างที่สอง

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) สร้าง JAR ด้วย Manifest และ Main-Class Entry Point

D: \ JavaProjects \ OlivePressApp>jar cfm OlivePressApp.jar Manifest.txt com/lynda/olivepress/Main.class com/lynda/olivepress/*

3) เรียกใช้ JAR

java -jar OlivePressApp.jar

หมายเหตุ: com/lynda/olivepress/*หมายถึงรวมถึงอีกสองแพคเกจดังกล่าวข้างต้นก่อนที่จุด 1)


-2

หากต้องการเรียกใช้ jar ก่อนอื่นคุณต้องสร้าง

jar ที่ปฏิบัติการได้

แล้วก็

java -jar xyz.jar

คำสั่งจะทำงาน

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