Cara menjalankan file JAR

207

Saya membuat file JAR seperti ini:

jar cf Predit.jar *.*

Saya menjalankan file JAR ini dengan mengklik dua kali (tidak berfungsi). Jadi saya menjalankannya dari DOS prompt seperti ini:

java -jar Predit.jar

Itu mengangkat pengecualian "Gagal memuat kelas utama". Jadi saya mengekstrak file JAR ini:

jar -xf Predit.jar

dan saya menjalankan file kelas:

java Predit

Itu bekerja dengan baik. Saya tidak tahu mengapa file JAR tidak berfungsi. Tolong beritahu saya langkah-langkah untuk menjalankan file JAR

Martin Prikryl
sumber

Jawaban:

207

Anda perlu menentukan Kelas Utama di manifes file jar.

Tutorial Oracle berisi demonstrasi lengkap, tapi ini satu lagi dari awal. Anda memerlukan dua file:

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

Perhatikan bahwa file teks harus diakhiri dengan baris baru atau carriage return. Baris terakhir tidak akan diuraikan dengan benar jika tidak diakhiri dengan baris baru atau carriage return.

Lalu lari:

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

Keluaran:

Hello world
Jon Skeet
sumber
1
jika kelas Uji merujuk kelas lain melalui file jar, dalam hal apa modifikasi yang harus dilakukan?
Anand
@ Dan kemudian Anda harus memasukkan baris Class-Path dalam manifes Anda dan referensi jar lainnya. docs.oracle.com/javase/tutorial/deployment/jar/downman.html
rob
Tolong Bantu saya untuk pertanyaan ini: stackoverflow.com/questions/24740803/…
Sajad
Saya pikir memiliki Manifest-versi: 1.0 tidak diperlukan karena isi dari file manifes yang diberikan bisa ditambahkan ke file manifes default yang sudah memiliki versi docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii Oleinikov
2
Ini hanya sampel ujung ke ujung. Renyah sederhana dan sempurna. Saya mencari sesuatu seperti ini selama berjam-jam. Tidak yakin mengapa seluruh Internet penuh dengan semua sampah tanpa contoh sederhana seperti itu, ketika mencari Cara membuat toples java "Hello world". Terima kasih banyak.
Atul
58
java -classpath Predit.jar your.package.name.MainClass
Lynch
sumber
Jika toples ini menggunakan toples lain, bukankah seharusnya classpath seperti "/ path / to / jars / *"?
Maxim Chetrusca
5
@Max Chetrusca Ya tapi separator tersebut :menggunakan *tidak akan bekerja karena shell Anda akan memperluas seperti ini: "/path/to/jars/a.jar" "/path/to/jars/b.jar"tapi apa yang Anda inginkan adalah: "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch
29

Sebelum menjalankan, toples Main-Class: classnametersedia atau tidak dalam file MANIFEST.MF . MANIFEST.MF hadir dalam toples.

java -jar filename.jar
KARTHIKEYAN.A
sumber
16

Anda harus menambahkan manifes ke toples, yang memberitahu java runtime apa kelas utamanya. Buat file 'Manifest.mf' dengan konten berikut:

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

Ubah 'your.programs.MainClass' ke kelas utama Anda yang sebenarnya. Sekarang masukkan file ke file Jar, dalam subfolder bernama 'META-INF'. Anda dapat menggunakan utilitas ZIP apa pun untuk itu.

Florian Fankhauser
sumber
1
Hanya ingin tahu, apakah case case subfolder 'Meta-inf' sensitif? Saya secara tradisional melihatnya dieja 'META-INF'
Adam Paynter
Kamu benar. Spesifikasi mengatakan "META-INF" dan tidak mengatakan apa-apa tentang ketidakpekaan huruf ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
Florian Fankhauser
12

Pendekatan yang sangat sederhana untuk membuat file .class, .jar.

Menjalankan file jar. Tidak perlu terlalu khawatir tentang file manifes. Buat sederhana dan elgant.

Contoh Java Hello World Programme

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

Kompilasi file kelas

javac HelloWorld.java

Membuat file jar

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

atau

jar cvfe HelloWorld.jar HelloWorld *.class

Menjalankan file jar

 java -jar HelloWorld.jar

Atau

java -cp HelloWorld.jar HelloWorld
nagendra547
sumber
Ya, jar's pilihan ememungkinkan Anda menentukan Main-Class( entrypoint ) dan juga menciptakan sesuai file manifest untuk Anda. Lihat dokumentasi resmi untuk toples .
Petr Bodnár
11

Jika Anda tidak ingin membuat manifes hanya untuk menjalankan file jar, Anda dapat merujuk kelas utama langsung dari baris perintah ketika Anda menjalankan file jar.

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

Ini mengatur kelas utama mana yang harus dijalankan dalam file jar.

Egil
sumber
2
-classpathdatang tepat setelah javadan singkirkan -jar(yaitu jawaban ini salah)
Pete
4

Jawa

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

manifes

Manifest-version: 1.0
Main-Class: Hello

Pada Baris Perintah:

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

Keluaran:

Hello Shahid
Mohammad Shahid Siddiqui
sumber
3

Jika Anda tidak ingin berurusan dengan rincian itu, Anda juga dapat menggunakan asisten toples ekspor dari Eclipse atau NetBeans.

fortran
sumber
3

File JAR Eclipse Runnable

Buat Proyek Java - RunnableJAR

  • Jika ada file jar yang digunakan kemudian tambahkan ke proyek build path.
  • Pilih kelas yang memiliki main () saat membuat file Jar Runnable. masukkan deskripsi gambar di sini

Kelas Utama

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

Jalankan file Jar menggunakan program java ( cmd ) dengan memberikan argumen dan dapatkan output dan tampilan di konsol gerhana.

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

Di Eclipse untuk menemukan jalan pintas :

Bantuan ► Daftar Isi Bantuan ► Panduan pengguna pengembangan Java ► Referensi ► Menu dan Tindakan

Yash
sumber
3

Saya memiliki struktur folder ini:

D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ tekan \ OlivePress.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ zaitun \ Kalamata .class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive.class

Main.class dalam paket com.lynda.olivepress

Ada dua paket lain:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Buat file "Manifest.txt"dengan nama Two Lines, First with Main-Class dan Second Empty Line.

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Buat JAR dengan Manifest dan Entry Point Kelas Utama

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

3) Jalankan JAR

java -jar OlivePressApp.jar

Catatan: com/lynda/olivepress/*berarti termasuk dua paket lain yang disebutkan di atas, sebelum poin 1)

Gabriel D
sumber
-2

Untuk menjalankan toples, pertama-tama Anda harus membuat

jar dieksekusi

kemudian

java -jar xyz.jar

perintah akan bekerja

Deepa
sumber