我们正在进行工作讨论,并提出了一个有趣的观点:
假设您正在开发一个小型库,将其命名为 somelib 。假设 somelib 需要进行一些日志记录,但您不想重新发明轮子,因此您决定使用第三方日志库。
此外,您希望尽可能轻松地集成somelib,因此您需要分发一个JAR文件(somelib.jar),其中包含另一个日志记录JAR,将其称为logger.jar,嵌入其中即可。就像Maven的jar-with-dependencies程序集一样。
现在问题来了。由于您的产品是库,如果您的客户正在使用 somelib ,并且恰巧正在使用相同日志库的不同版本,那该怎么办呢?现在我们遇到了类路径问题。
在我看来,这对于编写库的人来说是个常见问题,那么典型的解决方案是什么?
他们是否完全避免使用JAR捆绑方法?即使我们这样做,仍然存在用户代码期望日志库的版本X以及 somelib 的代码期望版本Y的问题。
他们是否以某种方式插入虚拟包前缀,以便 somelib 中的记录器类不会发生冲突?
如何动态加载记录器库? (虽然这仍然存在来自1的版本问题。)
答案 0 :(得分:1)
您可以考虑使用OSGI或等待JDK 8及其Jigsaw项目。