JAR dosyası nasıl çalıştırılır


207

Böyle bir JAR dosyası oluşturdum:

jar cf Predit.jar *.*

Bu JAR dosyasını çift tıklatarak çalıştırdım (işe yaramadı). Bu yüzden DOS isteminde böyle koştu:

java -jar Predit.jar

"Ana sınıf yüklenemedi" istisnalarını artırdı. Bu JAR dosyasını çıkardım:

jar -xf Predit.jar

ve ben sınıf dosyasını koştu:

java Predit

İyi çalıştı. JAR dosyasının neden çalışmadığını bilmiyorum. Lütfen bana JAR dosyasını çalıştırma adımlarını söyleyin

Yanıtlar:


207

Jar dosyası bildiriminde bir Main-Class belirtmeniz gerekir.

Oracle'ın öğreticisi tam bir gösteri içeriyor, ancak burada sıfırdan başka bir örnek var. İki dosyaya ihtiyacınız var:

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

Metin dosyasının yeni bir satır veya satır başı ile bitmesi gerektiğini unutmayın. Son satır, yeni bir satır veya satır başı ile bitmezse düzgün ayrıştırılmaz.

O zaman koş:

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

Çıktı:

Hello world

1
Test sınıfı jar dosyası aracılığıyla başka bir sınıfı belirtirse, bu durumda ne gibi değişiklikler yapılır?
Anand

@Ve sonra manifestinize bir Class-Path satırı eklemeniz ve diğer kavanozlara başvurmanız gerekir. docs.oracle.com/javase/tutorial/deployment/jar/downman.html
rob

Lütfen bu soruda bana yardım et: stackoverflow.com/questions/24740803/…
Sajad

Ben Manifest-versiyonunu sahip düşünüyorum: Verilen Bildiri dosyasının içeriğini zaten versiyonu olduğu varsayılan bildirim dosyasına eklenir olsun çünkü 1.0 gerekli değildir docs.oracle.com/javase/tutorial/deployment/jar/appman.html
GEORGII Oleinikov

2
Bu sadece uçtan uca bir örnektir. Mükemmel basit net. Saatlerce böyle bir şey arıyordum. "Merhaba dünya" java kavanoz nasıl oluşturulur için arandığında, tüm internet neden böyle basit bir örnek olmadan tüm önemsiz ile dolu olduğundan emin değilim. Çok çok teşekkürler.
Atul

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

Bu kavanoz başka kavanozlar kullanıyorsa, sınıf yolu "/ path / to / jars / *" gibi olmamalı mı?
Maxim Chetrusca

5
@Max Chetrusca Evet ama ayırıcı olduğu :kullanarak *Kabuk bunu böyle genişleyecektir çünkü çalışmaz: "/path/to/jars/a.jar" "/path/to/jars/b.jar"ama ne gerçekten istediğiniz geçerli: "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch

29

Çalıştırmadan önce jar kontrolü MANIFEST.MF dosyasında Main-Class: classnamemevcuttur veya yoktur . MANIFEST.MF kavanozda bulunur.

java -jar filename.jar

16

Java çalışma zamanına ana sınıfın ne olduğunu söyleyen kavanoza bir manifest eklemelisiniz. Aşağıdaki içeriğe sahip bir 'Manifest.mf' dosyası oluşturun:

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

'Your.programs.MainClass' öğesini gerçek ana sınıfınızla değiştirin. Şimdi dosyayı Jar dosyasına, 'META-INF' adlı bir alt klasöre yerleştirin. Bunun için herhangi bir ZIP yardımcı programını kullanabilirsiniz.


1
Sadece meraktan dolayı, 'Meta-inf' alt klasör adı büyük / küçük harf duyarlı mı? Geleneksel olarak 'META-INF' yazıldığını gördüm
Adam Paynter

Haklısın. Spesifikasyonda "META-INF" yazıyor ve büyük / küçük harfe duyarsızlık hakkında bir şey söylemiyor ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
Florian Fankhauser

12

.Class, .jar dosyası oluşturmak için çok basit bir yaklaşım.

Jar dosyasını yürütme. Manifest dosyası hakkında çok fazla endişelenmenize gerek yok. Basit ve elit olun.

Java örneği Merhaba Dünya Programı

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

Sınıf dosyasını derleme

javac HelloWorld.java

Jar dosyasını oluşturma

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

veya

jar cvfe HelloWorld.jar HelloWorld *.class

Jar dosyasını çalıştırma

 java -jar HelloWorld.jar

Veya

java -cp HelloWorld.jar HelloWorld

Evet, jar'seçeneği (giriş noktası ) ebelirtmenize izin verir ve sizin için karşılık gelen bir bildirim dosyası oluşturur. Kavanoz için resmi belgelere bakın . Main-Class
Petr Bodnár

11

Yalnızca jar dosyasını çalıştırmak için bir bildirim oluşturmak istemiyorsanız, jar dosyasını çalıştırdığınızda ana sınıfa doğrudan komut satırından başvurabilirsiniz.

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

Bu, jar dosyasında hangi ana sınıfın çalıştırılacağını ayarlar.


2
-classpathhemen sonra gelir javave kurtulmak -jar(yani bu cevap yanlış)
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

Komut satırında:

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

Çıktı:

Hello Shahid

3

Bu ayrıntılarla ilgilenmek istemiyorsanız, Eclipse veya NetBeans dışa aktarma kavanoz yardımcılarını da kullanabilirsiniz.


3

Eclipse Runnable JAR Dosyası

Bir Java Projesi oluşturun - RunnableJAR

  • Herhangi bir jar dosyası kullanılıyorsa, bunları proje oluşturma yoluna ekleyin.
  • Runnable Jar dosyası oluştururken main () sınıfını seçin. resim açıklamasını buraya girin

Ana sınıf

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

Kavanoz dosyasını java programını ( cmd ) kullanarak argüman sağlayarak çalıştırın ve çıktı ve ekranı tutulma konsolunda görüntüleyin.

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

Tutulmada Kısa yollar bulmak için :

Yardım ► Yardım İçindekiler ► Java geliştirme kullanıcı kılavuzu ► Referanslar ► Menüler ve Eylemler


3

Bu klasör yapısı var:

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

Main.class pakette com.lynda.olivepress

Başka iki paket daha var:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) "Manifest.txt"İki Satır adında , önce Ana Sınıf ve İkinci Boş Satır ile bir dosya oluşturun .

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Manifest ve Ana Sınıf Giriş Noktası ile JAR oluşturun

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

3) JAR'ı çalıştırın

java -jar OlivePressApp.jar

Not: com/lynda/olivepress/*yukarıda belirtilen diğer iki paketi, 1.


-2

Kavanozu çalıştırmak için önce

yürütülebilir kavanoz

sonra

java -jar xyz.jar

komut çalışacak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.