आवश्यक पुस्तकालय rt.jar पर प्रतिबंध के कारण कक्षा में प्रवेश प्रतिबंध?


824

मैं जावा 1.4 कोड को संकलित करने का प्रयास कर रहा हूं जो आईबीएम के WSDL2Java द्वारा जावा 5 पर स्टब्स को फिर से बनाए बिना बनाया गया था और इस त्रुटि को एक्लिप्स में देखा था ।
मैं इस धारणा के तहत हूं कि उत्पन्न स्टब्स को केवल तब तक संकलित करना चाहिए जब तक कि रनटाइम jarsउपलब्ध नहीं हो (वे हैं)।

Access restriction: The type QName is not accessible due to restriction on required library C:\Program Files\Java\jdk1.5.0_16\jre\lib\rt.jar

पूरी क्लास का नाम है javax.xml.namespace.QName

यहाँ वास्तव में क्या हो रहा है? क्या यह ऐसा मामला है जहां मैं सॉसेज से सुअर को दूर करने की कोशिश कर रहा हूं? क्या मैं स्टब्स को फिर से बनाना बेहतर हूं?


1
मुझे यह नहीं मिलता है, तो आप इसे कहीं और क्यों नहीं संकलित करते हैं और इसे आप में लक्षित करते हैं (इसलिए मुझे लगता है) 1.4 वातावरण?
टिम बुथ

अंतिम लक्ष्य पर्यावरण jdk5 पर jboss4.2 है।
साल

2
"संरक्षित" स्थिति के बारे में: स्टैकओवरफ़्लो में कुछ भी नहीं "थैंक्स" या "मुझे भी" एक उत्थान के रूप में कहते हैं;)
ऑस्कररेज़

6
बड़े मोस्ट-वोटेड-उत्तर देखें ... इस पृष्ठ के बाकी हिस्सों के 96% पर ध्यान न दें। खोजें: "Nels बैकमैन", 1 फ़रवरी '10 04:09 पर
होगा

1
मेरे लिए जो काम किया गया था, वह एग्जिक्यूटिव एनवायरनमेंट (या वर्कस्पेस डिफॉल्ट) से जेआरई सिस्टम लाइब्रेरी को वैकल्पिक जेआरई (मैंने उसी जावा संस्करण का चयन किया ) को बदलने / बदलने के लिए था । आपको आदेश और निर्यात टैब में (1) सही क्रम सुनिश्चित करना होगा , (2) जावा कंपाइलर सेटिंग्स (चयनित जावा संस्करण के समान ) में सही अनुपालन स्तर ।
ADTC

जवाबों:


1884

एक और उपाय है जो काम भी करता है।

  1. प्रोजेक्ट प्रॉपर्टीज में बिल्ड पाथ सेटिंग्स पर जाएं ।
  2. JRE सिस्टम लाइब्रेरी निकालें
  3. इसे वापस जोड़ें; का चयन करें "पुस्तकालय जोड़ें" और चयन JRE सिस्टम लाइब्रेरी । डिफ़ॉल्ट ने मेरे लिए काम किया।

यह काम करता है क्योंकि आपके पास विभिन्न जार फ़ाइलों में कई कक्षाएं हैं। जेआरई लीब को हटाने और फिर से जोड़ने से सही कक्षाएं पहले हो जाएंगी। यदि आप एक मौलिक समाधान चाहते हैं, तो सुनिश्चित करें कि आप समान कक्षाओं के साथ जार फ़ाइलों को बाहर करते हैं।

मेरे लिए मेरे पास है: javax.xml.soap.SOAPPartतीन अलग-अलग जार में: axis-saaj-1.4.jar, saaj-api-1.3.jarऔरrt.jar


1
क्या यह एक ग्रहण बग है या हम गलती से काम कर रहे हैं (प्रतिबंध की शर्तों का उल्लंघन कर रहे हैं)? यदि यह एक ग्रहण बग है, तो क्या कोई बग दर्ज किया गया है?
docwhat

@Doctor मैंने कभी भी किसी भी कोड के लिए इसका इस्तेमाल नहीं किया, जो विशेष रूप से महत्वपूर्ण था, इसलिए मैंने किसी भी तरह की जांच नहीं की ... अगर आपको कुछ भी पता है तो कृपया हमें बताएं।
नेल्स बेकमैन

