Java 来自rt.jar的包;“不存在”;使用ant编译时

Java 来自rt.jar的包;“不存在”;使用ant编译时,java,eclipse,ant,Java,Eclipse,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中,据我所知,它应该始终位于类路径上。它不是一个

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

error: package sun.util.logging does not exist
    import sun.util.logging.PlatformLogger;
           ^
sun.util.logging.PlatformLogger
位于rt.jar中,据我所知,它应该始终位于类路径上。它不是一个在编译过程中抛出警告的“内部API”。代码在Eclipse中运行良好

Ant正在JDK1.8.0_60上运行,我的Eclipse项目也是如此。我希望它使用该安装中的rt.jar。为什么它不能访问某些选定的类?或者我看到的是错误的核心类集,而javac任务使用的是不同的rt.jar

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

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


另一方面,Eclipse使用ct.sym作为友好的建议,如果您喜欢像我的同事一样编写代码,可以将其扔出窗口。

我开始认为“某人”删除了Eclipse工作区中对rt.jar的所有访问限制,并且从一开始我就不应该能够访问
PlatformLogger
。但是问题仍然存在,javac如何知道哪些类可能不被代码引用?Eclipse不使用
javac
。他们有自己的编译器。