IntelliJ IDEA में गलत घोषणापत्र


102

मैं OptaPlanner 6.0.1 पुस्तकालयों का उपयोग करके एक परियोजना में पैकेज करने की कोशिश कर रहा हूँ। IntelliJ IDEA के जार विरूपण साक्ष्य के माध्यम से।

Manifest-Version: 1.0
Main-Class: a.b.c.app

जार ecj-3.7.2.jar में आपूर्ति की गई एक का उपयोग करता है, OptaPlanner के सहायक पुस्तकालयों में से एक:

Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver

इस वजह से, "no main manifest attribute, in appname.jar"ऐप चलाने का प्रयास करते समय एक त्रुटि होती है। यदि मैं मैन्युअल रूप से .jar फ़ाइल को मेरा सब कुछ सही ढंग से काम करता है के साथ बदलें। इसे ठीक करने के लिए क्या ऐसा कुछ है, जो मेरे लिए करना संभव है?

मैं पुस्तकालयों को एक अलग / कार्यकारी निर्देशिका में रखता हूं और उन्हें जार विरूपण साक्ष्य के मूल में जोड़ा गया है जैसे कि अर्केलिजेई आईडीईए v13.0.1 है।


1
क्या आप जानते हैं चींटी, मावेन या ग्रेडेल जैसे उपकरण बनाते हैं?
MariuszS

मैं उनके बारे में जानता हूं, लेकिन अभी तक मैंने केवल बनाने और .NET समकक्षों (NAnt, MSBuild) का उपयोग किया है। यदि IntelliJ के निर्माण उपकरण में कटौती नहीं होगी, तो मुझे उनमें से किसे चुनना चाहिए?
ग्रुडोल्फ

1
इस मुद्दे को यहाँ ठीक करने के लिए वोट करें ,
bigjosh

जवाबों:


260

मुझे भी यही समस्या थी।

सुनिश्चित करें कि आपका MANIFEST.MF इसमें है:

src/main/resources/META_INF/

नहीं

src/main/java/META_INF/

20
यह वास्तव में सही उत्तर है, ऐसा लगता है कि Intellij IDEA META-INF फ़ोल्डर को गलत तरीके से बदल रहा है जब प्रोजेक्ट टेम्पलेट Maven है
Kumait

मेरे मामले में मुझे अपनी परियोजना का लेआउट बदलना पड़ा। मेरे पास पहले मावेन लेआउट के साथ एक परियोजना थी लेकिन मैंने मावेन का समर्थन हटा दिया। मैं स्क्रैच से एक प्रोजेक्ट को फिर से बनाता हूं और अब यह काम करता है।
मैक्सेंस

1
यह मेरे लिए काम नहीं कर रहा था, मुझे प्रोजेक्ट की जड़ में मेनफ़ेस्ट फ़ाइल को स्थानांतरित करना पड़ा।
20

क्या मैवेन इतना बेवकूफ है जो इस फाइल को गलत डायर में रखता है? : ^)
दरिया

@ कुमाईत, अभी भी IntelliJ 2017.1.5 में मुद्दा है। मुझे आश्चर्य हो रहा है कि क्या जेटब्रेन टीम को इसकी जानकारी है।
फ्रूकी

12

तै होना:

  1. फ़ाइल> प्रोजेक्ट संरचना
  2. बाईं ओर प्रोजेक्ट सेटिंग्स के तहत , "कलाकृतियों" का चयन करें
  3. JAR परिभाषा खोजें मध्य फलक में और इसे चुनें
  4. "आउटपुट लेआउट" टैब के बाएं फलक में सूची में जार फ़ाइल ढूंढें और इसे चुनें
  5. सबसे नीचे, "मौजूदा प्रयोग करें बटन" बटन पर क्लिक करें और अपने प्रोजेक्ट स्रोत में प्रकट होने वाली फ़ाइल का चयन करें।
  6. OK पर क्लिक करें और बिल्ड को रन करें

3
कोई "वर्तमान में उपयोग किए जा रहे मैनिफ़ेस्ट" बटन नहीं है, हालाँकि आउटपुट लेआउट में मैनिफ़ेस्ट फ़ाइल सही स्थान (... \ src \ main \ java \ META-INF \ MANIFEST.MF) की ओर इशारा कर रही है
grudolf

5
ठीक है, जार विरूपण साक्ष्य को हटाना और इसे फिर से बनाना था, इस बार "निर्भरता वाले मॉड्यूल से" के बजाय "खाली" के रूप में। "मैनिफ़ेस्ट बनाएँ" और "मौजूदा मैनिफ़ेस्ट का उपयोग करें" बटन मिला, मेरे मैनिफ़ेस्ट और रीडेड लाइब्रेरीज़ की ओर इशारा किया और आउटपुट संकलित किया। पहले से दो अंतर हैं: एक META_INF \ MANIFEST.INF अब आउटपुट लेआउट में स्पष्ट रूप से शामिल है और जार फ़ाइल सही ढंग से उत्पन्न होती है। :)
ग्रूडोल्फ

यह समस्या को हल नहीं करता है, कम से कम मेरे लिए। हालांकि जामाहन के जवाब ने काम किया।
एंड्रयू ब्रेक्सा

