在 javac 中使用内部 sun 类

新手上路,请多包涵

有没有办法禁用 javac 1.6.0_22 的限制,这些限制阻止我使用 sun.awt.event.* 类的 JRE 内部类?

不是 在寻找:

  1. 解释为什么它被禁止。
  2. 建议使用不同的类
  3. 建议使用反射
  4. 建议使用 ecj/eclipse

我只是想知道这是否可能,如果可能的话。

原文由 Marcin Wisnicki 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
2 个回答

我自己找到了答案。

当 javac 编译代码时,它默认不链接 rt.jar 。相反,它使用带有类存根的特殊符号文件 lib/ct.sym

令人惊讶的是,这个文件包含许多但不是所有的内部 sun 类。在我的例子中,其中一个比平常更内部的课程是 sun.awt.event.IgnorePaintEvent

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

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

原文由 Marcin Wisnicki 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果您使用的是 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>
            ...

原文由 karmakaze 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题