2012-04-02 9 views
5

की सही आंतरिक संरचना क्या है यह वास्तव में मूर्ख सवाल है कि मैं एक अलग जवाब नहीं दे सकता।जेएआर फ़ाइल

पृष्ठभूमि।

मैं एक्लिप्स (एक एएनटी प्लगइन में से एक के साथ, एक एक्सपी टर्मिनल पर) का उपयोग कर रहा हूं।

मैं बस, चींटी के साथ खेल [जार] निर्देश में मैं अपनी पूर्ण JAR फ़ाइल के स्थान की स्थापना कर रहा हूँ और जब मैं अनज़िप 'फ़ाइल

META-INF/MANIFEST मैं निम्नलिखित मिल शुरू कर दिया है। एमएफ MyMainFile.class

जो आंतरिक संरचना के लिए ऑरैकल वेबसाइट पर पाया गया है। (यहां http://docs.oracle.com/javase/tutorial/deployment/jar/view.html)

लेकिन जब मैं अपनी फ़ाइल चलाने की कोशिश करता हूं तो मुझे 'मुख्य श्रेणी नहीं मिली' त्रुटि मिलती है?

मैं कुछ अन्य पदों जहां लोगों को 'अनज़िप' है JAR फ़ाइल और निम्न में से एक संरचना के साथ समाप्त हो गया ...

META-INF/MANIFEST.MF dtvcontrol देखा है/DTVControlApp.class

(यहाँ http://www.coderanch.com/t/528312/java/java/standalone-application से)

तो मैं एक संरचना है जहाँ मेरे वर्ग फ़ाइलों एक निर्देशिका है कि पैकेज के नाम को दर्शाता है में हैं मिलना चाहिए ... जैसे

META-INF/MANIFEST.MF +०१२३५१६४१०MyPackage/MyMainFile.class

और यदि हां, तो मुझे एएनटी का उपयोग करके गलत संरचना क्यों मिल रही है, या 2 अलग-अलग 'सही' आंतरिक संरचनाएं क्यों हैं? (मुझे प्राप्त होने वाले प्रत्येक/नियंत्रण के लिए मुख्य श्रेणी और कक्षापथ को कैसे निर्दिष्ट करें)

यदि आप रुचि रखते हैं, तो मैनिफ़ेस्ट फ़ाइल में (एएनटी का उपयोग करके निर्माण करें) [विशेषता का नाम = "मुख्य-वर्ग" मान = "MyPackage.MyMainFile" /]

इसके अलावा विकास के तहत पैकेज की निर्देशिका संरचना इस प्रकार है के रूप में ...

/JavaDev/MyTestPackage/src (स्रोत फ़ाइलें हैं) // JavaDev/MyTestPackage/bin (ग्रहण से कक्षा फाइलें, या एएनटी जैवैक कार्य से, क्या मैंने इसे गलत तरीके से नामित किया है? क्या मुझे इसे बनाना चाहिए?)

इसके अलावा, जब मैं जार बनाता हूं, तो मैं इसे 'MyTestPackage.jar' नाम नहीं दे रहा हूं लेकिन बस 'test.jar' यह समस्या पैदा कर सकता है? मुझे लगता है कि जैसा कि मैंने अच्छी तरह से समझ लिया है कि [मुख्य श्रेणी] परिभाषा सामग्री क्या है।

यह सब करने के लिए

आगे ...

'MyTestPackage' वास्तव में है कि मैं कहीं और का उपयोग एक छोटे से दृश्य त्रुटि संदेश देना पुस्तकालय है, और मैं के परीक्षण के लिए उपयोग करने के लिए एक मुख्य वर्ग है कि एक दूसरी फ़ाइल की है। जैसे-जैसे यह विभिन्न पुस्तकालयों को इंगित करता है (क्या मुझे सभी एसडब्ल्यूटी पुस्तकालयों को एक निर्दिष्ट निर्देशिका में कॉपी करने की आवश्यकता है?)

मैंने कहीं पढ़ा है कि अगर मैं अपनी मुख्य कक्षा में पुस्तकालयों को लोड करता हूं (जो मैं स्पष्ट रूप से खिड़की खोलने के लिए करता हूं) तो प्रोग्राम चलाने की कोशिश करने से मैं 'मुख्य वर्ग नहीं मिला' पर असफल हो जाऊंगा, अगर मैं उनका उपयोग करता हूं, वही किसी भी 'स्थिर अंतिम' सदस्यों (जो मैं त्रुटियों के लॉगिंग के लिए उपयोग करता हूं) में जोड़ने के लिए भी सच है।

'स्टेटिक फाइनल' समस्या ... मैंने एएनटी में क्लासपाथ को समायोजित करने का प्रयास किया, और मुझे लॉग 4 जे और मेरे 'रैपर' के कनेक्शन के लिए अन्य त्रुटियों का भार मिलता है जो मैं उपयोग करता हूं (इसके साथ करने के लिए खराब आयात), लेकिन पुस्तकालय मौजूद हैं जहां उन्हें कक्षा के रूप में सेट किया जाना चाहिए)।

मुझे लगता है कि मैं लगभग यहाँ हूँ .... लेकिन नहीं काफी ...

मैं छोटे 'लाइब्रेरी प्रोजेक्ट' है कि मैं मुख्य के लिए MAVAN का उपयोग कर के इरादे से बनाने के लिए कर रहा हूँ इस कर रहा हूँ बाहरी पैकेज जो उन्हें सभी को एक साथ जोड़ देगा ... अभी के लिए हालांकि मैं इसे काम करना चाहता हूं ताकि यह काम करे।

मैं पूर्ण स्रोत, या आवश्यकतानुसार कोई अन्य जानकारी प्रदान कर सकता हूं।

अग्रिम धन्यवाद ...

डेविड

+0

vikiiii मैं एक भयानक टिप्पणी में डाल रहा था कि आप कितने 'आंखें' पूछ रहे हैं ... लेकिन फैसला नहीं किया (नोटिस 3 "।" एक नहीं, दो नहीं)। ;) – DaveM

