মেটা-আইএনএফের উদ্দেশ্য কী?


298

জাভাতে, আপনি প্রায়শই একটি মেটা-আইএনএফ ফোল্ডার দেখতে পান যেখানে কিছু মেটা ফাইল থাকে। এই ফোল্ডারটির উদ্দেশ্য কী এবং আমি সেখানে কী রাখতে পারি?


উত্তর:


65

সাধারণভাবে বলতে গেলে, নিজেকে নিজেই মেটা-আইএনএফ-তে কিছু রাখা উচিত নয়। পরিবর্তে, আপনি আপনার জেআর প্যাকেজ আপ করতে যা কিছু ব্যবহার করেন তার উপর নির্ভর করা উচিত। এটি এমন একটি ক্ষেত্র যেখানে আমি মনে করি পিঁপড়া সত্যিই ছাড়িয়ে গেছে: জেআর ফাইলের ম্যানিফেস্ট বৈশিষ্ট্যগুলি উল্লেখ করে। এরকম কিছু বলা খুব সহজ:

<jar ...>
    <manifest>
        <attribute name="Main-Class" value="MyApplication"/>
    </manifest>
</jar>

কমপক্ষে, আমি মনে করি এটি সহজ ... :-)

মুল বক্তব্যটি হ'ল মেটা-আইএনএফকে একটি অভ্যন্তরীণ জাভা মেটা ডিরেক্টরি বিবেচনা করা উচিত । এর সাথে গোলযোগ করবেন না! আপনি আপনার জেআর-এর সাথে যে ফাইলগুলি অন্তর্ভুক্ত করতে চান তা অন্য কোনও উপ-ডিরেক্টরিতে বা জারের নিজেই মূলের মধ্যে স্থাপন করা উচিত।


17
সেবা সম্পর্কে কি? ট্যাগ লাইব্রেরির বর্ণনাকারী? কোনও জেআর এর মূলে কিছু রাখা খারাপ ধারণা। সুস্পষ্ট কনভেনশন না থাকায় মূলের সংস্থানগুলির সংঘর্ষের খুব বেশি সম্ভাবনা রয়েছে।
ইরিকসন

13
আপনি যদি জেপিএ ব্যবহার করছেন তবে আপনাকে অবশ্যই সেই ফোল্ডারে একটি দৃ pers়তা.এক্সএমএল স্থাপন করতে হবে, এটি এমন কিছু যা স্বয়ংক্রিয়ভাবে ঘটে না।
জেআরসফটি 26'11

4
এটি একটি ভাল উত্তর হতে পারে, একটি সাধারণ স্প্রিং এমভিসি অ্যাপ্লিকেশন ব্যতীত, মিতা-আইএনএফই একমাত্র ডিরেক্টরি যেখানে কনফিগারেশন ফাইলগুলি ইউনিট টেস্ট এবং নিয়ন্ত্রণকারী উভয়ই রেফারেন্স করতে পারে। যদি অন্য কোনও ডিরেক্টরি কাজ করে তবে তা দুর্দান্ত হবে - এটি (কমপক্ষে সোজা নয়) not আমার কাছে, যুদ্ধের ফাইলটি পরীক্ষা করার জন্য জার ফাইল তৈরি করা গাড়ি তৈরি করার মতো, যাতে আপনি রান্নাঘরে যেতে পারেন। কমপক্ষে আমার কাছে। তবে আমি রুবি করতে কিছুটা সময় ব্যয় করেছি এবং কনফিগারেশন ফাইলগুলি যতদূর যেতে পারে সেগুলি তারা আমাকে নষ্ট করে দিয়েছে (যদিও আমি আমার পরামিতিগুলির প্রকারগুলি কী তা জানার জন্য কিছুটা এক্সএমএল জাহান্নামের বাণিজ্য করব)। :)
জন লকউড

এই ফোল্ডারটি থাকা ফাইলগুলির ধরণের সম্পর্কে আপনি কি আমাদের কিছু উদাহরণ দিতে পারেন?
মেনাই আলা এডদিন

3
এটি মেটা-আইএনএফ কী তা উত্তর দেয় না। যদি এর উত্তর আমার কাছে থাকে তবে আমি নিজেই সেই ফোল্ডারে "কখনই" কাজ করা উচিত নয় বা না করা উচিত তা বিচার করতে পারি।
ক্রু

164

থেকে সরকারী JAR- র ফাইল নির্দিষ্টকরণ (লিঙ্ক জাভা 7 সংস্করণে যায়, কিন্তু টেক্সট অন্তত v1.3 এ থেকে পরিবর্তন হয়নি):

