当前位置: 首页 > 面试题库 >

什么是类路径地狱?对于Java来说确实是一个问题吗?

孙熠彤
2023-03-14
问题内容

什么是类路径地狱?对于Java来说确实是一个问题吗?


问题答案:

类路径地狱是Java进行的那种动态链接的不幸结果。

您的程序不是固定的实体,而是JVM在特定实例中加载的确切类集。

由于解析规则,在不同平台上甚至同一平台上的同一命令行可能会导致完全不同的结果。

标准库可能存在差异(非常常见)。图书馆可以彼此隐藏(甚至可以使用旧版本代替较新的版本)。目录结构可能会使解析混乱。同一类的不同版本可能会出现在多个库中,并且将使用遇到的第一个库,依此类推。由于Java按照规范使用了第一个遇到的策略,因此未知的顺序依赖性可能导致问题。当然,由于这是命令行并且是规范的一部分,因此没有真正的警告。

这仍然是一个问题。例如,在Mac
OS上,Apple的可怕支持意味着您的计算机最终会带有多个JVM和几个JRE,并且您永远都不可能轻易地随意放置东西。如果您有多个针对特定但不同版本的其他库编译的库,则可能会遇到问题等。

但是,此问题不是Java固有的。我记得在90年代编程Windows时遇到的DLL地狱情况。在任何情况下,您都必须依靠文件系统中的某些内容来组装程序,而不是拥有一个定义明确的可执行文件,这是一个问题。

但是,此模型的好处仍然很大,因此我愿意容忍这种情况。Sun方面也朝着正确的方向迈出了一步。例如,Java6允许您仅使用jar指定目录,而不必枚举它们。

顺便说一句:如果您正在使用使用非默认类加载器的环境,类路径也是一个问题。例如,由于类加载器不兼容,我在Eclipse下运行诸如Hibernate或Digester之类的问题很多。



 类似资料:
  • 问题内容: 就像标题中所说的,绝对路径名和相对路径名有什么区别?我现在正在上一门计算机组织课程,而我正在上的讲座是Unix中的速成班。演讲幻灯片说: 作为参考,“上一张幻灯片”基本上显示了一个文件树,其根目录/为顶级节点。 幻灯片后显示: 我仍然对绝对路径名和相对路径名之间的区别感到困惑。例如,我在Mac上。我的根目录是/。要从/获得我的文档,我必须这样做。 进入文档后,我需要访问一个名为的文件夹

  • 问题内容: 我有两节课: MyApplication 库 该库已被编译为Library.class,并且源代码不再可用。我现在正在尝试从源代码编译MyApplication。MyApplication取决于库。该库的软件包名称为org.myCompany。我尝试将我的类路径设置为以下内容: 产生以下javac编译器错误消息: 所以我将类路径更改为: 产生完全相同的错误消息。 如何设置Windows

  • 问题内容: 问题是我需要从提供的文件中构建Web服务客户端。我已将此文件存储在本地文件系统上,并且在将WSDL文件保留在正确的文件系统文件夹中的同时,一切都很好。当我将其部署到服务器上或从文件系统文件夹中删除WSDL时,代理找不到WSDL并引发错误。我已经在网上搜索过,但发现了以下帖子,但仍无法使它起作用: JAX-WS从jar中加载WSDL http://www.java.net/forum/t

  • 问题内容: 我只是在读这行: format()方法要做的第一件事是从名为output.vm的类路径中加载Velocity模板 请解释在这种情况下类路径的含义,以及如何设置类路径。 问题答案: 使用Java进行编程时,可以通过在源文件的顶部放置类似的代码来使其他类对正在编写的类可用: 或者有时你通过说“批量导入”内容: 因此,稍后在你的程序中你说: Java虚拟机将知道在哪里可以找到你的已编译类。

  • 问题内容: 我一直在尝试运行一个jar文件-我们称它为test.jar-在Unix系统上使用Sybase jconn3.jar。 我创建了一个具有以下内容的MANIFEST.MF文件: 这给出了ClassNotFoundError。$ SYBASE是指向/ opt / sybase13的系统变量;我还尝试了以下方法: 和 但是,如果我将jconn3.jar文件从$ SYBASE / jConnec

  • im收到“无法读取输入文件!”在下一段代码中 如果图像与.java文件在同一位置,为什么会发生这种情况呢?