3
@ URL87 यदि आप प्रोजेक्ट फ़ोल्डर पर राइट क्लिक करते हैं, तो "बिल्ड पाथ ...", "कॉन्फिगर बिल्ड पाथ", "लाइब्रेरी" (टैब) पर जाएं, आपको दाईं ओर एक बटन के रूप में "लाइब्रेरी जोड़ें" देखना चाहिए। । इसने मेरे लिए एक आकर्षण के रूप में अच्छी तरह से काम किया, उत्कृष्ट उत्तर
अलेक्सई ब्लू

8
ग्रहण के हाल के संस्करणों के तहत बेहतर समाधान जेआरई सिस्टम लाइब्रेरी को हटाना नहीं है, बल्कि "ऑर्डर एंड एक्सपोर्ट" टैब पर जाएं और जेआरई सिस्टम लाइब्रेरी को नीचे की ओर ले जाएं (जो प्रभावी रूप से इसे हटाने और जोड़ने का काम करता है, लेकिन आप नहीं करते हैं 'हटाने और इसे करने के लिए जोड़ने की आवश्यकता नहीं है)।
user1676075

1
यह 2018 है और ग्रहण संस्करण 5.0 है। यह बग / समस्या अभी भी मौजूद है। बहुत बहुत धन्यवाद @NelsBeckman। आपके उत्तर ने मुझे 3/4 दशक के बाद मदद की है क्योंकि यह पोस्ट किया गया था।
अरावमुधन

120

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html ने मेरे लिए सबसे अच्छा काम किया।

विंडोज पर: विंडोज -> प्राथमिकताएं -> जावा -> संकलक -> त्रुटियां / चेतावनियां -> पदावनत और प्रतिबंधित एपीआई -> निषिद्ध संदर्भ (पहुंच नियम): -> चेतावनी में परिवर्तन

Mac OS X / Linux पर: ग्रहण -> वरीयताएँ -> जावा -> संकलक -> त्रुटियां / चेतावनी -> पदावनत और प्रतिबंधित एपीआई -> निषिद्ध संदर्भ (पहुँच नियम): -> चेतावनी में परिवर्तन


62
यह काम कर सकता है, लेकिन यह एक उचित समाधान नहीं है। आपको यह समझने की आवश्यकता है कि एक्सेस प्रतिबंध पहले स्थान पर क्यों था। यह भविष्य के सभी मामलों को भी छिपाएगा, जो अधिक महत्वपूर्ण हो सकता है!
एड्रियन माउट

1
@ AdrianMouat जो बहुत अधिक अप्रासंगिक है। अगर मैं चाहता हूं कि वह चली जाए, तो मैं चाहता हूं कि वह चली जाए। लेकिन निश्चित रूप से - एक गैर-सार्वजनिक एपीआई के खिलाफ कोड नहीं करेगा, नहीं।
स्टॉल्सविक

3
@stolsvik - तुमने मुझे खो दिया है; क्या आप कारण बता रहे हैं कि समस्या क्यों मौजूद है?
एड्रियन मौट

1
मैं एक विधि पर इस समस्या है। मैं एक वैकल्पिक JDK के उपयोग की कल्पना करता हूं (जैसे OpenJDK एक बेहतर विकल्प है)। एक बार कहा गया है कि यह एक बार 'शांत हो सकता है'। उत्पादन कोड में नहीं। डिजाइन के प्रयास के लिए नहीं। मैं आपको नहीं बता सकता कि इस तरह के cr-hack पर कितने मानव-दिन खो जाते हैं।
होगा

5
@ AdrianMouat - समझ में आता है। मैं एक परमाणु रिएक्टर में ऐसा कुछ करने से नफरत करता हूं - नियंत्रण कक्ष में बहुत अधिक गर्मी? इसलिए, सभी चेतावनियों को अक्षम करें। अगले दिन बड़ी सुर्खियां बटोरें। : पी
दाविद ब्लेन

67

मैं उसी समस्या से मिला। मुझे वेबसाइट में इसका जवाब मिला: http://www.17ext.com
सबसे पहले, JRE सिस्टम लाइब्रेरी को हटाएं। फिर, JRE सिस्टम लाइब्रेरी को फिर से आयात करें।

मुझे पता नहीं क्यों। जब भी इसने मेरी समस्या को ठीक किया, आशा है कि यह आपकी मदद कर सकता है।


10
हुह, जाहिरा तौर पर आपने इस सवाल का उसी तरह जवाब दिया जैसा मैंने किया था, कई महीने पहले। यकीन नहीं होता कि मैंने आपका जवाब वापस क्यों नहीं देखा ...
नेल्स बेकमैन

34

मेरा अनुमान है कि आप एक मानक वर्ग को बदलने की कोशिश कर रहे हैं जो आपके पास एक पुस्तकालय में जावा 5 के साथ जहाज है।

यह लाइसेंस समझौते की शर्तों के तहत अनुमति नहीं है, हालांकि AFAIK इसे जावा 5 तक लागू नहीं किया गया था।

मैंने इसे QName से पहले देखा है और मैंने इसे उस जार से कक्षा को हटाकर "निर्धारित" किया है।

EDIT http://www.manpagez.com/man/1/java/ विकल्प के लिए नोट्स "-Xbootclasspath:"

"अनुप्रयोग जो rt.jar में एक वर्ग को ओवरराइड करने के उद्देश्य से इस विकल्प का उपयोग करते हैं, उन्हें ऐसा करने के लिए तैनात नहीं किया जाना चाहिए क्योंकि ऐसा करने से जावा 2 रनटाइम एनवायरनमेंट बाइनरी कोड लाइसेंस का उल्लंघन होगा।"

http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE

"जावा प्रौद्योगिकी प्रतिबंध। आप जेपीआई पैकेज के भीतर अतिरिक्त कक्षाओं का निर्माण करके या" जावा "पैकेज या" जावा "पैकेज के किसी भी उप-पैकेज के रूप में पहचाने जाने वाले जावा प्लेटफ़ॉर्म इंटरफ़ेस (" जेपीआई ") को संशोधित नहीं कर सकते हैं, अन्यथा JPI में कक्षाओं के लिए या संशोधन के अलावा। इस घटना में कि आप एक अतिरिक्त वर्ग और संबद्ध API (s) बनाते हैं, जो (i) जावा प्लेटफ़ॉर्म की कार्यक्षमता को बढ़ाता है, और (ii) तीसरे पक्ष के सॉफ़्टवेयर डेवलपर्स के लिए सामने आता है। अतिरिक्त सॉफ़्टवेयर विकसित करने का उद्देश्य जो इस तरह के अतिरिक्त एपीआई का आह्वान करता है, आपको तुरंत सभी डेवलपर्स द्वारा मुफ्त में ऐसी एपीआई के लिए व्यापक रूप से सटीक विनिर्देश प्रकाशित करना होगा। आप अतिरिक्त लाइसेंस, अतिरिक्त इंटरफेस, बनाने के लिए अपने लाइसेंस बनाने या अधिकृत नहीं कर सकते हैं।या उप-पैकेज जो किसी भी तरह से "जावा", "जेवैक्स", "सन" या किसी भी नामकरण कन्वेंशन पदनाम में सूर्य द्वारा निर्दिष्ट के समान सम्मेलन के रूप में पहचाने जाते हैं। "


2
बस। मार्ग के एक जार में QName वर्ग था। खोजो। -name "* .jar" -print -exec unzip -t {} \; | grep "QName" ने इसे पाया।
साल

1
क्या आप उन वर्गों को प्रतिस्थापित करने की अनुमति नहीं देने के बारे में एक संदर्भ प्रदान कर सकते हैं जो जावा के साथ जहाज करते हैं? मुझे लाइसेंस समझौते में पाया गया कि सभी जावा को वितरित करने से संबंधित प्रतिबंध थे, जावा प्रोग्राम नहीं, लेकिन मैं बहुत लंबे समय तक नहीं देखा था।
एड्रियन माउट

25

मुझे यह त्रुटि भी मिल रही है, लेकिन मेरा प्रोजेक्ट कमांड लाइन पर मावेन और टाइको कंपाइलर (यह ओएसजीआई प्लगइन्स का एक सेट है) का उपयोग करके बनाया गया है । समान समस्या वाले लोगों के माध्यम से स्थानांतरित करने के बाद, लेकिन कमांड लाइन के बजाय एक्लिप्स में इसे ठीक करने के बाद, मुझे Tycho डेवलपर मंच पर एक संदेश मिला जिसने मेरे प्रश्न का उत्तर दिया, कॉन्फ़िगरेशन का उपयोग pom.xmlकरते हुए एक्सेस प्रतिबंध के बारे में कंपाइलर चेतावनी को अनदेखा करना:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-compiler-plugin</artifactId>
    <version>${tycho.version}</version>
    <configuration>
        <compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
    </configuration>
</plugin>

अधिक जानकारी Tycho FAQ में प्राप्त की जा सकती है । यह मुझे काम करने के लिए AGES ले गया, इसलिए मुझे लगा कि मैं इस उत्तर को पोस्ट करके कमांड लाइन से इन एक्सेस प्रतिबंध त्रुटियों को ठीक करने की कोशिश कर रहा हूं।


13
  • प्रोजेक्ट प्रॉपर्टीज में बिल्ड पाथ सेटिंग्स पर जाएं। Windows -> Preferences -> Java Compiler
  • JRE सिस्टम लाइब्रेरी निकालें
  • एक "सही मैच" के साथ एक और JRE जोड़ें
  • अपनी परियोजना को फिर से साफ करें और उसका निर्माण करें। इसने मेरे लिए काम किया।

13

मुझे भी बस यही समस्या थी। जाहिरा तौर पर मैंने अपने निर्माण पथ में 1.6 के बजाय JRE को 1.5 पर सेट किया था।


1
एक ही मुद्दा यहाँ। मेरे मामले में, मावेन का उपयोग करते हुए जो अनिर्दिष्ट होने पर 1.5 तक डिफॉल्ट करता है।
ग्रेग हस्किन

इसे अपने POM में रखना याद रखें ताकि अपडेट होने पर यह वापस न बदले। <गुण> <maven.compiler.source> 1.8 </maven.compiler.source> <maven.compiler.target> 1.8 </maven.compiler.target> </ गुण>
फिलिप रेगो

8

नेल्स बेकमैन के समाधान के अलावा , मेरे पास निम्नलिखित टिप्स हैं:

बिल्ड कॉन्फ़िगर पथ के तहत , मुझे ऑर्डर और निर्यात के तहत अपनी प्रविष्टियों के क्रम को पुनर्व्यवस्थित करना पड़ा ।

इसके अतिरिक्त, एक ग्रहण पीडीई डेवलपर के रूप में, मुझे अपने पर निर्भरता के क्रम को पुनर्व्यवस्थित करने की आवश्यकता थी MANIFEST.MF, सूची में पहले की तरह समस्याग्रस्त पैकेज को जोड़ना।

रनिंग प्रोजेक्ट> क्लीन इन बीच के साथ, इन डायल के साथ खेलना , मैं इन चेतावनियों को हल करने में सक्षम था।


8

मेरे लिए यह कैसे मैं इसे हल:

  • वर्तमान परियोजना के निर्माण पथ पर जाएं

पुस्तकालयों के तहत

  • " JRE सिस्टम लाइब्रेरी [jdk1.8xxx]" चुनें
  • संपादित करें पर क्लिक करें
  • और "कार्यक्षेत्र डिफ़ॉल्ट JRE (jdk1.8xx)" या वैकल्पिक JRE का चयन करें
  • फिनिश पर क्लिक करें
  • ओके पर क्लिक करें

यहां छवि विवरण दर्ज करें

नोट: यह सुनिश्चित कर लें कि ग्रहण / वरीयताएँ (परियोजना नहीं) / जावा / स्थापित JRE, कि JDK JDK फ़ोल्डर को इंगित करता है न कि JRE C: \ Program Files \ Java \ jdk1.8.0-74

यहां छवि विवरण दर्ज करें


मेरा पहले से ही 1.7 ... 79 पर सेट था, इसलिए मैं घबरा रहा था। लेकिन मैंने बस इसे फिर से चुना, लागू करें पर क्लिक किया और त्रुटि दूर हो गई। वाह।
मार्वो

वाह। इससे यहां भी मदद मिली - एक "निष्पादन पर्यावरण" से एक "वैकल्पिक JRE" में बदल रहा है। अगर किसी के पास इसके लिए कोई तार्किक व्याख्या है .. (यहां प्रोजेक्ट-नल जावा को 1.5 (5.0 से। इनसेट्स कॉन्फिग फ़ाइल में) को 1.8 में बदलने के बाद हुआ। मदद: अभी भी त्रुटियाँ। इसके बारे में पुराने सूरज वर्गों हम पैकेज com.sun.image.codec से उपयोग करते हैं।))
hyphan

