使用 ant 编译时来自 rt.jar "does not exist" 的包

Package from rt.jar "does not exist" when compiling with ant

我试图通过使用内置的 java.util.logging 功能改进 HTTP 连接的日志记录。但是在插入一行以激活代码中的日志记录后,我在我的 ant 构建中遇到了一个我不理解的错误。

error: package sun.util.logging does not exist
    import sun.util.logging.PlatformLogger;
           ^

sun.util.logging.PlatformLogger 位于 rt.jar 中,据我所知,它应该始终位于类路径中。而且它不是 "internal API" 会在编译期间发出警告。该代码在 Eclipse 中运行良好。

Ant 在 JDK 1.8.0_60 上 运行,我的 Eclipse 项目也是如此。我希望它使用该安装中的 rt.jar。为什么它不能访问一些select 类?还是我看错了一组核心 类 而 javac 任务使用的是不同的 rt.jar?

旁注:我知道我可以使用日志记录属性来设置它。这不是这个问题的重点。我想知道为什么 ant 遇到了 Eclipse 没有的问题。

This question explains my problem.

简而言之:javac 实际上并不针对 rt.jar 进行编译。相反,它使用 jdk/lib/ct.sym 其中包含大多数 类 作为存根,但是例如不是 PlatformLogger。有一个 VM 参数可以停用它,但当然不鼓励这样做。

另一方面,Eclipse 使用 ct.sym 作为一个友好的建议,如果你喜欢像我的同事一样编码,你可以放弃 window。