【问题标题】:How to I access this particular class?我如何访问这个特定的课程?
【发布时间】:2017-02-27 16:23:38
【问题描述】:

有问题的类是sun.security.tools.KeyTool,我使用的是 OpenJDK 7。不过,我一直收到“找不到符号”,而且我不是 Java 专家,所以我无法通过文档弄清楚为什么会这样或如果它消失了。有什么想法吗?

确切的错误信息:

Main.java:1: error: cannot find symbol
import sun.security.tools.KeyTool;
                         ^
  symbol:   class KeyTool
  location: package sun.security.tools

代码:

import sun.security.tools.KeyTool;

public class Main {
    public static void main(String[] args) {
    }
}

【问题讨论】:

  • 你的代码是什么?你试过什么?确切的错误信息是什么,什么时候收到?
  • @AntonH 我在编译时得到它。 javac 版本 1.7.0_131。我的代码是import sun.security.tools.KeyTool; 和一个空类。
  • @AntonH 如果不清楚,我会在问题中添加更多细节。
  • @c0der 为sun.*添加一个外部jar?你确定吗?澄清一下,import sun.security.tools.*; 工作得很好——似乎只有KeyTool 不见了。
  • 我知道您说您的 import sun.security.tools.* 有效,但由于我不确定您还导入了哪些内容,您可以快速查看一下 docs.oracle.com/javase/7/docs/technotes/guides/security/…。确保您的 2 个安全库位于 $JAVA_HOME/lib/security

标签: java java-7 openjdk sun


【解决方案1】:

尝试使用javac -XDignore.symbol.file ...

默认情况下javac 限制它向用户公开的类。这通常可以帮助用户避免意外依赖(不受支持的)类,这些类不是公共 Java API,但恰好在当前 JRE/JDK 中可用。 ct.sym 文件中描述了“安全”类的列表。 ignorel.symbol.file 系统属性告诉 javac 忽略该文件并使用 JDK/JRE 中可用的所有类。

并确保添加tools.jar,其中此类定义到 javac 的类路径。

【讨论】:

  • 你知道为什么要添加tools.jar吗?当我使用 Java 8 时,没有额外的类路径,一切都可以正常工作,尽管我必须使用 -XDignore.symbol.file。你知道为什么也需要那个标志吗?
  • 我添加了-XDignore.symbol.file.的解释至于Oracle Java 8 vs OpenJDK 7,我不确定。比较 OpenJDK 8 以了解它的作用。设置_JAVA_LAUNCHER_DEBUG 环境变量以查看启动器将哪些类添加到类路径中。
  • 对未来读者的提醒:在 Java 8 中,keytool(和 jarsigner)代码移到了它们自己的包中,因此 sun.security.tools.KeyTool 类变为 sun.security.tools.keytool.Main。公共访问功能还是main()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2010-11-01
  • 1970-01-01
  • 2021-07-09
  • 2012-03-13
  • 1970-01-01
相关资源
最近更新 更多