মেটা-আইএনএফ ডিরেক্টরি

মেটা-আইএনএফ ডিরেক্টরিতে নিম্নলিখিত ফাইল / ডিরেক্টরিগুলি অ্যাপ্লিকেশন, এক্সটেনশান, শ্রেণি লোডার এবং পরিষেবাদিগুলি কনফিগার করতে জাভা 2 প্ল্যাটফর্ম দ্বারা স্বীকৃত এবং ব্যাখ্যা করা হয়েছে:

  • MANIFEST.MF

ম্যানিফেস্ট ফাইলটি এক্সটেনশন এবং প্যাকেজ সম্পর্কিত ডেটা সংজ্ঞায়িত করতে ব্যবহৃত হয়।

  • INDEX.LIST

এই ফাইলটি -iজার সরঞ্জামটির নতুন বিকল্প দ্বারা উত্পাদিত হয়েছে , এতে অ্যাপ্লিকেশন বা এক্সটেনশনে সংজ্ঞায়িত প্যাকেজগুলির জন্য অবস্থানের তথ্য রয়েছে। এটি জারআইন্ডেক্স বাস্তবায়নের অংশ এবং শ্রেণি লোডাররা তাদের শ্রেণি লোডিংয়ের প্রক্রিয়াটি গতি বাড়ানোর জন্য ব্যবহার করে।

  • x.SF

জেআর ফাইলের জন্য স্বাক্ষর ফাইল। 'x' বলতে বেস ফাইলের নাম বোঝায়।

  • x.DSA

একই বেস ফাইলের নামের সাথে স্বাক্ষর ফাইলের সাথে যুক্ত স্বাক্ষর ব্লক ফাইল। এই ফাইলটি সংশ্লিষ্ট স্বাক্ষর ফাইলের ডিজিটাল স্বাক্ষর সংরক্ষণ করে।

  • services/

এই ডিরেক্টরিটি সমস্ত পরিষেবা সরবরাহকারীর কনফিগারেশন ফাইলগুলিকে সঞ্চয় করে।


3
টিএলডি অবশ্যই মেটা-আইএনএফ এর অধীনে যেতে হবে।
এরিকসন

@ এরিকসন, বিস্তৃত?
পেসারিয়ার

জেএসপি ট্যাগ লাইব্রেরির জন্য @ পেসিয়ার ট্যাগ লাইব্রেরির বর্ণনাকারীদের অবশ্যই মেটা-আইএনএফ ডিরেক্টরিতে থাকতে হবে। আমি ভুলে গিয়েছিলেন চাই কি টিএলডি মধ্যে 2008. ফিরে জন্য দাঁড়িয়ে
এরিকসন

27

আমি লক্ষ্য করেছি যে কিছু জাভা লাইব্রেরিগুলি একটি ডিরেক্টরি হিসাবে মেটা-আইএনএফ ব্যবহার শুরু করেছে যাতে কনফিগারেশন ফাইলগুলি অন্তর্ভুক্ত করা উচিত যা জেআর-এর পাশাপাশি প্যাকেজড এবং CLASSPATH এ অন্তর্ভুক্ত করা উচিত। উদাহরণস্বরূপ, বসন্ত আপনাকে এক্সএমএল ফাইলগুলি আমদানি করতে দেয় যা ক্লাসপাথে রয়েছে:

<import resource="classpath:/META-INF/cxf/cxf.xml" />
<import resource="classpath:/META-INF/cxf/cxf-extensions-*.xml" />

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

আমি যখন এই সিদ্ধান্তটির প্রতিচ্ছবি করি তখন আমি জানি না যে কেবলমাত্র একটি নির্দিষ্ট জাভা প্যাকেজের কনফিগারেশন ফাইলগুলি মেটা-আইএনএফ-এর সাথে অন্তর্ভুক্ত করে ঠিক কী হবে। তবে এটি একটি উদীয়মান ডি ফ্যাক্টো স্ট্যান্ডার্ড বলে মনে হচ্ছে; হয়, বা একটি উদীয়মান বিরোধী-প্যাটার্ন :-)


4
কনফিগারেশন কোনও লাইব্রেরির অন্তর্ভুক্ত নয়। আমি মনে করি আপনি এটি "উদীয়মান অ্যান্টি-প্যাটার্ন" দিয়ে পেরেক দিয়েছেন। এটি একটি লাইব্রেরির তুলনায় কনফিগারেশন ফাইলগুলি সনাক্ত করা সত্যিই বেশ সহজ; তাদের খুঁজে পেতে শারীরিকভাবে একই জেআর যাওয়ার দরকার নেই।
ইরিকসন

