ইন্টেলিজ আইডিইএতে ভুল ম্যানিফেস্ট.এমএফ তৈরি করা হয়েছে .ar


102

আমি OptaPlanner 6.0.1 লাইব্রেরি ব্যবহার করে একটি ইন্টেলিজ আইডিইএর জার আর্টিফ্যাক্টের মাধ্যমে একটি .jar তে প্যাকেজ করার চেষ্টা করছি তবে আমার ম্যানিফেস্ট.এমএফ পরিবর্তে

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

জারটি অপ্টাপ্যালানারের অন্যতম সহায়ক লাইব্রেরি, ecj-3.7.2.jar সরবরাহিত একটি ব্যবহার করে:

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"অ্যাপটি চালানোর চেষ্টা করার সময় একটি ত্রুটি ঘটে। যদি আমি ম্যানিফালিটি ম্যানিফেস্টটিকে আমার সাথে জাজার ফাইলটিতে প্রতিস্থাপন করি তবে সবকিছু সঠিকভাবে কাজ করে। এটি ঠিক করার জন্য আমি কি কিছু করতে পারি?

আমি লাইব্রেরিগুলিকে একটি পৃথক / lib ডিরেক্টরিতে রাখি এবং সেগুলি জার আর্টিফ্যাক্টের মূলটিতে এক্সট্রাক্ট ডিরেক্টরি হিসাবে যুক্ত করা হয়, ইন্টেলিজ আইডিইএ v13.0.1 .1


1
আপনি কি পিঁপড়, মেন বা গ্রেডেলের মতো সরঞ্জাম তৈরি জানেন?
মারিউজস

আমি তাদের সম্পর্কে জানি, তবে এখনও পর্যন্ত আমি কেবল মেক এবং। নেট প্রতিযোগীকরণগুলি (ন্যান্ট, এমএসবিল্ড) ব্যবহার করেছি। ইন্টেলিজের বিল্ড টুলটি এটি না কেটে দিলে আমার মধ্যে কোনটি বেছে নেওয়া উচিত?
গ্রুডল্ফ

1
এখানে এই সমস্যাটি সংশোধন করার জন্য ভোট দিন ,
বড়জোক

উত্তর:


260

আমারও একই সমস্যা ছিল।

আপনার MANIFEST.MF আছে তা নিশ্চিত করুন:

src/main/resources/META_INF/

না

src/main/java/META_INF/

20
প্রকৃতপক্ষে এটিই সঠিক উত্তর, মনে হচ্ছে ইন্টেলিজ আইডিইএ মেটা-আইএনএফ ফোল্ডারটি ভুল প্রতিস্থাপন করছে যখন প্রকল্পের টেম্পলেটটি মাভেন
কুমাইট

আমার ক্ষেত্রে আমার প্রকল্পের লেআউটটি পরিবর্তন করতে হয়েছিল। আমার পূর্বে মেন লেআউট সহ একটি প্রকল্প ছিল তবে আমি মেভেনের সমর্থন সরিয়েছি। আমি স্ক্র্যাচ থেকে একটি প্রকল্প পুনরায় তৈরি করি এবং এখন এটি কার্যকর হয়।
ম্যাক্সেন্স

1
এটি আমার পক্ষে কাজ করছে না, আমাকে মেইনফেষ্ট ফাইলটি প্রকল্পের মূলের দিকে নিয়ে যেতে হয়েছিল।
র্যাকগুলি

ম্যাভেন কি এত বোকা যে এই ফাইলটিকে ভুল দিরের মধ্যে রাখে? : ^)
দারিয়া

@ কুমাইট, ইন্টেলিজজে 2017.1.5 এ এখনও বিষয়টি আছে। আমি ভাবছি যে জেটব্রেন টিম এই বিষয়ে সচেতন কিনা।
ফ্রুকি

12

ঠিক করতে:

  1. ফাইল> প্রকল্পের কাঠামো
  2. বাম দিকে প্রকল্প সেটিংসের অধীনে , "শিল্পকর্মগুলি" নির্বাচন করুন
  3. মাঝের ফলকে JAR সংজ্ঞাটি সন্ধান করুন এবং এটি নির্বাচন করুন
  4. "আউটপুট লেআউট" ট্যাবের বাম ফলকে তালিকায় জার ফাইলটি খুঁজে এটি নির্বাচন করুন
  5. নীচে, "বিদ্যমান ম্যানিফেস্ট ব্যবহার করুন" বোতামটি ক্লিক করুন এবং আপনার প্রকল্প উত্সে থাকা ম্যানিফেস্ট ফাইলটি নির্বাচন করুন।
  6. ওকে ক্লিক করুন এবং বিল্ডটি চালান

3
কোনও "ব্যবহার বিদ্যমান ম্যানিফেস্ট" বোতাম নেই, তবে আউটপুট লেআউটে ম্যানিফেস্ট ফাইলটি সঠিক অবস্থানটির দিকে ইঙ্গিত করছে (... \ src \ main
ava

5
ঠিক আছে, জার আর্টিক্টটি মুছে ফেলা হয়েছিল এবং এটি পুনরায় তৈরি করতে হয়েছিল, এবার "খালি" হিসাবে "নির্ভরতার সাথে মডিউলগুলি থেকে"। "ম্যানিফেস্ট তৈরি করুন" এবং "বিদ্যমান ম্যানিফেস্ট ব্যবহার করুন" বোতামগুলি পেয়েছেন, আমার ম্যানিফেস্ট এবং পুনরায় সজ্জিত লাইব্রেরিগুলিতে নির্দেশিত এবং আউটপুট সংকলন করেছেন। পূর্বের থেকে দুটি পার্থক্য রয়েছে: একটি META_INF \ MANIFEST.INF এখন স্পষ্টভাবে আউটপুট বিন্যাসে অন্তর্ভুক্ত হয়েছে এবং জার ফাইলটি সঠিকভাবে উত্পন্ন হয়েছে বলে মনে হচ্ছে। :)
গ্রডল্ফ