उत्तर

8

जब आप जानते हैं, जहां देखने के लिए यह आसान है।

package mypackage; 
public class MyMainFile { 
    public static void main(String[] args) { 
... 
:

Main-Class: mypackage.MyMainFile 

तो जार की संरचना की जरूरत है

META-INF/MANIFEST.MF 
mypackage/MyMainFile.class 

जहां MyMainFile उचित पैकेज में हो गया है होना करने के लिए: अपने META-INF/MANIFEST.MF पंक्ति है कहो

आपका त्रुटि संदेश MyMainFile गलत जगह पर होने के कारण होता है।

संपादित करें: यह एक समय हो गया है पिछली बार मैंने किया है कि चींटी के साथ, लेकिन मैं तुम्हें कुछ इस तरह की जरूरत है लगता है के बाद से: एक स्रोत फ़ाइल संरचना है कि पैकेज struture को दर्शाता है, कहते हैं कि

src/main/java/mypackage/MyMainFile.java 

और एक निर्देशिका, में संकलित वर्ग फ़ाइल डाल करने के लिए

target 

(मैं Maven सम्मेलनों उपयोग कर रहा हूँ यहाँ, चींटी की परवाह नहीं करता कहना और आप (rightclick उपयोग कर सकते हैं) -> गुण> जावा पथ का निर्माण> स्रोत डी सेट करने के लिए ग्रहण में स्रोत टैब आर/स्रोत/जावा और लक्ष्य/वर्गों के लिए लक्ष्य)।

<target name="compile"> 
    <mkdir dir="target/classes"/> 
    <javac srcdir="src/main/java" destdir="target/classes"/> 
</target> 

ताकि ant compile के बाद आप लक्ष्य में वर्ग फ़ाइल देखना चाहिए

target/classes/mypackage/MyMainFile.class 

फिर एक चींटी जार कार्य है कि संकुल है: तो फिर चींटी में, लक्षित करने के लिए एक संकलन लक्ष्य उस स्रोत से संकलित है इस:

<target name="jar" depends="compile"> 
    <jar destfile="target/MyJarFile.jar" basedir="target/classes"> 
     <manifest> 
      <attribute name="Main-Class" value="mypackage.MyMainFile"/> 
     </manifest> 
    </jar> 
</target> 

ant compile jar कहने के बाद आप एक फ़ाइल MyJarFile होना चाहिए।लक्ष्य के अंदर जार और

java -jar MyJarFile.jar 

मुख्य विधि को चलाना चाहिए।

+0

ठीक है तो मैं JAR फ़ाइल में उस प्रकार की संरचना देने के लिए एएनटी कैसे प्राप्त करूं? या क्या मैं गलत स्थान से एएनटी चला रहा हूं? (ध्यान रखें कि मैं ग्रहण के भीतर से एएनटी कार्य चला रहा हूं, सीएलआई नहीं)। और एएनटी अन्य प्रकार की निर्देशिका संरचना क्यों बना रहा है (जो सही है और एक या दूसरे को कैसे निर्दिष्ट किया जाए, जिसे मैंने एएनटी दस्तावेज़ों में नहीं पाया है ... अभी तक! – DaveM

+0

वर्तमान में मेरे "संकलन" में वॉलनबोर्न मैं इंगित कर रहा हूं aa destfile = "$ {class}" और class = "build", तो क्या यह मेरी समस्या है ?? मैं इसे बदलने जा रहा हूं और देख रहा हूं कि क्या होता है ... – DaveM

+0

संकलन कार्य में, शायद डिफाइल भी है वैसे भी। आप मूल रूप से संकलन कार्य को बताना चाहते हैं: इस src निर्देशिका में सबकुछ लें, इसे पुन: संकलित करें, इसे संकलित करें, और परिणामस्वरूप कक्षाओं को उस नियत निर्देशिका में लिखें, उपनिर्देशिका को संरक्षित करें। – wallenborn

संबंधित मुद्दे