【问题标题】:Package from rt.jar "does not exist" when compiling with ant使用 ant 编译时来自 rt.jar 的包“不存在”
【发布时间】:2017-06-28 16:22:58
【问题描述】:

我试图通过使用内置的 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 和我的 Eclipse 项目一样在 JDK 1.8.0_60 上运行。我希望它使用该安装中的 rt.jar。为什么它不能访问某些选择的类?还是我查看了错误的核心类集,而 javac 任务正在使用不同的 rt.jar?

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

【问题讨论】:

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

标签: java eclipse ant


【解决方案1】:

This question explains my problem.

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

另一方面,Eclipse 使用 ct.sym 作为一个友好的建议,如果你想像我的同事一样编写代码,你可以把它扔到窗外。

【讨论】:

    猜你喜欢
    • 2012-03-10
    • 2013-10-13
    • 2015-09-06
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2020-09-04
    相关资源
    最近更新 更多