এটি সমস্যার সমাধান করে না, অন্তত আমার জন্য। জামানের উত্তর অবশ্য কার্যকর হয়েছে।
অ্যান্ড্রু ব্রেক্সা

নিম্ন প্রতিনিধি ব্যবহারকারী @ ডিএস-জাস্টিস থেকে মন্তব্যটি নিম্নরূপ যুক্ত করা হয়েছে - খালি জার তৈরির বিষয়ে উপরে গ্রুডলফের উপরের মন্তব্যটি কেবলমাত্র আমদানি করা গ্র্যাডল প্রকল্পের সাথে কয়েক ঘন্টা লড়াই করার পরে আমার পক্ষে কাজ করেছিল। এটি একটি গুরুত্বপূর্ণ প্রশ্ন, দয়া করে আপনার মন্তব্যটিকে পৃথক উত্তর হিসাবে পুনরায় পোস্ট করার বিষয়টি বিবেচনা করুন।
শন মেহান

10

অন্য একটি উত্তরে @ গ্রডল্ফের মন্তব্যে যেমন উল্লিখিত হয়েছে, এটি করার একটি উপায় (এবং আমদানি করা গ্র্যাডল প্রকল্পে আমার পক্ষে কাজ করা একমাত্র) নীচে খালি জার তৈরি করা:

  • প্রকল্পের কাঠামো -> নিদর্শন -> + জার -> খালি
  • সেন্টার ফলকে এখন ম্যানিফেস্ট তৈরি করুন এবং বিদ্যমান ম্যানিফেস্ট বোতাম ব্যবহার করুন। এর মধ্যে একটি ব্যবহার করুন।
  • আমার যদি অসুবিধা হয় আমি যদি আউটপুট রুটে তাদের নিজস্ব উদ্ভাসিত নির্ভর লাইব্রেরিগুলি বের করি তবে তারা মনে হয় যে তারা মাঝেমধ্যে তৈরি নতুন ম্যানিফেস্টকে ওভাররাইট করে। ক্রম আদেশের সাথে জগাখিচুড়ি মনে হচ্ছে এটি কাজ করে।

হালনাগাদ:

এটি অবশ্যই আইডিয়ায় একটি বাগ। এক্সট্রাক্ট ডিরেক্টরি রয়েছে যখন এই লিঙ্কযুক্ত উত্তর নির্ভরযোগ্যভাবে কাজ করে। সারাংশ, আপনি আপনার .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

আপনি যদি প্রধান শ্রেণি নির্দিষ্ট করতে চান তবে আপনাকে এই প্লাগইনটি 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>

ম্যানিফেস্ট.এমএফ কাজ করেছে !!!

আশা করি এটা কাজে লাগবে.


আমার এই সঠিক পরিস্থিতি ছিল এবং আপনি যেমনটি করেছিলেন ঠিক তেমন সিদ্ধান্তে পৌঁছেছেন: <ডিপেন্ডেন্সি> আইটেমগুলির মধ্যে নিউলাইনগুলি একলাইসে কাজ করেছে, তবে ইন্টেলিজ আইডিএতে নয়।
অ্যারিয়ন ক্রাউস

0

এক্সিকিউটেবল জারগুলি তৈরি করার বিভিন্ন উপায় রয়েছে। ইন্টেলিজির জিইউআই বৈশিষ্ট্যটি ব্যবহার করা একটি ভাল উপায়। আরেকটি উপায় হ'ল মাভেন (বা একইভাবে গ্রেড, বিল্ডার ইত্যাদি) ব্যবহার করা যা বিল্ড-সার্ভার বান্ধব:

এটি অপটপ্ল্যানার উদাহরণগুলি মাভেন বিল্ড থেকে কমবেশি অনুলিপি করা যায়:

  1. শেষ-ব্যবহারকারীর জার (অপট্যাপল্যানার-উদাহরণ - *। জার) অবশ্যই তার ম্যানিফেস্টে তার নির্ভরতার ক্লাসপথটি অবশ্যই অন্তর্ভুক্ত করবে
  2. Sh এবং ব্যাট স্ক্রিপ্ট অবশ্যই সেই সাথে জার চালাতে হবে।

0

ম্যানিফেস্টের মতো সমস্যা না হওয়ার জন্য আপনার "এসসিআর" ডিরেক্টরিতে "মেটা-আইএনএফ" নামের একটি ডিরেক্টরি থাকা উচিত। সুতরাং, এটি তৈরি করুন এবং নীচের বিষয়বস্তু সহ এটিতে "MANIFEST.MF" নামে একটি ফাইল রাখুন:

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

উপরের মেইন ক্লাসযুক্ত প্যাকেজের নামটি প্রতিস্থাপন করতে ভুলবেন না!


4
রেকর্ডটি দেখায় যে আমি আগস্টে আপনার পোস্ট থেকে ধর্মীয় উপাদানগুলি ছাঁটাই করেছি। দয়া করে মনে রাখবেন যে সম্প্রদায়টি ধর্মীয় থিমগুলি পোস্টগুলিতে যুক্ত করার বিষয়ে আলোচনা করেছে এবং এর উত্তরটি হ'ল আমরা বরং সেগুলি বাদ দিয়েছি। যদিও এগুলি আপনার প্রোফাইলে বা অবতারে যুক্ত করতে আপনাকে স্বাগতম welcome
অর্ধেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.