1.23 在Javac中使用内部Sun类 | Java Debug 笔记

439 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

Debug 笔记 <在Javac中使用内部Sun类>

提问

有没有一种方法可以禁用Javac 1.6.0_22的限制,这些限制阻止我使用JRE内部类,如sun.awt.event.*

我不是在寻找:

  1. 解释为什么它被禁止。
  2. 建议使用不同的classes
  3. 建议使用反射
  4. 建议使用ecj / eclipse 我只想知道是否有可能,是否有可能。

回答一

我自己找到了答案。

javac编译代码时rt.jar,默认情况下它不会链接。

相反,它使用lib/ct.sym带有类存根的特殊符号文件。

令人惊讶的是,此文件包含许多但不是全部内部sun类。在我的情况下,这些内部比平常多的类是sun.awt.event.IgnorePaintEvent

我的问题的答案是: javac -XDignore.symbol.file

这就是javac用于编译的内容rt.jar

回答二

如果您使用的是Maven,除了@ marcin-wisnicki的答案外,请注意,除非您另外指定,

否则编译器插件将静默删除任何-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>
            ...

回答三

通常,这只会产生一条警告消息。例如

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

也许您已经告诉Java编译器将警告视为错误。

回答四

有更好的解决方案。首先将选项添加到javac -XDenableSunApiLintControl

然后@SupressWarnings("sunapi")在您的代码中使用。

文章翻译自Stack Overflow :stackoverflow.com/questions/3…