2012-03-08 19 views
10

मैं इस तरह मेरी चींटी स्क्रिप्ट से javac फोन:पैदा संकलक सूर्य मालिकाना एपीआई चेतावनी से चींटी को रोक नहीं सकते हैं

<javac srcdir="src" 
    destdir="build/classes" source="1.6" 
    target="1.6" debug="true" encoding="Cp1252" 
    nowarn="true"> 

लेकिन यह अभी भी उत्पादन में संकलक चेतावनी फेंकता है:

[javac] Compiling 73 source files to C:\IKOfficeRoot\Java\ERP\Framework\build\classes 

[javac] C:\IKOfficeRoot\Java\ERP\Framework\src\de\ikoffice\util\LoggerFactory.java:49: warning: sun.reflect.Reflection is Sun proprietary API and may be removed in a future release 
[javac]   return Logger.getLogger(Reflection.getCallerClass(2)); 
[javac]        ^
[javac] Note: C:\IKOfficeRoot\Java\ERP\Framework\src\de\ikoffice\db\SingleShotResultSet.java uses or overrides a deprecated API. 
[javac] Note: Recompile with -Xlint:deprecation for details. 
[javac] Note: Some input files use unchecked or unsafe operations. 
[javac] Note: Recompile with -Xlint:unchecked for details. 
[javac] 1 warning 

मैं भी करने की कोशिश की

<compilerarg line="-Xlint:-unchecked -Xlint:-deprecation"/> 

और

<compilerarg value="-Xlint:none"/> 

लेकिन इसका कोई प्रभाव नहीं पड़ता है। मैं चेतावनियों को कैसे हटा सकता हूं?

+1

संभव डुप्लिकेट http इसे सक्षम करने के लिए है : //stackoverflow.com/questions/1554538/how-can-i-suppress-javac-warnings-about-deprecated-api) – stacker

+2

कोई डिप्लीकेट नहीं है! मुझे पहले से ही पता है कि बहिष्करण चेतावनियों से कैसे छुटकारा पाना है। मुझे अब असुरक्षित-एपीआई चेतावनियों से छुटकारा पाना होगा! – Daniel

+0

