2009-08-06 32 views
17

नेटबीन्स द्वारा उत्पन्न जार की manifest.mf फ़ाइल में प्रविष्टियां जोड़ना संभव है? उदाहरण के लिएनेटबीन्स मेनिफेस्ट

बनाने के लिए एक ओजीआई बंडल बनाने के लिए।

उत्तर

17

ध्यान दें कि आप एक चींटी कार्य के माध्यम से एक मेनिफेस्ट ऑन-द-फ्लाई बना सकते हैं और गुणों को गतिशील रूप से सेट कर सकते हैं।

सबसे पहले, आपको "nbproject" निर्देशिका में मिली अपनी नेटबीन्स "project.properties" फ़ाइल को अपडेट करना होगा। फ़ाइल में निम्न पंक्ति जोड़ें:

manifest.file=manifest.mf 

अगला, "build.xml" फ़ाइल का उपयोग करके मैनिफेस्ट बनाने/अपडेट करने के लिए एक चींटी कार्य बनाएं। इस उदाहरण में, हम संस्करण संख्या और जार फ़ाइल की तारीख सेट करेंगे।

<target name="-pre-init"> 
    <property name="project.name" value="My Library" /> 
    <property name="version.num" value="1.4.1" /> 
    <tstamp> 
     <format property="NOW" pattern="yyyy-MM-dd HH:mm:ss z" /> 
    </tstamp> 

    <!-- 
    <exec outputproperty="svna.version" executable="svnversion"> 
     <arg value="-c" /> 
     <redirector> 
      <outputfilterchain> 
       <tokenfilter> 
        <replaceregex pattern="^[0-9]*:?" replace="" flags="g"/> 
        <replaceregex pattern="M" replace="" flags="g"/> 
       </tokenfilter> 
      </outputfilterchain> 
     </redirector> 
    </exec> 
    --> 


    <manifest file="MANIFEST.MF"> 
     <attribute name="Bundle-Name" value="${project.name}" />   
     <attribute name="Bundle-Version" value="${version.num}" /> 
     <attribute name="Bundle-Date" value="${NOW}" /> 
     <!--<attribute name="Bundle-Revision" value="${svna.version}" />--> 
     <attribute name="Implementation-Title" value="${project.name}" /> 
     <attribute name="Implementation-Version" value="${version.num}" /> 
     <attribute name="Implementation-URL" value="http://www.example.com" /> 
    </manifest> 

</target> 

यह आपकी नेटबीन्स प्रोजेक्ट निर्देशिका में एक मेनिफेस्ट फ़ाइल बनायेगा और इसे आपके जार फ़ाइल में रखेगा। आप अपने NetBeans परियोजना निर्देशिका से ऑटोजनरेटेड मैनिफ़ेस्ट फ़ाइल को नष्ट करना चाहते हैं, तो बस एक चींटी कार्य (बेशक पद जार) बनाने के लिए:

<target name="-post-jar"> 
    <delete file="MANIFEST.MF"/> 
</target> 
+0

में काम नहीं करता है, यह वास्तव में अच्छा काम करता है, धन्यवाद! लेकिन कोडबेस और अनुमतियां क्यों नहीं बदलती हैं (यह डिफ़ॉल्ट रूप से सेट है)। क्या यह यहां बदला नहीं जा सकता है? – hgerdin

1
build.xml रूप में एक ही निर्देशिका आप मैं Netbeans 6.7.1 का उपयोग कर रहा बाहर कर देता है अपने MANIFEST.MF फ़ाइल

डाल सकते में

कि निर्माण imp.xml (वास्तविक निर्माण स्क्रिप्ट Netbeans का उपयोग करता है)

  • लक्ष्य जो अगर 'प्रकट साथ, बिना मुख्य श्रेणी'
  • लेकिन ऐसा लगता है एक है चलाता है 'प्रकट साथ, मुख्य श्रेणी के साथ'
नहीं है

तो .. सुनिश्चित करें कि आप परियोजना गुण होते हैं बनाने, चलाने, मुख्य-क्लास -anything-

