JAXB एपीआई को जावा ईई एपीआई माना जाता है और इसलिए अब जावा एसई 9 में डिफ़ॉल्ट क्लासपाथ पर निहित नहीं हैं। जावा 11 में, उन्हें पूरी तरह से जेडीके से हटा दिया जाता है।
जावा 9 मॉड्यूल की अवधारणाओं का परिचय देता है, और डिफ़ॉल्ट रूप से, java.se
समग्र मॉड्यूल क्लासपैथ (या बल्कि, मॉड्यूल-पथ) पर उपलब्ध है। जैसा कि नाम से पता चलता है, java.se
कुल मॉड्यूल में जावा ईई एपीआई शामिल नहीं है जो परंपरागत रूप से जावा 6/7/8 के साथ बंडल किया गया है।
सौभाग्य से, ये Java EE API जो JDK 6/7/8 में प्रदान किए गए थे, अभी भी JDK में हैं, लेकिन वे अभी डिफ़ॉल्ट रूप से क्लासपाथ पर नहीं हैं। अतिरिक्त जावा ईई एपीआई निम्नलिखित मॉड्यूल में प्रदान किए जाते हैं:
java.activation
java.corba
java.transaction
java.xml.bind << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation
त्वरित और गंदा समाधान: (केवल JDK 9/10)
JAXB API को रनटाइम पर उपलब्ध कराने के लिए, निम्न कमांड-लाइन विकल्प निर्दिष्ट करें:
--add-modules java.xml.bind
लेकिन मुझे अभी भी जावा 8 के साथ काम करने की आवश्यकता है !!!
यदि आप --add-modules
एक पुराने JDK के साथ निर्दिष्ट करने का प्रयास करते हैं , तो यह उड़ जाएगा क्योंकि यह एक अपरिचित विकल्प है। मैं दो विकल्पों में से एक का सुझाव देता हूं:
- आप
JDK_JAVA_OPTIONS
पर्यावरण चर का उपयोग करके कोई भी जावा 9+ केवल विकल्प सेट कर सकते हैं । यह वातावरण चर जावा 9+ के लिए लॉन्चर द्वारा स्वचालित रूप से पढ़ा जाता है java
।
- आप
-XX:+IgnoreUnrecognizedVMOptions
जेवीएम को चुपचाप उड़ाने के बजाय गैर-मान्यता प्राप्त विकल्पों को अनदेखा करने के लिए जोड़ सकते हैं । मगर सावधान! आपके द्वारा उपयोग की जाने वाली कोई भी अन्य कमांड-लाइन तर्क JVM द्वारा आपके लिए मान्य नहीं होगी। यह विकल्प Oracle / OpenJDK के साथ-साथ IBM JDK (JDK 8sr4 के रूप में) के साथ काम करता है।
वैकल्पिक त्वरित समाधान: (केवल JDK 9/10)
ध्यान दें कि आप --add-modules java.se.ee
विकल्प निर्दिष्ट करके रन टाइम पर उपरोक्त सभी जावा ईई मॉड्यूल उपलब्ध करा सकते हैं । java.se.ee
मॉड्यूल एक समग्र मॉड्यूल शामिल है java.se.ee
और साथ ही ऊपर जावा ईई एपीआई मॉड्यूल। ध्यान दें, यह जावा 11 पर काम नहीं करता है क्योंकि जावा 11java.se.ee
में हटा दिया गया था।
उचित दीर्घकालिक समाधान: (JDK 9 और उससे आगे)
ऊपर सूचीबद्ध जावा ईई एपीआई मॉड्यूल सभी चिह्नित हैं @Deprecated(forRemoval=true)
क्योंकि वे जावा 11 में हटाने के लिए निर्धारित हैं । इसलिए अब दृष्टिकोण जावा 11 के आउट-ऑफ-द-बॉक्स में काम नहीं करेगा।--add-module
आपको जावा 11 में क्या करने की आवश्यकता है और आगे वर्गपथ या मॉड्यूल पथ पर जावा ईई एपीआई की अपनी प्रति शामिल है। उदाहरण के लिए, आप JAX-B API को इस तरह मावेन निर्भरता के रूप में जोड़ सकते हैं:
<!-- 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: मॉड्यूल सिस्टम देखें
ग्रेडेल या Android स्टूडियो डेवलपर के लिए: (JDK 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"
}