24
কনফিগারেশনটি কোনও লাইব্রেরির অন্তর্ভুক্ত নয় এই বিবৃতিতে আমি একমত নই। আমি মনে করি কনফিগারেশন, বিশেষত যখন এটি ডিফল্ট হয়, একটি লাইব্রেরিতে সূক্ষ্ম প্যাকেজ হয়। আমি আসলে খুব খুশি যে আরও বেশি ফ্রেমওয়ার্কগুলি এরকম কাজ করা বেছে নিয়েছিল যেমন আপনাকে সমস্ত ধরণের বহিরাগত কনফিগারেশন ফাইলগুলিকে অন্তর্ভুক্ত করতে বাধ্য করে যেমন খুব বেশি আগে হয়নি।
Eelco

1
আমি এমআইটিএএনপিএফ-তেও অনেকগুলি লিসেনসি.টিএক্সটি-টাইপ ফাইল দেখছি যা আমি বিরক্তিকর বলে মনে করি।
তি স্টারগা

@ ইলকো, কোড এবং ডেটা মিশ্রিত করা উচিত নয় । বাহ্যিক কনফিগারেশন ফাইলগুলি অন্তর্ভুক্ত করার অর্থ একটি ব্যবহারযোগ্যতা বিশৃঙ্খলা mean এটি কীভাবে কাঠামোগত হয় তার উপর নির্ভর করে।
পেসারিয়ার

1
এটি @ পেসারিয়র বলতে একটি সুন্দর স্বেচ্ছাসেবী বিষয়। সাধারণ বিবৃতি হিসাবে এটি বেশিরভাগ ক্ষেত্রে পছন্দ।
Eelco

13

META-INF ফোল্ডারটি MANIFEST.MF ফাইলের জন্য হোম । এই ফাইলটিতে জারের সামগ্রীগুলি সম্পর্কে মেটা ডেটা রয়েছে। উদাহরণস্বরূপ, মেইন-ক্লাস নামে একটি এন্ট্রি রয়েছে যা এক্সিকিউটেবল জেআর ফাইলগুলির জন্য স্ট্যাটিক মেইন () সহ জাভা শ্রেণীর নাম নির্দিষ্ট করে।


10

আপনি সেখানে স্থির সংস্থান রাখতে পারেন।

উদাহরণে:

META-INF/resources/button.jpg 

এবং তাদের মাধ্যমে Web3.0-ধারক মধ্যে পাবেন

http://localhost/myapp/button.jpg

> আরও পড়ুন

/META-INF/MANIFEST.MF এর একটি বিশেষ অর্থ রয়েছে:

  1. আপনি যদি কোনও জার ব্যবহার করে চালনা করেন তবে আপনি java -jar myjar.jar org.myserver.MyMainClassমূল শ্রেণীর সংজ্ঞাটিকে জারে নিয়ে যেতে পারেন যাতে আপনি কলটি সঙ্কুচিত করতে পারেন java -jar myjar.jar
  2. আপনি যদি প্যাকেজগুলি ব্যবহার করেন তবে মেটেইনফর্মেশনগুলি সংজ্ঞায়িত করতে পারেন java.lang.Package.getPackage("org.myserver").getImplementationTitle()
  3. আপনি অ্যাপলেট / ওয়েবস্টার্ট মোডে আপনার পছন্দ করতে ডিজিটাল শংসাপত্রগুলি উল্লেখ করতে পারেন।

সুতরাং প্রয়োগে স্থিতিশীল কোনও জিনিস চিত্র বা অন্যান্য স্টাফের মতো এই ডিরেক্টরিতে রাখা উচিত।
মেনাই আলা এডদিন

6

মেভা-তে মেটা-আইএনএফ

