【发布时间】:2013-01-01 13:09:13
【问题描述】:
我正在开发一个框架,可以将 jar 放入文件夹并扫描以后可以调用的函数。我的第一个实现使用了简单的 ClassLoader 方法,其中加载了 jar 并创建了类实例。这是插件架构。 我遇到的问题是版本控制。例如,假设我的主机应用程序正在使用依赖于 org.joda 时间版本 1.6 的第三方库,并且插件依赖于同一(较新)库的 2.1 版。 我尝试使用Java Simple Plugin Framework,但它似乎没有使用自定义类加载器加载我的插件(我假设我需要克服版本冲突并实际加载 2.1 版本)。 我的下一步是尝试 osgi。 所以,问题是:这是正确的方法还是有一种我不知道的简单方法,我来自.net世界,不太了解java,但我记得dll地狱,这似乎是它的java版本。顺便说一句,我正在使用 Scala 进行开发,但这与主要问题无关。
【问题讨论】:
-
你看过maven吗?
-
@AaronKurtzhals 你是什么意思?是的,我正在使用 maven 来构建 jars
-
也许我不明白这个问题。我个人没有使用过 maven,但我知道使用 maven 是为了解决依赖需求/冲突。
-
是的,maven 有一个存储库,其中 jar 版本声明它们对其他 jars 版本的依赖关系。 OSGi 也管理版本;特别是同时使用多个版本。另一方面,如果您需要大锤来热交换类 chenges,请查看 JRebel。
-
可能我的问题没有说清楚,这是一个运行时插件架构,所以当我的主机运行时,它应该使用1.6版本的库,但是当它调用插件时,应该正确使用2.1。
标签: java plugins osgi classloader