6

पुराना POST अपडेट करने के लिए क्षमा करें। मुझे रिपोर्ट की गई समस्या मिली और मैंने इसे नीचे दिए अनुसार हल किया।

मान लें कि आप ग्रहण + एम 2 मावेन प्लगइन का उपयोग कर रहे हैं, अगर आपको यह एक्सेस प्रतिबंध त्रुटि मिलती है, तो प्रोजेक्ट / मॉड्यूल पर राइट क्लिक करें जिसमें आपको त्रुटि है -> गुण -> बिल्ड पथ -> लाइब्रेरी -> बदलें JDK / JRE जो कि ग्रहण कार्यक्षेत्र में उपयोग किया जाता है।

मैंने उपरोक्त चरणों का पालन किया और समस्या हल हो गई।


पर्याप्त रूप से उचित है, लेकिन आपने मूल रूप से नेल्स बेकमैन द्वारा स्वीकार किए गए उत्तर के शब्दों को दोहराया है।
स्टीवन वोल्फ

5

मामले में आप सुनिश्चित हैं कि आपको दी गई कक्षा तक पहुंचने में सक्षम होना चाहिए, इसका मतलब यह हो सकता है कि आपने अपनी परियोजना में कई जार जोड़े हैं जिनमें समान नाम (या पथ) के साथ कक्षाएं हैं, लेकिन विभिन्न सामग्री और वे एक-दूसरे की देखरेख कर रहे हैं (आमतौर पर एक पुराना रिवाज बिल्ड जार में थर्ड पार्टी लाइब्रेरी का पुराना वर्जन होता है)।

