【发布时间】:2014-11-26 06:21:21
【问题描述】:
所以,我在这里尝试做一些丑陋的事情,假设这是一个绝望的措施,因为我无法控制运行时环境。
话虽如此,我在无法控制类路径的环境中运行一些代码(坏事)......更糟糕的是类路径有两个 jar,比如说 productV1.jar 和 productV2.jar两者完全相同,但版本不同,因此它们具有相同的类。
由于某种原因,在大多数环境中,productV2.jar 被加载,productV1.jar 被忽略,但在其他一些环境中,productV1.jar 被调用,导致程序崩溃。
作为一种解决方法,我想要做的是弄乱类加载器以明确忽略“productV1.jar”。理想情况下,通过覆盖一些类加载器功能。我已经使用其他资源(例如来自 Hibernate 的 persistence.xml 文件)完成了此操作,但我不想根据包含的类进行过滤,而是根据 jar 文件进行过滤。有什么办法吗?
这只是在我可以进行谈判以摆脱有问题的罐子之前起作用...
编辑:如果有一些有趣的黑客攻击,我会留下这个问题。但是,问题在于 classpth 中的所有内容都由系统类加载器加载,并且尝试在运行时切换它并不是一件容易的事(或者可能根本不可能?)。我看到的唯一方法是使用自定义类加载器开始该过程,这不是我想要的。
【问题讨论】:
-
我认为即使有充分的理由也应该避免这样做,但从“理论上什么是可能的?”的角度来看,这个问题很有趣
-
您真正的问题不是技术问题,而是您的环境。您不能与控制设置类路径的人交谈以解决问题吗?像这样的解决方法只会让问题变得更糟。
-
其实我是在爱护环境,但因为需要时间,我觉得找个短期的hack会很有趣……但我发现它不会放轻松...
标签: java jar classloader