javac

2010-10-31 17 views
39

के साथ आंतरिक सूर्य वर्गों का उपयोग करना javac 1.6.0_22 के प्रतिबंधों को अक्षम करने का कोई तरीका है जो मुझे sun.awt.event.* जैसे जेआरई आंतरिक कक्षाओं का उपयोग करने से रोकता है?javac

मैं नहीं की तलाश कर रहा हूँ:

  1. एक स्पष्टीकरण क्यों यह मना किया है।
  2. सुझाव विभिन्न वर्गों ECJ उपयोग करने के लिए प्रतिबिंब
  3. सुझाव उपयोग करने के लिए उपयोग करने के लिए
  4. सुझाव/ग्रहण

मैं सिर्फ अगर यह संभव है या नहीं जानना चाहता हूँ, और अगर यह तो कैसे है।

+0

क्या मैं एक प्रश्न पूछ सकता हूं? क्यूं कर? – JeremyP

+0

आपको वास्तव में क्या त्रुटियां मिल रही हैं? मैं 'sun.awt। *' के खिलाफ संकलित कर सकता हूं। Javac 1.6.0_22 (मैक पर हालांकि) के साथ ठीक है। – Thilo

+0

मैं स्विंग/एडब्ल्यूटी के साथ कुछ प्रयोग कर रहा हूं और उन्हें अपने आंतरिक उपयोग करना है। –

उत्तर

74

मुझे अपना जवाब मिल गया है।

जब जावाक कोड संकलित कर रहा है तो यह डिफ़ॉल्ट रूप से rt.jar के खिलाफ लिंक नहीं करता है। इसके बजाय यह क्लास स्टब्स के साथ विशेष प्रतीक फ़ाइल lib/ct.sym का उपयोग करता है।

आश्चर्यजनक रूप से इस फ़ाइल में कई आंतरिक सूर्य वर्ग नहीं हैं। मेरे मामले में उन अधिक-आंतरिक-सामान्य कक्षाओं में से एक sun.awt.event.IgnorePaintEvent था।

और मेरे सवाल का जवाब है: javac -XDignore.symbol.file

यही कारण है कि javac rt.jar संकलन के लिए उपयोग करता है।

+0

के तहत टोमकैट में तैनात मेरे वेब ऐप के लिए इसे लागू करने की ज़रूरत है, मुझे बिल्कुल वही समस्या थी, संकलन करने की कोशिश कर रहा था, लेकिन मुझे यह त्रुटि मिल रही थी 'sun.nio.fs' sun.nio.fs ' .BasicFileAttributesHolder' –

+0

मैवेन कंपाइलर प्लगइन के लिए अतिरिक्त वर्कअराउंड के लिए @ karmakaze उत्तर भी देखें। – karmakaze

+0

कमांड प्रॉम्प्ट के माध्यम से इसे कैसे जोड़ा जाए?मुझे लिनक्स –

0

आम तौर पर, यह केवल एक चेतावनी संदेश उत्पन्न करता है; जैसे

[javac] /media/disk/opensso2/opensso/products/federation/openfm/source/com/sun/identity/wss/xmlsig/WSSSignatureProvider.java:46: warning: com.sun.org.apache.xpath.internal.XPathAPI is Sun proprietary API and may be removed in a future release 
[javac] import com.sun.org.apache.xpath.internal.XPathAPI; 

शायद आपने जावा कंपाइलर को त्रुटियों के रूप में चेतावनियों का इलाज करने के लिए कहा है।

+2

या शायद आप त्रुटियों के लिए चेतावनी गलत कर रहे हैं। – EJP

+0

@EJP - अच्छा बिंदु। –

+0

कमांड प्रॉम्प्ट के माध्यम से इसे कैसे जोड़ा जाए? मुझे लिनक्स –

20

@ मार्सिन-wisnicki से जवाब देने के लिए इसके अलावा अगर आप Maven का उपयोग कर रहे, ध्यान दें कि संकलक प्लगइन चुपचाप किसी भी -XD झंडे छोड़ देंगे, जब तक आप भी <fork>true</fork> निर्दिष्ट करें: उदा

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <compilerArgs> 
        <arg>-XDignore.symbol.file</arg> 
       </compilerArgs> 
       <fork>true</fork> 
      </configuration> 
      ... 
+0

कमांड प्रॉम्प्ट के माध्यम से इसे कैसे जोड़ा जाए? मुझे लिनक्स –

+0

मैन के तहत टोमकैट में तैनात मेरे वेब ऐप के लिए इसे लागू करने की आवश्यकता है, आपने अपना दिन इस के साथ बचाया है! धन्यवाद :) – Anakin001

+0

@ Anakin001 इसे सुनकर खुशी हुई। ये अस्पष्ट हिट वे हैं जिन्हें मैं वास्तव में उपयोग करना पसंद करता हूं। – karmakaze

0

एक बेहतर समाधान है। सबसे पहले javac -XDenableSunApiLintControl पर विकल्प जोड़ें और फिर अपने कोड में @SupressWarnings("sunapi") का उपयोग करें।