[प्रतिकृति जावैक चेतावनी "का संभावित डुप्लिकेट ... आंतरिक मालिकाना एपीआई है और भविष्य में रिलीज में हटाया जा सकता है"] (http://stackoverflow.com/questions/13855700/suppress-javac-warning-is-internal-proprietary -api और हो सकता होने वाली हटाया में वायुसेना)। यह पहले है, लेकिन मैं उस व्यक्ति से चिपकना चाहता हूं जो एंटी का जिक्र नहीं करता है: क्या मायने रखता है javac –

उत्तर

13

-XDignore.symbol.file विकल्प javac कमांड लाइन के लिए मेरे लिए काम किया।

1

आप नहीं कर सकते: कमांड लाइन से न तो, आप इसे एंटी से भी नहीं कर सकते हैं।

javac प्रलेखन कहते हैं:

-Xlint: कोई नहीं

अक्षम सभी चेतावनियों जावा भाषा विशिष्टता द्वारा अनिवार्य नहीं।

तो ऐसा लगता है कि इस तरह की चेतावनी दबाया नहीं जा सकता है, क्योंकि वे सीधे जेएलएस द्वारा उठाए जाते हैं।

आप क्या कर सकते करने के लिए है: आवश्यक पदों पर

  1. उपयोग @SuppressWarnings({"deprecation"}, {"unchecked"})
  2. कुछ तरीके का उपयोग /dev/null
  3. को चेतावनी संदेश रीडायरेक्ट करने के लिए -Xlint:-unchecked -Xlint:-deprecation तर्क के साथ कमांड लाइन से संकलन की कोशिश, शायद यह केवल एक चींटी से संबंधित मुद्दा है।
+1

-Xlint: -चेचेक का मेरे लिए कोई प्रभाव नहीं पड़ता है। ऐसा लगता है कि प्रलेखन के बावजूद कमांड लाइन से चेतावनियों को कम करने का कोई तरीका नहीं है। (-Xmaxwarns 0 का कोई प्रभाव नहीं है) – Antimony

2

अनुशंसा: अपने कंपाइलर की चेतावनियों को अनदेखा न करें। एक कारण के लिए चेतावनी हैं। मेरी कंपनी की विरासत कोडेबेस एक "चेतावनियों के रूप में त्रुटियों के रूप में व्यवहार करें और निर्माण में असफल" की तरफ बढ़ रहा है क्योंकि हम अपने संकलन चक्र के दौरान उत्पादित चेतावनियों को ठीक करने के प्रयास को खर्च कर सकते हैं।

आपके मामले में, चेतावनी है:

warning: sun.reflect.Reflection is Sun proprietary API and may be removed in a future release 

यह हमेशा किया गया है एक चेतावनी के रूप में लंबे समय के रूप में मैं याद कर सकते हैं sun संकुल से आयात नहीं है, क्योंकि वे एक गैर सरकारी एपीआई कर रहे हैं। आधिकारिक ओरेकल जावा साइट पर इसके बारे में FAQ भी है।

आपने अपना वास्तविक कोड पोस्ट नहीं किया है, इसलिए आगे की सिफारिशें प्रदान करना मुश्किल है ... sun.reflect.Reflection में आप क्या उपयोग कर रहे हैं कि आप java.lang.reflect में कुछ भी नहीं कर सकते?

+0

क्योंकि हमारे पास "क्रैश सर्वर" नामक एक बटन है। यह स्थान 0 पर स्मृति को संशोधित करने के लिए असुरक्षित वर्ग का उपयोग करता है जो JVM क्रैश की ओर जाता है। यह अच्छी उपयोगिता हमें जेवीएम क्रैश रिकवरी कोड का परीक्षण करने में मदद करती है। इसके अलावा, यह इस तरह से stacktraces की तेजी से जांच कर रहा है। – Daniel

0

बहिष्करण चेतावनियों को रोकने के लिए मैंने जेडीके 6 और जेडीके 7 का उपयोग करके इसे करने की कोशिश की।

JDK 7 के साथ, @Deprecated एनोटेशन काम

JDK 6 के साथ करता है, यह काम नहीं करता, न तो -Xlint:-deprecation परम जोड़ने मेरे लिए काम करता है।

/** 
    * @deprecated 
    */ 
    @Override 
    public void removeValue(String arg0) { 
    // TODO Auto-generated method stub 
    } 
1

उपयोग nowarn नीचे

जैसे देखना विशेषता: एक ही रास्ता मैं चेतावनी को निकालने में कामयाब रहे @deprecatedJavadoc Tag उपयोग कर रहा था

<javac srcdir="src" 
    destdir="build/classes" source="1.6" 
    target="1.6" debug="true" encoding="Cp1252" 
    nowarn="on"> 

डिफ़ॉल्ट nowarn विशेषता के आधार पर बंद

3

यह करने के लिए सबसे अच्छा तरीका है sunapi दमन उपयोग करने के लिए है, अर्थात पूरे संकलन के लिए या तो -Xlint:-sunapi, या @SuppressWarnings("sunapi") अपने आवश्यक गुंजाइश पर है।

ध्यान दें, हालांकि इस दमन का उपयोग करने के लिए एक ही रास्ता है, पहले संकलक विकल्प के साथ -XDenableSunApiLintControl

enableSunApiLintControl

की [मैं बहिष्कृत API के बारे में javac चेतावनी कैसे को दबाने सकता है?] (
+0

मेरे लिए काम किया, धन्यवाद! मैंने पाया कि अन्य समाधानों की तुलना में, इस को कंपाइलर को धीरे-धीरे से फोर्क करने की आवश्यकता नहीं है। – botismarius

+0

स्रोत कोड ftw पढ़ने ... – Alun

+0

अफसोस की बात है कि यह जावा 9 के साथ काम करना बंद कर दिया है –