使用带有javac的内部sun类

Mar*_*cki 50 java javac internal

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

不是在寻找:

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

我只想知道它是否可能,如果是,那么如何.

Mar*_*cki 89

我自己找到了答案.

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

令人惊讶的是,这个文件包含许多但不是全部的内部sun类.就我而言,其中一个比通常更内部的课程是sun.awt.event.IgnorePaintEvent.

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

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


kar*_*aze 36

除了@ marcin-wisnicki的回答,如果你正在使用Maven,请注意编译器插件将默默地删除任何-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>
            ...
Run Code Online (Sandbox Code Playgroud)