उदाहरण के लिए जब आप जार को लागू करते हैं:

a.b.c.d1
a.b.c.d2

लेकिन केवल लागू करने वाला एक पुराना संस्करण:

a.b.c.d1
(d2 is missing altogether or has restricted access)

कोड संपादक में सब कुछ ठीक काम करता है, लेकिन संकलन के दौरान विफल हो जाता है अगर "पुरानी" लाइब्रेरी नए को ओवरशेड करती है - डी 2 अचानक "लापता या दुर्गम" हो जाता है, तब भी।

समाधान संकलन-समय पुस्तकालयों के आदेश की जांच करने के लिए है और सुनिश्चित करें कि सही कार्यान्वयन वाला व्यक्ति पहले चला जाता है।


4

प्रोजेक्ट गुणों में जावा बिल्ड पथ पर जाएं। मौजूदा जेआरई सिस्टम लाइब्रेरी को हटा दें और फिर इसे जोड़ें अर्थात लाइब्रेरी जोड़ें -> जेआरई लिब - चयन करें jre ---> समाप्त करें। अंतिम रूप से ऑर्डर और एक्सपोर्ट टैब चुनें JRE Lib का चयन करें और शीर्ष पर जाएं। बस।


3

बस अपनी परियोजना के निर्माण के पुस्तकालयों के क्रम को बदल दें। प्रोजेक्ट पर राइट क्लिक करें> बिल्ड पाथ> बिल्ड पाथ को कॉन्फ़िगर करें> ऑर्डर और एक्सपोर्ट (टैब) चुनें> एंट्रीज के ऑर्डर को बदलें। मुझे आशा है कि "JRE सिस्टम लाइब्रेरी" को नीचे ले जाना काम करेगा। इसने मेरे लिए इतना काम किया। आसान और सरल .... !!!


3

मेरे मामले में निर्माण पथ JRE के बीच एक बेमेल था और निष्पादन पर्यावरण पर JRE स्थापित किया। मैं प्रोजेक्ट> गुण> जावा कंपाइलर में चला गया। नीचे एक चेतावनी संदेश था।

मैंने 'इंस्टॉल किए गए जेआरई', 'एक्ज़ीक्यूशन एनवायरनमेंट', 'जावा बिल्ड पाथ' लिंक पर क्लिक किया और जेडीके संस्करण को 1.7 में बदल दिया और चेतावनी गायब हो गई।


0

बिल्ड पथ के माध्यम से एक सही JRE सिस्टम जोड़ना समाधान है लेकिन आपके ग्रहण में अभी भी त्रुटि हो सकती है। हल करने के लिए जावा बिल्ड पथ पर जाएँ -> ऑर्डर करें और निर्यात करें और शीर्ष पर अपनी JRE सिस्टम लाइब्रेरी को स्थानांतरित करें। इससे मेरी समस्या हल हो गई है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.