জ্যাকএক্সবি এপিআইগুলি জাভা ইই এপিআই হিসাবে বিবেচিত হয় এবং তাই আর সে জাভা এসই ৯ এ ডিফল্ট শ্রেণিপথের মধ্যে নেই Java
জাভা 9 মডিউলগুলির ধারণাগুলি উপস্থাপন করে এবং ডিফল্টরূপে java.seসমষ্টিগত মডিউলটি ক্লাসপথে (বা পরিবর্তে, মডিউল-পাথ) উপলভ্য। নামটি থেকে বোঝা যায়, java.seসামগ্রিক মডিউলটিতে জাভা EE API গুলি অন্তর্ভুক্ত নয় যা Javaতিহ্যগতভাবে জাভা 6/7/8 এর সাথে বান্ডিল করা হয়েছে।
ভাগ্যক্রমে, JDK 6/7/8 এ সরবরাহ করা এই জাভা EE API গুলি এখনও জেডিকে রয়েছে, তবে সেগুলি ডিফল্টরূপে ক্লাসপথে নেই। অতিরিক্ত জাভা EE API গুলি নিম্নলিখিত মডিউলগুলিতে সরবরাহ করা হয়েছে:
java.activation
java.corba
java.transaction
java.xml.bind << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation
দ্রুত এবং নোংরা সমাধান: (জেডি কে 9-10 কেবল)
রানটাইমের সময় জ্যাকএক্সবি এপিআইগুলি উপলব্ধ করতে, নিম্নলিখিত কমান্ড-লাইন বিকল্পটি উল্লেখ করুন:
--add-modules java.xml.bind
তবে জাভা 8 এর সাথে কাজ করার জন্য আমার এখনও এটি দরকার !!!
আপনি যদি --add-modulesকোনও পুরনো জেডিকে দিয়ে নির্দিষ্ট করার চেষ্টা করেন তবে এটি ফুরিয়ে যাবে কারণ এটি একটি অপরিজ্ঞাত বিকল্প। আমি দুটি বিকল্পের মধ্যে একটির পরামর্শ দিচ্ছি:
- আপনি
JDK_JAVA_OPTIONSপরিবেশের পরিবর্তনশীল ব্যবহার করে যে কোনও জাভা 9+ বিকল্পগুলি সেট করতে পারেন । এই পরিবেশের পরিবর্তনশীলটি স্বয়ংক্রিয়ভাবেjava জাভা 9+ এর জন্য লঞ্চারটি দ্বারা পঠিত হয় ।
- আপনি
-XX:+IgnoreUnrecognizedVMOptionsজেভিএমকে ফুটিয়ে তোলার পরিবর্তে অজানা বিকল্পগুলি চুপচাপ উপেক্ষা করার জন্য এটি যুক্ত করতে পারেন । তবে সাবধান! আপনি যে কোনও কমান্ড-লাইন যুক্তি ব্যবহার করেন সেগুলি আর আপনার জন্য JVM দ্বারা বৈধ হবে না। এই বিকল্পটি ওরাকল / ওপেনজেডিকে পাশাপাশি আইবিএম জেডিকে (জেডিকে 8 এসআর 4 হিসাবে) নিয়ে কাজ করে।
বিকল্প তাত্ক্ষণিক সমাধান: (JDK 9-10 কেবল)
দ্রষ্টব্য যে আপনি --add-modules java.se.eeবিকল্পটি নির্দিষ্ট করে উপরের জাভা EE মডিউলগুলি রান সময়ে উপলব্ধ করতে পারবেন। java.se.eeমডিউল একটি সমষ্টিগত মডিউল যে রয়েছে java.se.eeসেইসাথে উপরে জাভা EE এপিআই মডিউল। দ্রষ্টব্য, এটি জাভা 11 এ কাজ করে না কারণ জাভা 11-java.se.ee এ সরানো হয়েছিল।
সঠিক দীর্ঘমেয়াদী সমাধান: (জেডিকে 9 এবং এর বাইরে)
জাভা EE এপিআই উপরে তালিকাভুক্ত মডিউল সব চিহ্নিত করা হয়েছে @Deprecated(forRemoval=true)কারণ তারা অপসারণের জন্য নির্ধারিত মধ্যে জাভা 11 । সুতরাং --add-moduleঅ্যাপ্লিকেশনটি আর জাভা ১১--র-বাক্সে কাজ করবে না।
আপনার জাভা ১১-এ এবং ফরোয়ার্ডে যা করতে হবে তা হ'ল শ্রেণিপথ বা মডিউল পথের জাভা ইই এপিআইয়ের নিজস্ব অনুলিপি। উদাহরণস্বরূপ, আপনি জ্যাকস-বি এপিআইগুলিকে ম্যাভেন নির্ভরতা হিসাবে এটি যুক্ত করতে পারেন:
<!-- API, java.xml.bind module -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<!-- Runtime, com.sun.xml.bind module -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
দেখুন JAXB রেফারেন্স বাস্তবায়ন পৃষ্ঠা JAXB আরও বিশদের জন্য।
জাভা মডুলারিটির সম্পূর্ণ বিবরণের জন্য JEP 261 দেখুন: মডিউল সিস্টেম
গ্রেডল বা অ্যান্ড্রয়েড স্টুডিও বিকাশকারীদের জন্য: (জেডিকে 9 এবং এর বাইরে)
আপনার build.gradleফাইলে নিম্নলিখিত নির্ভরতা যুক্ত করুন:
dependencies {
// JAX-B dependencies for JDK 9+
implementation "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
implementation "org.glassfish.jaxb:jaxb-runtime:2.3.2"
}