জ্যাকএক্সবি এপিআইগুলি জাভা ইই এপিআই হিসাবে বিবেচিত হয় এবং তাই আর সে জাভা এসই ৯ এ ডিফল্ট শ্রেণিপথের মধ্যে নেই 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"
}