本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
Debug 笔记 <在Javac中使用内部Sun类>
提问
有没有一种方法可以禁用Javac 1.6.0_22的限制,这些限制阻止我使用JRE内部类,如sun.awt.event.*?
我不是在寻找:
- 解释为什么它被禁止。
- 建议使用不同的
classes - 建议使用反射
- 建议使用
ecj / eclipse我只想知道是否有可能,是否有可能。
回答一
我自己找到了答案。
当javac编译代码时rt.jar,默认情况下它不会链接。
相反,它使用lib/ct.sym带有类存根的特殊符号文件。
令人惊讶的是,此文件包含许多但不是全部内部sun类。在我的情况下,这些内部比平常多的类是sun.awt.event.IgnorePaintEvent。
我的问题的答案是: javac -XDignore.symbol.file
这就是javac用于编译的内容rt.jar。
回答二
如果您使用的是Maven,除了@ marcin-wisnicki的答案外,请注意,除非您另外指定,
<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…