कम प्रतिनिधि उपयोगकर्ता @ डीएस-न्याय से इस प्रकार जोड़ा गया टिप्पणी - @ एक खाली जार बनाने के बारे में ऊपर दिए गए @ grudolf की टिप्पणी केवल एक चीज थी जो एक आयातित ग्रेडल परियोजना के साथ संघर्ष करने के कई घंटों के बाद मेरे लिए काम करती थी। यह एक महत्वपूर्ण प्रश्न है, कृपया अपनी टिप्पणी को एक अलग उत्तर के रूप में प्रतिष्ठित करें।
शॉन मेहान

10

जैसा कि अन्य उत्तरों में से एक में @ grudolf की टिप्पणी में उल्लेख किया गया है, ऐसा करने का एक तरीका (और केवल एक जिसने मेरे लिए एक आयातित ग्रेडल प्रोजेक्ट में काम किया है) एक खाली जार बनाने के लिए है:

  • परियोजना संरचना -> कलाकृतियाँ -> + जार -> खाली
  • सेंटर पेन में अब Create Manifest और Use Existing Manifest बटन हैं। इनमें से किसी एक का उपयोग करें।
  • मुझे कठिनाई हुई अगर मैंने आउटपुट रूट में अपने स्वयं के मेनिफेस्टों के साथ आश्रित पुस्तकालयों को निकाला, तो उन्हें नए मैन्युअल रूप से बनाए गए प्रकट रूप को अधिलेखित करने के लिए लग रहा था। संचालन के आदेश के साथ खिलवाड़ करना यह काम करने के लिए लग रहा था।

अपडेट करें:

यह निश्चित रूप से आइडिया में एक बग है। यह लिंक किए गए उत्तर मज़बूती से काम करते हैं जब निकाले गए निर्देशिका होते हैं। संक्षेप में, आप अपने .idea / JARNAME.xml, के लिए निम्न तत्व जोड़ जोड़ने लगता है बहुत ऊपर की <root>अपने जार के लिए तत्व। आपकी नई फ़ाइल-कॉपी के ऊपर कोई भी निकाले गए तत्व जिसमें एक मेनिफ़ेस्ट होता है, आपके नए रूप को प्रकट करेगा।

  <element id="directory" name="/META-INF">
    <element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" />
  </element>

7

यदि आप Main Class निर्दिष्ट करना चाहते हैं, तो आपको इस प्लगइन को pom.xml में जोड़ना होगा:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>Form</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

1

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था।

समस्या फ़ाइल pom.xml में थी।

<archive>
  <manifestEntries>
    <Dependencies>one.jar,
                  two.rar, 
                  other.jar
    </Dependencies>
  </manifestEntries>
</archive>

मुझे नहीं पता कि यह कोड ग्रहण में किस कारण से काम करता है, लेकिन इंटेलीज में नहीं

यह सही है।

<archive>
  <manifestEntries>
    <Dependencies>one.jar, two.rar, other.jar</Dependencies>
  </manifestEntries>
</archive>

Manifest.mf ने काम किया !!!

आशा है कि ये आपकी मदद करेगा।


मेरे पास यह सटीक स्थिति थी और आप उसी निष्कर्ष पर पहुँचे जो आपने किया था: ग्रहण में <निर्भरता> आइटम के बीच की नई कड़ियाँ, लेकिन इंटेलीज आईडीईए में नहीं।
एरियन क्रूस

0

निष्पादन योग्य जार उत्पन्न करने के कई तरीके हैं। IntelliJ की GUI सुविधा का उपयोग करना एक अच्छा तरीका है। एक अन्य तरीका मावेन का उपयोग करना है (या जैसे कि ग्रेडेल, बिल्डर, आदि में) जो कि बिल्ड-सर्वर फ्रेंडली है:

यह अधिक या कम प्रतिलिपि ऑप्टापलनर उदाहरणों से निर्मित होने योग्य है:

  1. अंतिम-उपयोगकर्ता जार (ऑप्टैप्लानेर-उदाहरण - *। जार) को अपनी अभिव्यक्तियों में अपने निर्भरता के वर्गपथ को शामिल करना होगा ।
  2. श और बल्ले स्क्रिप्ट को उस जार को उसी हिसाब से चलाना होगा।

0

मैनिफेस्ट जैसी कोई समस्या नहीं है, आपके पास "src" डायरेक्टरी में "META-INF" नाम की एक निर्देशिका होनी चाहिए। इसलिए, इसे बनाएं और "MANIFEST.MF" नामक एक फाइल को इसमें निम्नलिखित सामग्री के साथ डालें:

Manifest-Version: 1.0
Main-Class: <packageName>.Main

ऊपर के मुख्य वर्ग वाले पैकेज के नाम को बदलना न भूलें!


4
रिकॉर्ड से पता चलता है कि मैंने अगस्त में आपके पोस्ट से धार्मिक सामग्री की छंटनी की थी। कृपया ध्यान दें कि समुदाय ने धार्मिक विषयों को पदों में जोड़ने पर चर्चा की है , और उत्तर यह है कि हम चाहेंगे कि उन्हें छोड़ दिया जाए। हालाँकि, आपको अपनी प्रोफ़ाइल या अवतार में जोड़ने का उनका स्वागत है।
२०
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.