将内部 sun 类与 javac 结合使用
有没有办法禁用javac 1.6.0_22的限制,这些限制阻止我使用JRE内部类,例如?sun.awt.event.*
我不是在寻找:
- 解释为什么它被禁止。
- 建议使用不同的类
- 使用反射的建议
- 建议使用 ecj/eclipse
我只是想知道这是否可能,以及如果是,那么如何。
有没有办法禁用javac 1.6.0_22的限制,这些限制阻止我使用JRE内部类,例如?sun.awt.event.*
我不是在寻找:
我只是想知道这是否可能,以及如果是,那么如何。
我自己也找到了答案。
当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>
...