से भर मुझे लगता है कि यह है कि कुछ गैर-दस्तावेजी सुविधा :(

यह मेरा प्रकट विषयवस्तु है:

Manifest-Version: 1.0 
X-COMMENT: Main-Class will be added automatically by build 
Bundle-ManifestVersion: 2 
Bundle-Name: jinstall 
Bundle-SymbolicName: jinstall 
Import-Package: (....) 
Export-Package: (....) 
Bundle-Activator: (.....) 
+0

हाँ, पर उस के साथ समस्या यह है कि NetBeans किसी भी संपत्ति यह नहीं समझती मना कर दिया है, और यह बहुत नहीं समझती है। बंडल-मैनिफेस्ट वर्जन या बंडल-एक्टिवेटर जैसे सभी ओजीआई गुण अस्वीकार कर दिए जाते हैं। –

+0

मुझे सामान्य नेटबीन्स 6.7.1 जावा-प्रोजेक्ट में यह समस्या नहीं है। मैं कस्टम मैनिफेस्ट में किसी भी बंडल-xxxx प्रॉपर्टी को भर सकता हूं। मेरे मामले में क्या हुआ था कि यह पूरी मैनिफेस्ट फ़ाइल को पूरी तरह से अनदेखा कर दिया और एक डिफ़ॉल्ट मैनिफेस्ट बनाया। – Houtman

-2

this article देखें।

यहाँ यह वर्णन किया गया है कि कैसे करने के लिए

  • खुद चींटी लक्ष्य बनाने
  • Netbeans
  • से उत्पादन जार के लिए
  • रन कस्टम चींटी लक्ष्य MANIFEST.MF को मैन्युअल प्रविष्टियों जोड़ने
+0

संदर्भित आलेख इस प्रश्न के लिए बहुत सीधे बात नहीं करता है। यदि आप कस्टम चींटी कार्य का जिक्र कर रहे हैं ... यह मैनिफेस्ट में प्रवेश जोड़ने के सरल कार्य के लिए बहुत अच्छा दृष्टिकोण नहीं है, IMHO। –

6

दिलचस्प जानकारी यहां हो सकती है:

http://wiki.netbeans.org/FaqNoMainClass

+2

यह सही जवाब है! बस प्रोजेक्ट रूट में वांछित manifest.mf बनाएं और project.properties फ़ाइल करने के लिए "manifest.file = manifest.mf" संलग्न करें। मान लें कि आपकी प्रोजेक्ट गतिशील रूप से मैनिफेस्ट में किसी भी मान को सेट नहीं कर रहा है, यानी। अगर आपको यहां फैंसी पाने की ज़रूरत है, तो यह समय मेवेन की ओर मुड़ने का समय है! –

+0

Yepp। यह शायद सबसे अच्छा समाधान है। हालांकि मैं स्पष्ट रूप से मैनिफेस्ट फ़ाइल में जो कुछ भी समाप्त होता है उसे संशोधित करने के लिए बेहतर gui विकल्प बनना चाहता हूं। लेकिन अभी के लिए, यह करेगा। – UmaN

+0

यह मेरे लिए एनबी 8. – Yster

0

क्यों एक मेवेन प्रोजेक्ट का उपयोग नहीं कर रहा है, जो मेरे लिए अच्छा काम करता है? जैसे apache felix

this pluggable Swing example देखें जो मैंने नेटबीन में बनाया था।

2

मेरे पास एक कस्टम क्लास फ़ाइल के साथ एक जावा क्लास लाइब्रेरी प्रोजेक्ट है - ओएसजीआई बंडल के लिए बिल्कुल सही। यह पहली project.properties संपादित काम कर पाने और सेट करने के लिए:

manifest.file=manifest.mf 
manifest.available=true 

परियोजना निर्देशिका में अपने स्वयं के कस्टम MANIFEST.MF फ़ाइल बनाएँ।

(इस बिंदु पर यदि आप एक साफ/निर्माण करने की कोशिश करते हैं तो भी आपको अपनी कस्टम मेनिफेस्ट फ़ाइल नहीं मिलेगी - नेटबीन स्वयं ही प्रदान करेगा। ऐसा इसलिए है क्योंकि build-impl.xml चींटी लक्ष्य "-do-jar-with - पुस्तकालयों के बिना-प्रकट "को तुरंत" -do-jar-with-manifest "के बाद बुलाया जा रहा है, एक डिफ़ॉल्ट नेटबीन मैनिफेस्ट जेएआर के साथ अपनी कस्टम मैनिफेस्ट जेएआर फ़ाइल को ओवरराइट कर रहा है।)

अपने build.xml पर एक कस्टम लक्ष्य जोड़ें निम्नानुसार फ़ाइल:

<target name="-do-jar-with-libraries-without-manifest"> 
    <!-- Inserted to prevent target from running so we can have a custom 
     manifest file with a class library project type. --> 
</target> 

नेटबीन 6.7 में परीक्षण किया गया।1

1

मामले में आप Maven (NBM-Maven-प्लगइन) का उपयोग कर, इसे देखो

NBM Maven plugin