Cách chạy tệp JAR


207

Tôi đã tạo một tệp JAR như thế này:

jar cf Predit.jar *.*

Tôi đã chạy tệp JAR này bằng cách nhấp đúp vào tệp (nó không hoạt động). Vì vậy, tôi đã chạy nó từ dấu nhắc DOS như thế này:

java -jar Predit.jar

Nó đưa ra các ngoại lệ "Không thể tải lớp chính". Vì vậy, tôi trích xuất tệp JAR này:

jar -xf Predit.jar

và tôi đã chạy tập tin lớp:

java Predit

Nó hoạt động tốt. Tôi không biết tại sao tệp JAR không hoạt động. Vui lòng cho tôi biết các bước để chạy tệp JAR

Câu trả lời:


207

Bạn cần chỉ định Main-Class trong tệp kê khai tệp jar.

Hướng dẫn của Oracle chứa một bản trình diễn hoàn chỉnh, nhưng đây là một bản khác từ đầu. Bạn cần hai tệp:

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

Lưu ý rằng tệp văn bản phải kết thúc bằng một dòng mới hoặc trả lại vận chuyển. Dòng cuối cùng sẽ không được phân tích cú pháp đúng nếu nó không kết thúc bằng một dòng mới hoặc trả lại vận chuyển.

Sau đó chạy:

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

Đầu ra:

Hello world

1
nếu lớp Test tham chiếu một lớp khác thông qua tệp jar, trong trường hợp đó cần phải sửa đổi gì?
Anand

@Anand sau đó bạn cần bao gồm một dòng Class-Path trong tệp kê khai của bạn và tham chiếu các jar khác. docs.oracle.com/javase/tutorial/deployment/jar/downman.html
cướp

Xin hãy giúp tôi về câu hỏi này: stackoverflow.com/questions/24740804/ từ
Sajad

Tôi nghĩ rằng có phiên bản Manifest: 1.0 là không cần thiết vì nội dung của tệp kê khai đã cho sẽ được thêm vào tệp kê khai mặc định đã có phiên bản docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii Oleinikov

2
Đây chỉ là mẫu đầu cuối. Hoàn hảo đơn giản sắc nét. Tôi đã tìm kiếm một cái gì đó như thế này trong nhiều giờ. Không chắc chắn tại sao toàn bộ Internet có đầy đủ tất cả rác mà không có một ví dụ đơn giản như vậy, khi tìm kiếm Cách tạo jar java "Hello world". Rất rất cảm ơn.
Atul

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

Nếu bình này sử dụng các lọ khác, không nên đường dẫn giống như "/ path / to / jars / *"?
Maxim Chetrusca

5
@Max Chetrusca Có nhưng trình phân tách đang :sử dụng *sẽ không hoạt động vì trình bao của bạn sẽ mở rộng nó như thế này: "/path/to/jars/a.jar" "/path/to/jars/b.jar"nhưng điều bạn thực sự muốn là : "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch

29

Trước khi chạy, kiểm tra jar Main-Class: classnamecó sẵn hay không trong tệp MANIFEST.MF . MANIFEST.MF có mặt trong bình.

java -jar filename.jar

16

Bạn phải thêm một bảng kê khai vào tệp jar, cho biết thời gian chạy java là lớp chính. Tạo một tệp 'Manifest.mf' với nội dung sau:

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

Thay đổi 'your.programs.MainClass' thành lớp chính thực tế của bạn. Bây giờ đặt tệp vào tệp Jar, trong thư mục con có tên 'META-INF'. Bạn có thể sử dụng bất kỳ tiện ích ZIP nào cho việc đó.


1
Vì tò mò, trường hợp tên thư mục con 'Meta-inf' có nhạy cảm không? Theo truyền thống, tôi đã thấy nó đánh vần 'META-INF'
Adam Paynter

Bạn đúng. Thông số kỹ thuật nói "META-INF" và không nói gì về tính không nhạy cảm của trường hợp ( java.sun.com/j2se/1.4.2/docs/guide/jar/iêu )
Florian Fankhauser

12

Một cách tiếp cận rất đơn giản để tạo tập tin. Class, .jar.

Thực hiện các tập tin jar. Không cần phải lo lắng quá nhiều về tệp kê khai. Làm cho nó đơn giản và hùng hồn.

Mẫu Java Chương trình Hello World

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

Biên dịch tập tin lớp

javac HelloWorld.java

Tạo tập tin jar

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

hoặc là

jar cvfe HelloWorld.jar HelloWorld *.class

Chạy tệp jar

 java -jar HelloWorld.jar

Hoặc là

java -cp HelloWorld.jar HelloWorld

Có, jartùy chọn của echo phép bạn chỉ định Main-Class( điểm vào ) và cũng tạo một tệp kê khai tương ứng cho bạn. Xem tài liệu chính thức cho jar .
Petr Bodnár

11

Nếu bạn không muốn tạo một bảng kê khai chỉ để chạy tệp jar, bạn có thể tham chiếu lớp chính trực tiếp từ dòng lệnh khi bạn chạy tệp jar.

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

Cái này đặt lớp chính nào để chạy trong tệp jar.


2
-classpathđến ngay sau đó javavà thoát khỏi -jar(nghĩa là câu trả lời này không chính xác)
Pete

4

Java

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

manifest.mf

Manifest-version: 1.0
Main-Class: Hello

Trên dòng lệnh:

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

Đầu ra:

Hello Shahid

3

Nếu bạn không muốn giải quyết những chi tiết đó, bạn cũng có thể sử dụng các trợ lý jar xuất từ ​​Eclipse hoặc NetBeans.


3

Tệp JAR có thể chạy được của Eclipse

Tạo một dự án Java - RunnableJAR

  • Nếu bất kỳ tệp jar nào được sử dụng thì hãy thêm chúng vào đường dẫn xây dựng dự án.
  • Chọn lớp có hàm main () trong khi tạo tệp Runnable Jar. nhập mô tả hình ảnh ở đây

Lớp chính

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

Chạy tệp Jar bằng chương trình java ( cmd ) bằng cách cung cấp các đối số và nhận đầu ra và hiển thị trong bảng điều khiển nhật thực.

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());
        }
   }
}

Trong Eclipse để tìm các vết cắt ngắn :

Trợ giúp ► Nội dung trợ giúp ► Hướng dẫn sử dụng phát triển Java ► Tài liệu tham khảo ► Menu và hành động


3

Tôi có cấu trúc thư mục này:

D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main. Class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ nhấn \ OlivePress. Class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress . class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian. class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive. class

Main.class là trong gói com.lynda.olivepress

Có hai gói khác:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Tạo một tệp có tên "Manifest.txt"Hai dòng, Đầu tiên với Lớp chính và Dòng trống thứ hai.

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Tạo JAR với Điểm nhập cảnh Manifest và Main-Class

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

3) Chạy JAR

java -jar OlivePressApp.jar

Lưu ý: com/lynda/olivepress/*có nghĩa là bao gồm hai gói khác được đề cập ở trên, trước điểm 1)


-2

Để chạy jar, đầu tiên bạn phải tạo

bình thực thi

sau đó

java -jar xyz.jar

lệnh sẽ hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.