3

我正在开发一个框架,可以将 jar 放入文件夹并扫描以后可以调用的函数。我的第一个实现使用了简单的 ClassLoader 方法,其中加载了 jar 并创建了类实例。这是插件架构。我遇到的问题是版本控制。例如,假设我的主机应用程序正在使用依赖于 org.joda 时间版本 1.6 的第三方库,并且插件依赖于同一(较新)库的 2.1 版。我尝试使用Java 简单插件框架但它似乎没有使用自定义类加载器加载我的插件(这是我假设我需要克服版本冲突并实际加载 2.1 版本)。我的下一步是尝试 osgi。所以,问题是:这是正确的方法还是有一种我不知道的简单方法,我来自.net世界,不太了解java,但我记得dll地狱,这似乎是它的java版本。顺便说一句,我正在使用 Scala 进行开发,但这与主要问题无关。

4

2 回答 2

3

我有一个类似的用例。我想要一个与您描述的非常相似的简单插件框架,但还没有准备好跳入 OSGi。我去了自定义类加载器路线,但遇到了和你一样的问题。我确实尝试了Parent-Last Classloader,它确实有助于解决一些 jar 冲突。这可能是需要调查的事情。我相当认真地研究了 CI Server Jenkins为他们的插件系统所做的工作 - 并发现这篇文章很有趣。

最后,我需要能够跟踪服务何时来来去去,拥有一个服务注册中心,等等……并意识到我正在重新发明 OSGi。我切换到纯 OSGi,即使有学习曲线并且有时会很痛苦,但我很高兴我做到了。

于 2013-01-18T18:38:19.960 回答
3

尝试ScalaScriptEngine。它允许您从源文件动态加载和编译类,并支持相当多的高级功能。

于 2013-01-22T04:26:58.687 回答