Gibt es eine Möglichkeit, die Einschränkungen von javac 1.6.0_22 zu deaktivieren, die mich daran hindern, JRE-interne Klassen wie Sun.awt.event.*
zu verwenden?
Ich bin nicht suche nach:
Ich möchte nur wissen, ob es möglich ist oder nicht und ob es dann wie ist.
Ich habe die Antwort selbst gefunden.
Wenn javac Code kompiliert, wird keine Verknüpfung zu rt.jar
standardmäßig hergestellt Stattdessen wird die spezielle Symboldatei lib/ct.sym
mit Klassenstubs verwendet.
Überraschenderweise enthält diese Datei viele, aber nicht alle internen Sun-Klassen . In meinem Fall war eine dieser mehr als gewöhnlich üblichen Klassen Sun.awt.event.IgnorePaintEvent
.
Und die Antwort auf meine Frage lautet: javac -XDignore.symbol.file
Das ist, was javac verwendet, um rt.jar
zu kompilieren.
Zusätzlich zur Antwort von @ marcin-wisnicki bei Verwendung von Maven beachten Sie , dass das Compiler-Plugin alle -XD-Flags löscht, sofern Sie nicht auch <fork>true</fork>
angeben: z.
<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>
...
Normalerweise wird nur eine Warnmeldung ausgegeben. z.B.
[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;
Vielleicht haben Sie den Java-Compiler angewiesen, Warnungen als Fehler zu behandeln.
Es gibt eine bessere Lösung. Fügen Sie zunächst die Option javac -XDenableSunApiLintControl
hinzu und verwenden Sie dann @SupressWarnings("sunapi")
in Ihrem Code.