什么是类路径地狱,是/它真的是Java的问题?
Classpath hell是Java执行的动态链接的一个不幸后果.
您的程序不是固定实体,而是JVM在特定实例中加载的确切类集.
由于分辨率规则,很可能在不同平台上甚至同一命令行上的相同命令行会导致完全不同的结果.
标准库可能存在差异(非常常见).库可以彼此隐藏(甚至可以使用旧版本而不是新版本).目录结构可能会破坏解决方案.同一类的不同版本可能出现在多个库中,并且将使用遇到的第一个类,等等.由于Java按规范使用首次遇到的策略,因此未知的顺序依赖性可能导致问题.当然,由于这是命令行,并且它是规范的一部分,因此没有真正的警告.
这仍然是一个问题.例如在Mac OS上,来自Apple的可怕支持意味着你的机器最终会有几个JVM和几个JRE,你永远不能轻易地将事物从一个地方放到另一个地方.如果您有多个库是针对特定但不同版本的其他库编译的,那么您可能会遇到问题,等等.
但是,这个问题并不是Java所固有的.在90年代编程窗口时,我记得我对DLL地狱情况的分享.任何情况下你必须指望文件系统中的某些东西来组装你的程序而不是一个定义良好的可执行文件是一个问题.
然而,这种模式的好处仍然很大,所以我愿意忍受这种地狱.在太阳的一侧也有正确方向的步骤.例如,Java6允许您只使用jar指定目录,而不必枚举它们.
顺便说一句:如果您使用的是使用非默认类加载器的环境,则类路径也是一个问题.例如,我在Eclipse下运行Hibernate或Digester等问题时遇到了很多问题,因为类加载器是不兼容的.