জাভাতে, আপনি প্রায়শই একটি মেটা-আইএনএফ ফোল্ডার দেখতে পান যেখানে কিছু মেটা ফাইল থাকে। এই ফোল্ডারটির উদ্দেশ্য কী এবং আমি সেখানে কী রাখতে পারি?
জাভাতে, আপনি প্রায়শই একটি মেটা-আইএনএফ ফোল্ডার দেখতে পান যেখানে কিছু মেটা ফাইল থাকে। এই ফোল্ডারটির উদ্দেশ্য কী এবং আমি সেখানে কী রাখতে পারি?
উত্তর:
সাধারণভাবে বলতে গেলে, নিজেকে নিজেই মেটা-আইএনএফ-তে কিছু রাখা উচিত নয়। পরিবর্তে, আপনি আপনার জেআর প্যাকেজ আপ করতে যা কিছু ব্যবহার করেন তার উপর নির্ভর করা উচিত। এটি এমন একটি ক্ষেত্র যেখানে আমি মনে করি পিঁপড়া সত্যিই ছাড়িয়ে গেছে: জেআর ফাইলের ম্যানিফেস্ট বৈশিষ্ট্যগুলি উল্লেখ করে। এরকম কিছু বলা খুব সহজ:
<jar ...>
<manifest>
<attribute name="Main-Class" value="MyApplication"/>
</manifest>
</jar>
কমপক্ষে, আমি মনে করি এটি সহজ ... :-)
মুল বক্তব্যটি হ'ল মেটা-আইএনএফকে একটি অভ্যন্তরীণ জাভা মেটা ডিরেক্টরি বিবেচনা করা উচিত । এর সাথে গোলযোগ করবেন না! আপনি আপনার জেআর-এর সাথে যে ফাইলগুলি অন্তর্ভুক্ত করতে চান তা অন্য কোনও উপ-ডিরেক্টরিতে বা জারের নিজেই মূলের মধ্যে স্থাপন করা উচিত।
থেকে সরকারী JAR- র ফাইল নির্দিষ্টকরণ (লিঙ্ক জাভা 7 সংস্করণে যায়, কিন্তু টেক্সট অন্তত v1.3 এ থেকে পরিবর্তন হয়নি):
মেটা-আইএনএফ ডিরেক্টরি
মেটা-আইএনএফ ডিরেক্টরিতে নিম্নলিখিত ফাইল / ডিরেক্টরিগুলি অ্যাপ্লিকেশন, এক্সটেনশান, শ্রেণি লোডার এবং পরিষেবাদিগুলি কনফিগার করতে জাভা 2 প্ল্যাটফর্ম দ্বারা স্বীকৃত এবং ব্যাখ্যা করা হয়েছে:
MANIFEST.MF
ম্যানিফেস্ট ফাইলটি এক্সটেনশন এবং প্যাকেজ সম্পর্কিত ডেটা সংজ্ঞায়িত করতে ব্যবহৃত হয়।
INDEX.LIST
এই ফাইলটি
-i
জার সরঞ্জামটির নতুন বিকল্প দ্বারা উত্পাদিত হয়েছে , এতে অ্যাপ্লিকেশন বা এক্সটেনশনে সংজ্ঞায়িত প্যাকেজগুলির জন্য অবস্থানের তথ্য রয়েছে। এটি জারআইন্ডেক্স বাস্তবায়নের অংশ এবং শ্রেণি লোডাররা তাদের শ্রেণি লোডিংয়ের প্রক্রিয়াটি গতি বাড়ানোর জন্য ব্যবহার করে।
x.SF
জেআর ফাইলের জন্য স্বাক্ষর ফাইল। 'x' বলতে বেস ফাইলের নাম বোঝায়।
x.DSA
একই বেস ফাইলের নামের সাথে স্বাক্ষর ফাইলের সাথে যুক্ত স্বাক্ষর ব্লক ফাইল। এই ফাইলটি সংশ্লিষ্ট স্বাক্ষর ফাইলের ডিজিটাল স্বাক্ষর সংরক্ষণ করে।
services/
এই ডিরেক্টরিটি সমস্ত পরিষেবা সরবরাহকারীর কনফিগারেশন ফাইলগুলিকে সঞ্চয় করে।
আমি লক্ষ্য করেছি যে কিছু জাভা লাইব্রেরিগুলি একটি ডিরেক্টরি হিসাবে মেটা-আইএনএফ ব্যবহার শুরু করেছে যাতে কনফিগারেশন ফাইলগুলি অন্তর্ভুক্ত করা উচিত যা জেআর-এর পাশাপাশি প্যাকেজড এবং CLASSPATH এ অন্তর্ভুক্ত করা উচিত। উদাহরণস্বরূপ, বসন্ত আপনাকে এক্সএমএল ফাইলগুলি আমদানি করতে দেয় যা ক্লাসপাথে রয়েছে:
<import resource="classpath:/META-INF/cxf/cxf.xml" />
<import resource="classpath:/META-INF/cxf/cxf-extensions-*.xml" />
এই উদাহরণে, আমি অ্যাপাচি সিএক্সএফ ব্যবহারকারী গাইড থেকে সরাসরি উদ্ধৃত করছি । একটি প্রকল্পে আমি কাজ করেছি যার মধ্যে বসন্তের মাধ্যমে আমাদের একাধিক স্তরের কনফিগারেশনের অনুমতি দিতে হয়েছিল, আমরা এই সম্মেলনটি অনুসরণ করেছি এবং আমাদের কনফিগারেশন ফাইলগুলি মেটা-আইএনএফ-এ রেখেছি।
আমি যখন এই সিদ্ধান্তটির প্রতিচ্ছবি করি তখন আমি জানি না যে কেবলমাত্র একটি নির্দিষ্ট জাভা প্যাকেজের কনফিগারেশন ফাইলগুলি মেটা-আইএনএফ-এর সাথে অন্তর্ভুক্ত করে ঠিক কী হবে। তবে এটি একটি উদীয়মান ডি ফ্যাক্টো স্ট্যান্ডার্ড বলে মনে হচ্ছে; হয়, বা একটি উদীয়মান বিরোধী-প্যাটার্ন :-)
META-INF ফোল্ডারটি MANIFEST.MF ফাইলের জন্য হোম । এই ফাইলটিতে জারের সামগ্রীগুলি সম্পর্কে মেটা ডেটা রয়েছে। উদাহরণস্বরূপ, মেইন-ক্লাস নামে একটি এন্ট্রি রয়েছে যা এক্সিকিউটেবল জেআর ফাইলগুলির জন্য স্ট্যাটিক মেইন () সহ জাভা শ্রেণীর নাম নির্দিষ্ট করে।
আপনি সেখানে স্থির সংস্থান রাখতে পারেন।
উদাহরণে:
META-INF/resources/button.jpg
এবং তাদের মাধ্যমে Web3.0-ধারক মধ্যে পাবেন
http://localhost/myapp/button.jpg
/META-INF/MANIFEST.MF এর একটি বিশেষ অর্থ রয়েছে:
java -jar myjar.jar org.myserver.MyMainClass
মূল শ্রেণীর সংজ্ঞাটিকে জারে নিয়ে যেতে পারেন যাতে আপনি কলটি সঙ্কুচিত করতে পারেন java -jar myjar.jar
।java.lang.Package.getPackage("org.myserver").getImplementationTitle()
।মাভেনের স্ট্যান্ডার্ড ডিরেক্টরি লেআউটটির কারণে মেটা-আইএনএফ ফোল্ডারটি বোঝা যায় যা নাম দ্বারা কনভেনশন করে আপনার প্রকল্পের সংস্থানগুলি জেআর-এর মধ্যে রাখে: directories {ভিত্তিক s / এসআরসি / প্রধান / সংস্থান ডিরেক্টরিতে থাকা কোনও ডিরেক্টরি বা ফাইলগুলি আপনার জেআর-এ প্যাকেজ করা হয় জেআর এর গোড়ায় শুরু একই কাঠামো দিয়ে। ফোল্ডার {{ভিত্তিক} / এসসিআর / প্রধান / সংস্থানগুলি / মেটা-আইএনএফ সাধারণত .properties ফাইল থাকে যখন বয়ামে অন্য ফাইলগুলির মধ্যে একটি উত্পন্ন MANIFEST.MF , pom.properties , pom.xML থাকে । ওয়েব সংস্থানগুলি পরিবেশন করতে বসন্তের ব্যবহারের মতো ফ্রেমওয়ার্কও । আরও তথ্যের জন্য দেখুনclasspath:/META-INF/resources/
আমি কীভাবে আমার মাভেন প্রকল্পে সংস্থান যুক্ত করব ।
এখানে কেবল তথ্যের সাথে যুক্ত করার জন্য, ওয়ার ওয়ার্ডের ক্ষেত্রে মেটা-আইএনএফ / মনিফেস.এমএফ ফাইলটি বিকাশকারীকে কনটেইনার দ্বারা নির্ধারিত সময় চেক করার জন্য একটি সুবিধা সরবরাহ করে যা নিশ্চিত করে যে ধারক আপনার অ্যাপ্লিকেশনটি সমস্ত শ্রেণীর সন্ধান করতে পারে নির্ভর করে. এটি নিশ্চিত করে যে আপনি যদি কোনও জেআর মিস করেছেন, আপনার অনুপস্থিতি অপেক্ষা করতে হবে না যে আবেদনটি রানটাইমের সময় ফুরিয়েছে এটি অনুধাবন করার জন্য।
আমি সম্প্রতি এই সমস্যাটি নিয়ে ভাবছি। সত্যিই মিতা-আইএনএফ ব্যবহারে কোনও বিধিনিষেধ আছে বলে মনে হচ্ছে না। অবশ্যই সেখানে ম্যানিফেস্টটি রাখার প্রয়োজনীয়তা সম্পর্কে কিছু কঠোরতা রয়েছে তবে সেখানে অন্যান্য জিনিস রাখার বিষয়ে কোনও নিষেধাজ্ঞার উপস্থিতি নেই।
কেন এই ক্ষেত্রে?
সিএক্সএফ মামলাটি বৈধ হতে পারে। এখানে অন্য একটি স্থানে যেখানে এই অ-স্ট্যান্ডার্ডটিকে JBoss-ws এর একটি বাজে বাগের আশেপাশে যাওয়ার পরামর্শ দেওয়া হয় যা ডাব্লুএসডিএল এর স্কিমার বিরুদ্ধে সার্ভার-সাইড বৈধতা রোধ করে।
http://community.jboss.org/message/570377#570377
তবে সত্যিকার অর্থে কোনও মানদণ্ড, কোনও তুমি-না-বলে মনে হচ্ছে না। সাধারণত এই জিনিসগুলি খুব কঠোরভাবে সংজ্ঞায়িত করা হয় তবে কিছু কারণে মনে হয় এখানে কোনও মান নেই। অস্বাভাবিক. দেখে মনে হচ্ছে মিতা-আইএনএফ কোনও প্রয়োজনীয় কনফিগারেশনের ক্যাচল প্লেসে পরিণত হয়েছে যা সহজেই অন্য কোনও উপায়ে পরিচালনা করা যায় না।
এখানে তথ্য যুক্ত করে, মিতা-আইএনএফ একটি বিশেষ ফোল্ডার যা ClassLoader
জারের অন্যান্য ফোল্ডার থেকে আলাদাভাবে আচরণ করে। মেটা-আইএনএফ ফোল্ডারের ভিতরে থাকা উপাদানগুলি এর বাইরে থাকা উপাদানগুলির সাথে মেশানো হয় না।
এটিকে অন্য মূলের মতো ভাবেন। থেকেEnumerator<URL> ClassLoader#getSystemResources(String path)
পদ্ধতি এট দৃষ্টিকোণ:
প্রদত্ত পাথটি যখন "মেটা-আইএনএফ" দিয়ে শুরু হয়, তখন পদ্ধতিটি শ্রেণীর পাথের সমস্ত জারের মেটা-আইএনএফ ফোল্ডারগুলির ভিতরে বাসা বাঁধার সংস্থানগুলির সন্ধান করে।
প্রদত্ত পথটি যখন "মেটা-আইএনএফ" দিয়ে শুরু হয় না, তখন পদ্ধতিটি শ্রেণীর পাথের সমস্ত জার এবং ডিরেক্টরিগুলির অন্য সমস্ত ফোল্ডারে (মেটা-আইএনএফের বাইরে) সংস্থানগুলি অনুসন্ধান করে।
আপনি যদি অন্য কোনও ফোল্ডারের নাম সম্পর্কে জানেন যে getSystemResources
পদ্ধতিটি বিশেষভাবে আচরণ করে, দয়া করে এটি সম্পর্কে মন্তব্য করুন।
আপনি যদি জেপিএ 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
সমস্ত উত্তর সঠিক। মেটা-ইনফের অনেকগুলি উদ্দেশ্য রয়েছে। এছাড়াও, টমক্যাট ধারক ব্যবহার সম্পর্কে একটি উদাহরণ এখানে।
টমকাট ডক এ যান এবং " স্ট্যান্ডার্ড ইমপ্লিমেন্টেশন> কপিএক্সএমএল " বৈশিষ্ট্য পরীক্ষা করুন।
বর্ণনা নীচে।
আপনি যদি অ্যাপ্লিকেশনটির ভিতরে থাকা কোনও হোস্টের এক্সএমএলবেসে অনুলিপি করতে অ্যাপ্লিকেশনটির ভিতরে এম্বেড করা কোনও প্রসঙ্গ XML বর্ণনাকারী (/META-INF/context.xML এ অবস্থিত) চান তবে সত্যতে সেট করুন। পরবর্তী শুরুতে, অনুলিপি করা প্রসঙ্গে এক্সএমএল বর্ণনাকারী অ্যাপ্লিকেশনের অভ্যন্তরে বর্ণিত বর্ণনাকারী আরও সাম্প্রতিক হওয়া সত্ত্বেও অ্যাপ্লিকেশনটিতে এম্বেড থাকা কোনও প্রসঙ্গে এক্সএমএল বর্ণনাকারীর পক্ষে অগ্রাধিকার হিসাবে ব্যবহৃত হবে। পতাকাটির মানটি মিথ্যাতে ডিফল্ট হয়। দ্রষ্টব্য যদি মালিকানাধীন হোস্টের ডিপ্লয়এক্সএমএল বৈশিষ্ট্যটি মিথ্যা হয় বা যদি মালিকানাধীন হোস্টের কপিএক্সএমএল বৈশিষ্ট্যটি সত্য হয় তবে এই বৈশিষ্ট্যের কোনও প্রভাব থাকবে না।
আপনার META-INF ফোল্ডারের ভিতরে আপনার MANIFEST.MF ফাইল রয়েছে। আপনি alচ্ছিক বা বাহ্যিক নির্ভরতা নির্ধারণ করতে পারেন যা আপনার অবশ্যই অ্যাক্সেস করতে হবে।
উদাহরণ:
বিবেচনা করুন যে আপনি নিজের অ্যাপটি স্থাপন করেছেন এবং আপনার ধারকটি (রান সময়ে) জানতে পেরেছেন যে আপনার অ্যাপ্লিকেশনটির জন্য একটি লাইব্রেরির একটি নতুন সংস্করণ প্রয়োজন যা লিব ফোল্ডারের ভিতরে নেই, সেই ক্ষেত্রে যদি আপনি alচ্ছিক নতুন সংস্করণটি সংজ্ঞায়িত করেন MANIFEST.MF
তবে আপনার অ্যাপ্লিকেশনটি উল্লেখ করবে সেখান থেকে নির্ভরতা (এবং ক্রাশ হবে না)
Source:
হেড ফার্স্ট জেএসপি এবং সার্লেট