মাভেনের স্ট্যান্ডার্ড ডিরেক্টরি লেআউটটির কারণে মেটা-আইএনএফ ফোল্ডারটি বোঝা যায় যা নাম দ্বারা কনভেনশন করে আপনার প্রকল্পের সংস্থানগুলি জেআর-এর মধ্যে রাখে: directories {ভিত্তিক s / এসআরসি / প্রধান / সংস্থান ডিরেক্টরিতে থাকা কোনও ডিরেক্টরি বা ফাইলগুলি আপনার জেআর-এ প্যাকেজ করা হয় জেআর এর গোড়ায় শুরু একই কাঠামো দিয়ে। ফোল্ডার {{ভিত্তিক} / এসসিআর / প্রধান / সংস্থানগুলি / মেটা-আইএনএফ সাধারণত .properties ফাইল থাকে যখন বয়ামে অন্য ফাইলগুলির মধ্যে একটি উত্পন্ন MANIFEST.MF , pom.properties , pom.xML থাকে । ওয়েব সংস্থানগুলি পরিবেশন করতে বসন্তের ব্যবহারের মতো ফ্রেমওয়ার্কও । আরও তথ্যের জন্য দেখুনclasspath:/META-INF/resources/আমি কীভাবে আমার মাভেন প্রকল্পে সংস্থান যুক্ত করব


5

এখানে কেবল তথ্যের সাথে যুক্ত করার জন্য, ওয়ার ওয়ার্ডের ক্ষেত্রে মেটা-আইএনএফ / মনিফেস.এমএফ ফাইলটি বিকাশকারীকে কনটেইনার দ্বারা নির্ধারিত সময় চেক করার জন্য একটি সুবিধা সরবরাহ করে যা নিশ্চিত করে যে ধারক আপনার অ্যাপ্লিকেশনটি সমস্ত শ্রেণীর সন্ধান করতে পারে নির্ভর করে. এটি নিশ্চিত করে যে আপনি যদি কোনও জেআর মিস করেছেন, আপনার অনুপস্থিতি অপেক্ষা করতে হবে না যে আবেদনটি রানটাইমের সময় ফুরিয়েছে এটি অনুধাবন করার জন্য।


5

আমি সম্প্রতি এই সমস্যাটি নিয়ে ভাবছি। সত্যিই মিতা-আইএনএফ ব্যবহারে কোনও বিধিনিষেধ আছে বলে মনে হচ্ছে না। অবশ্যই সেখানে ম্যানিফেস্টটি রাখার প্রয়োজনীয়তা সম্পর্কে কিছু কঠোরতা রয়েছে তবে সেখানে অন্যান্য জিনিস রাখার বিষয়ে কোনও নিষেধাজ্ঞার উপস্থিতি নেই।

কেন এই ক্ষেত্রে?

সিএক্সএফ মামলাটি বৈধ হতে পারে। এখানে অন্য একটি স্থানে যেখানে এই অ-স্ট্যান্ডার্ডটিকে JBoss-ws এর একটি বাজে বাগের আশেপাশে যাওয়ার পরামর্শ দেওয়া হয় যা ডাব্লুএসডিএল এর স্কিমার বিরুদ্ধে সার্ভার-সাইড বৈধতা রোধ করে।

http://community.jboss.org/message/570377#570377

তবে সত্যিকার অর্থে কোনও মানদণ্ড, কোনও তুমি-না-বলে মনে হচ্ছে না। সাধারণত এই জিনিসগুলি খুব কঠোরভাবে সংজ্ঞায়িত করা হয় তবে কিছু কারণে মনে হয় এখানে কোনও মান নেই। অস্বাভাবিক. দেখে মনে হচ্ছে মিতা-আইএনএফ কোনও প্রয়োজনীয় কনফিগারেশনের ক্যাচল প্লেসে পরিণত হয়েছে যা সহজেই অন্য কোনও উপায়ে পরিচালনা করা যায় না।


5

এখানে তথ্য যুক্ত করে, মিতা-আইএনএফ একটি বিশেষ ফোল্ডার যা ClassLoader জারের অন্যান্য ফোল্ডার থেকে আলাদাভাবে আচরণ করে। মেটা-আইএনএফ ফোল্ডারের ভিতরে থাকা উপাদানগুলি এর বাইরে থাকা উপাদানগুলির সাথে মেশানো হয় না।

এটিকে অন্য মূলের মতো ভাবেন। থেকেEnumerator<URL> ClassLoader#getSystemResources(String path) পদ্ধতি এট দৃষ্টিকোণ:

প্রদত্ত পাথটি যখন "মেটা-আইএনএফ" দিয়ে শুরু হয়, তখন পদ্ধতিটি শ্রেণীর পাথের সমস্ত জারের মেটা-আইএনএফ ফোল্ডারগুলির ভিতরে বাসা বাঁধার সংস্থানগুলির সন্ধান করে।

প্রদত্ত পথটি যখন "মেটা-আইএনএফ" দিয়ে শুরু হয় না, তখন পদ্ধতিটি শ্রেণীর পাথের সমস্ত জার এবং ডিরেক্টরিগুলির অন্য সমস্ত ফোল্ডারে (মেটা-আইএনএফের বাইরে) সংস্থানগুলি অনুসন্ধান করে।

আপনি যদি অন্য কোনও ফোল্ডারের নাম সম্পর্কে জানেন যে getSystemResourcesপদ্ধতিটি বিশেষভাবে আচরণ করে, দয়া করে এটি সম্পর্কে মন্তব্য করুন।


3

আপনি যদি জেপিএ 1 ব্যবহার করছেন তবে আপনাকে persistence.xmlসেখানে একটি ফাইল ফেলে দিতে হতে পারে যা আপনি ব্যবহার করতে চান এমন অধ্যবসায়ের ইউনিটের নাম নির্দিষ্ট করে। একটি অধ্যবসায়-ইউনিট মেটাডেটা ফাইলগুলির একটি সেট, এবং ক্লাসগুলি এবং জারগুলিতে একটি শ্রেণিবদ্ধকরণে অবিচলিত থাকার জন্য সমস্ত শ্রেণি ধারণ করে of

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

// ...

EntityManagerFactory emf =
      Persistence.createEntityManagerFactory(persistenceUnitName);

এখানে আরও দেখুন: http://www.datanucleus.org/products/datanucleus/jpa/emf.html


1

সমস্ত উত্তর সঠিক। মেটা-ইনফের অনেকগুলি উদ্দেশ্য রয়েছে। এছাড়াও, টমক্যাট ধারক ব্যবহার সম্পর্কে একটি উদাহরণ এখানে।

টমকাট ডক এ যান এবং " স্ট্যান্ডার্ড ইমপ্লিমেন্টেশন> কপিএক্সএমএল " বৈশিষ্ট্য পরীক্ষা করুন।

বর্ণনা নীচে।

আপনি যদি অ্যাপ্লিকেশনটির ভিতরে থাকা কোনও হোস্টের এক্সএমএলবেসে অনুলিপি করতে অ্যাপ্লিকেশনটির ভিতরে এম্বেড করা কোনও প্রসঙ্গ XML বর্ণনাকারী (/META-INF/context.xML এ অবস্থিত) চান তবে সত্যতে সেট করুন। পরবর্তী শুরুতে, অনুলিপি করা প্রসঙ্গে এক্সএমএল বর্ণনাকারী অ্যাপ্লিকেশনের অভ্যন্তরে বর্ণিত বর্ণনাকারী আরও সাম্প্রতিক হওয়া সত্ত্বেও অ্যাপ্লিকেশনটিতে এম্বেড থাকা কোনও প্রসঙ্গে এক্সএমএল বর্ণনাকারীর পক্ষে অগ্রাধিকার হিসাবে ব্যবহৃত হবে। পতাকাটির মানটি মিথ্যাতে ডিফল্ট হয়। দ্রষ্টব্য যদি মালিকানাধীন হোস্টের ডিপ্লয়এক্সএমএল বৈশিষ্ট্যটি মিথ্যা হয় বা যদি মালিকানাধীন হোস্টের কপিএক্সএমএল বৈশিষ্ট্যটি সত্য হয় তবে এই বৈশিষ্ট্যের কোনও প্রভাব থাকবে না।


0

আপনার META-INF ফোল্ডারের ভিতরে আপনার MANIFEST.MF ফাইল রয়েছে। আপনি alচ্ছিক বা বাহ্যিক নির্ভরতা নির্ধারণ করতে পারেন যা আপনার অবশ্যই অ্যাক্সেস করতে হবে।

উদাহরণ:

বিবেচনা করুন যে আপনি নিজের অ্যাপটি স্থাপন করেছেন এবং আপনার ধারকটি (রান সময়ে) জানতে পেরেছেন যে আপনার অ্যাপ্লিকেশনটির জন্য একটি লাইব্রেরির একটি নতুন সংস্করণ প্রয়োজন যা লিব ফোল্ডারের ভিতরে নেই, সেই ক্ষেত্রে যদি আপনি alচ্ছিক নতুন সংস্করণটি সংজ্ঞায়িত করেন MANIFEST.MF তবে আপনার অ্যাপ্লিকেশনটি উল্লেখ করবে সেখান থেকে নির্ভরতা (এবং ক্রাশ হবে না)

Source: হেড ফার্স্ট জেএসপি এবং সার্লেট


1
এটি কতটা উত্স থেকে উদ্ধৃত হয়েছে তা অস্পষ্ট, এবং এটি ভার্ভ্যাটিম বলে মনে হচ্ছে না উদ্ভট বিন্যাস অপসারণ। কোড নয় এমন পাঠ্যের জন্য কোড বিন্যাস ব্যবহার করবেন না। উদ্ধৃত হয় এমন পাঠ্যের জন্য উদ্ধৃতি বিন্যাস ব্যবহার করবেন না।
লার্নের মারকুইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.