JAR फ़ाइल कैसे चलाएं


207

मैंने इस तरह एक JAR फ़ाइल बनाई:

jar cf Predit.jar *.*

मैंने इस JAR फ़ाइल को डबल क्लिक करके चलाया (यह काम नहीं किया)। इसलिए मैंने इसे इस तरह से डॉस प्रॉम्प्ट से चलाया:

java -jar Predit.jar

इसने "मुख्य वर्ग को लोड करने में विफल" अपवादों को उठाया। इसलिए मैंने इस JAR फ़ाइल को निकाला:

jar -xf Predit.jar

और मैंने क्लास फाइल चलाई:

java Predit

इसने अच्छा काम किया। मुझे नहीं पता कि JAR फाइल क्यों नहीं चली। कृपया मुझे JAR फ़ाइल को चलाने के लिए चरण बताएं

जवाबों:


207

आपको जार फ़ाइल मेनिफ़ेस्ट में मुख्य-वर्ग निर्दिष्ट करना होगा।

ओरेकल के ट्यूटोरियल में एक संपूर्ण प्रदर्शन शामिल है, लेकिन यहां एक और एक खरोंच है। आपको दो फ़ाइलों की आवश्यकता है:

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
यदि टेस्ट क्लास जार फ़ाइल के माध्यम से किसी अन्य वर्ग को संदर्भित करता है, तो उस स्थिति में क्या संशोधन किया जाना है?
आनंद

@ और फिर आपको अपने घोषणापत्र में क्लास-पाथ लाइन को शामिल करने और अन्य जार (एस) को संदर्भित करने की आवश्यकता है। docs.oracle.com/javase/tutorial/deployment/jar/downman.html
लूटने

कृपया इस सवाल पर मेरी मदद करें: stackoverflow.com/questions/24740803/…
सजाद

मुझे लगता है कि मैनिफेस्ट-संस्करण होना: 1.0 आवश्यक नहीं है क्योंकि दी गई मैनिफ़ेस्ट फ़ाइल की सामग्री डिफ़ॉल्ट मेनिफ़ेस्ट फ़ाइल में संलग्न हो जाती है जिसमें पहले से ही संस्करण docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii है। ओलेनिकोव

2
यह सिर्फ एंड-टू-एंड नमूना है। एकदम साधारण सा कुरकुरा। मैं घंटों से ऐसा ही कुछ देख रहा था। यह निश्चित नहीं है कि पूरे इंटरनेट को इस तरह के एक सरल उदाहरण के बिना सभी कबाड़ से भरा हुआ है, जब "हैलो दुनिया" जावा जार बनाने के लिए खोज की गई थी। बहुत बहुत शुक्रिया।
अतुल

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

यदि यह जार अन्य जार का उपयोग करता है, तो क्या क्लासपैथ को "/ पथ / से / जार / *" की तरह नहीं होना चाहिए?
मैक्सिम चेतृस्का

5
@ मोम चेट्रस्का हाँ, लेकिन विभाजक :उपयोग *नहीं कर रहा है क्योंकि आपका शेल इसे इस तरह विस्तारित करेगा: "/path/to/jars/a.jar" "/path/to/jars/b.jar"लेकिन आप वास्तव में क्या चाहते हैं "/path/to/jars/a.jar:/path/to/jars/b.jar":।
लिंच

29

चलाने से पहले जार चेक Main-Class: classnameउपलब्ध है या नहीं MANIFEST.MF फ़ाइल में। MANIFEST.MF जार में मौजूद है।

java -jar filename.jar

16

आपको जार में एक मैनिफ़ेस्ट जोड़ना होगा, जो जावा रनटाइम बताता है कि मुख्य वर्ग क्या है। निम्नलिखित सामग्री के साथ एक फ़ाइल 'मेनीफेस्ट। एमएफ' बनाएँ:

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

Change your.programs.MainClass ’को अपने वास्तविक मुख्य वर्ग में बदलें। अब फ़ाइल को जार-फ़ाइल में 'मेटा-इन्फो' नाम के सबफ़ोल्डर में रखें। आप उसके लिए किसी भी ज़िप-उपयोगिता का उपयोग कर सकते हैं।


