【问题标题】:How to access the jar placed inside lib\ext directory in Eclipse?如何访问放置在 Eclipse 中 lib\ext 目录中的 jar?
【发布时间】:2020-01-22 13:10:15
【问题描述】:

我制作了一个 jar 库并将其放在 jdk 和 jre 的 ext 目录中,以检查 Java 中的 已安装扩展 场景。

现在,当我尝试在 Eclipse 中创建 Java 项目并尝试使用 jar 文件类或使用库时,我无法访问,但这些 jar 文件在 ECLIPSE 中的 Java PRoject jre 系统库下可见。

【问题讨论】:

    标签: java eclipse classloader


    【解决方案1】:
    1. 在 Eclipse 之外运行某些东西时是否加载了扩展类?例如,您可以在终端中尝试以下命令来检查是否可以找到扩展中的类:

      javap name.of.ExtensionClass
      
    2. 当您从 Eclipse 运行程序时,您确定使用的是安装了扩展的 JRE?

    【讨论】:

    • 是的,我确定我的 jre 版本,正如我所提到的,我能够在 ECLIPSE 本身的 jre 库中看到加载的 jar,所以从逻辑上讲它已经加载或 jre 库的一部分,但访问是问题
    • 您是否检查过扩展中的类是否可以加载?
    • 实际上 javap 命令没有响应,可能是 CLASS_PATH 的一些问题,因为我主要/总是使用 eclipse,所以不知道如何解决它
    • 如果您的 .jar 文件位于正确的 ext 目录中,javap 会以课堂内容摘要作为响应。 CLASSPATH 与它无关,因为扩展加载机制具有优先权。参见例如docs.oracle.com/javase/tutorial/ext/basics/load.html
    【解决方案2】:

    您可能必须在 Eclipse 中专门引用该 jar。 JRE 附带的 JAR 集合也包含在清单文件中,以便运行时知道要请求加载哪些文件。由于您的 jar 不在清单中,因此不会自动加载。

    另一种方法可能是使用更新的清单重新打包 JRE,该清单引用您的扩展 jar。

    【讨论】:

    • 在目录中,实际上我可以在其中查找清单文件,因为我知道清单文件应该是 jar 文件的一部分,所以它是否像一个名为 rt.jar 的父 jar 包含此清单包括所有其他子文件或子文件的文件
    • 不正确:没有列出扩展名的“清单文件”。 “JRE 目录的 lib/ext 中的任何 JAR 文件都会被运行时环境自动视为扩展。” docs.oracle.com/javase/tutorial/ext/basics/install.html
    【解决方案3】:

    添加到 JAVA_HOME/lib/ext 文件或 java.ext.dirs 系统属性后, 不要运行jar文件,它不会。 但是用包名运行类,它会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2012-04-16
      • 2011-03-24
      相关资源
      最近更新 更多