2010-10-31 7 views
39

C'è un modo per disattivare le restrizioni di javac 1.6.0_22 che mi impediscono di utilizzare le classi interne JRE come sun.awt.event.*?Utilizzo di classi solare interna con javac

Sono non alla ricerca di:

  1. una spiegazione perché è vietato.
  2. suggerimento di utilizzare diverse classi
  3. suggerimento di utilizzare la riflessione
  4. suggerimento di utilizzare CGE/eclipse

Voglio solo sapere se è possibile o no, e se si tratta di allora come.

+0

Posso fare una domanda? Perché? – JeremyP

+0

Quali errori stai ottenendo esattamente? Posso compilare 'sun.awt. *' Bene con javac 1.6.0_22 (sul Mac, però). – Thilo

+0

Sto facendo alcuni esperimenti con Swing/AWT e devo accedere ai loro interni. –

risposta

74

ho trovato la risposta me stesso.

Quando javac è la compilazione di codice che non collega contro rt.jar per impostazione predefinita. Invece utilizza il file di simboli speciali lib/ct.sym con stub di classe.

Sorprendentemente Questo file contiene molte, ma non tutte le classi solare interna. Nel mio caso una di quelle classi più interne del solito era sun.awt.event.IgnorePaintEvent.

E la risposta alla mia domanda è: javac -XDignore.symbol.file

Questo è ciò che javac utilizza per la compilazione rt.jar.

+0

Ho avuto esattamente lo stesso problema, stavo cercando di compilare, ma stavo ricevendo questo errore 'pacchetto sun.nio.fs non esiste' per' sun.nio.fs .BasicFileAttributesHolder' –

+0

Vedere anche risposta @karmakaze per una soluzione alternativa per il plug-in del compilatore Maven. – karmakaze

+0

Come aggiungere questo attraverso il prompt dei comandi?ho bisogno di applicarlo per la mia applicazione web distribuita in tomcat sotto linux –

0

Normalmente, questo produce solo un messaggio di avviso; per esempio.

[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; 

forse avete detto al compilatore Java per trattare gli avvisi come errori.

+2

O forse stai confondendo avvertimenti per errori te stesso. – EJP

+0

@EJP - buon punto. –

+0

Come aggiungere questo tramite prompt dei comandi? ho bisogno di applicarlo per la mia applicazione web distribuita in tomcat sotto linux –

20

Oltre alla risposta da @ marcin-wisnicki se si sta utilizzando Maven, si noti che il plugin compilatore silenziosamente far cadere bandiere -XD, a meno che non si specifichi anche <fork>true</fork>: per esempio

<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

Come aggiungere questo tramite prompt dei comandi? ho bisogno di applicarlo per la mia applicazione web distribuito in tomcat sotto linux –

+0

Man, mi hai salvato la giornata con questo! Grazie :) – Anakin001

+0

@ Anakin001 felice di sentirlo. Questi successi oscuri sono quelli che mi piacciono davvero. – karmakaze

0

C'è una soluzione migliore. Innanzitutto aggiungi l'opzione javac -XDenableSunApiLintControl e quindi utilizza @SupressWarnings("sunapi") nel codice.