1
बस जिज्ञासा है, 'मेटा-इन' सबफ़ोल्डर नाम मामला संवेदनशील है? मैंने पारंपरिक रूप से इसे 'मेटा-इन'
एडम पेन्नटर

आप सही हे। युक्ति "मेटा-इन" कहती है और केस असंवेदनशीलता के बारे में कुछ नहीं कहती है ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
फ्लोरियन फनकौशर

12

.Class, .jar फ़ाइल बनाने के लिए एक बहुत ही सरल तरीका।

जार फ़ाइल को निष्पादित करना। प्रकट फ़ाइल के बारे में बहुत अधिक चिंता करने की आवश्यकता नहीं है। इसे सरल और सुरुचिपूर्ण बनाएं।

जावा नमूना नमस्ते विश्व कार्यक्रम

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

वर्ग फ़ाइल संकलित करना

javac HelloWorld.java

जार फ़ाइल बनाना

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

या

jar cvfe HelloWorld.jar HelloWorld *.class

जार फ़ाइल चला रहा है

 java -jar HelloWorld.jar

या

java -cp HelloWorld.jar HelloWorld

हां, का jarविकल्प eआपको Main-Class( प्रविष्टि ) निर्दिष्ट करने देता है और आपके लिए एक संबंधित मैनिफ़ेस्ट फ़ाइल भी बनाता है। जार के लिए आधिकारिक दस्तावेज देखें ।
पेट्र बोडनार

11

यदि आप जार फ़ाइल को चलाने के लिए केवल एक मैनिफ़ेस्ट नहीं बनाना चाहते हैं, तो जब आप जार फ़ाइल चलाते हैं, तो आप कमांड लाइन से मुख्य-वर्ग को सीधे संदर्भित कर सकते हैं।

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

यह जार फ़ाइल में चलाने के लिए मुख्य वर्ग सेट करता है।


2
-classpathठीक बाद आता है javaऔर छुटकारा पाता है -jar(अर्थात यह उत्तर गलत है)
पीट


3

यदि आप उन विवरणों से निपटना नहीं चाहते हैं, तो आप एक्लिप्स या नेटबीन्स से निर्यात जार सहायकों का उपयोग भी कर सकते हैं।


3

ग्रहण योग्य JAR फ़ाइल

एक जावा प्रोजेक्ट बनाएँ - RunnableJAR

  • यदि कोई जार फ़ाइलें उपयोग की जाती हैं, तो उन्हें प्रोजेक्ट बिल्ड पथ में जोड़ें।
  • रननेबल जार फ़ाइल बनाते समय मुख्य () वर्ग का चयन करें। यहां छवि विवरण दर्ज करें

मुख्य वर्ग

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

तर्क की आपूर्ति करके जावा प्रोग्राम ( cmd ) का उपयोग करके जार फ़ाइल चलाएं और ग्रहण कंसोल में आउटपुट और डिस्प्ले प्राप्त करें।

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

ग्रहण में शॉर्ट कट खोजने के लिए :

सहायता ► सहायता सामग्री development जावा विकास उपयोगकर्ता गाइड ► संदर्भ and मेनू और क्रियाएं


3

मेरे पास यह फ़ोल्डर संरचना है:

D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main.class .class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivePress \ olive \ Olive.class

Main.class पैकेज में है com.lynda.olivepress

दो अन्य पैकेज हैं:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) "Manifest.txt"टू लाइन्स, फर्स्ट विथ मेन-क्लास एंड अ सेकंड खाली लाइन नामक फाइल बनाएं ।

Main-Class: com.lynda.olivepress.Main

डी: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) मेनिफेस्ट और मेन-क्लास एंट्री पॉइंट के साथ JAR बनाएं

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

3) भागो जार

java -jar OlivePressApp.jar

नोट: com/lynda/olivepress/*1 बिंदु से पहले, ऊपर उल्लिखित अन्य दो पैकेजों सहित)


-2

जार को चलाने के लिए, पहले यू बनाना होगा

निष्पादन योग्य जार

फिर

जावा -जर xyz.jar

कमांड काम करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.