有没有办法在Java应用程序中实现简单的插件,可以在需要时启动并且有详细记录?
我正在寻找的是与OSGI,JPF和JSPF类似的东西。但是,OSGI很复杂,JPF没有很好的文档记录,并且JSPF不允许您仅在需要时启动插件。
例如,有一个插件文件夹。任何人都可以通过实现我提供的接口来创建插件。创建插件后,任何想要使用它的人都可以将它放入我的应用程序的plugins文件夹中,应用程序将加载它。
或许,更好的说法是“附加”。
我的问题有一些类似的问题,但我想了解更多。这些问题的答案含糊不清。
http://stackoverflow.com/questions/2369499/how-to-make-java-plugins?rq=1
http://stackoverflow.com/questions/7587318/how-can-i-write-my-own-plugin-in-java
如果您不知道,请告诉我如何在我的应用程序中使用JPF。非常感谢您花时间阅读本文。
编辑:我已经解决了我的问题。我现在正在使用JSPF - 它非常适合我的目的。感谢所有试图提供帮助的人,我为没有提出“真正的问题”道歉。答案 0 :(得分:4)
如果您为Jar启动ClassLoader,您可以随时加载或卸载代码。
http://viralpatel.net/blogs/java-dynamic-class-loading-java-reflection-api/
http://www.javalobby.org/java/forums/t18345.html
http://zeroturnaround.com/blog/reloading-objects-classes-classloaders/
答案 1 :(得分:2)
是的,你可以实现它们。仅出于语义考虑,java中的plugins
称为libraries
(这应该使您更容易在Google上搜索)。通常,java中的库在构建时显示为.jar文件
以下是一些可以帮助您的链接:
http://www.digilife.be/quickreferences/PT/Build%20your%20own%20Java%20library.pdf
https://stackoverflow.com/questions/3612567/how-to-create-my-own-java-libraryapi
回复此帖子的编辑和评论:
然后你应该读到这个:How to design extensible software (plugin architecture)?
答案 2 :(得分:1)
这个tutorial向您展示了如何为您的应用程序轻松实现插件方法,但这需要您的应用程序是Eclipse RCP驱动的。您将找到所需的一切,包括“插件目录”,然后将根据需要加载。 RCP不是OSGI实施中唯一的其他人,但我建议你使用它,因为更广泛的社区支持。
从我开始写答案的那一刻起,我就看到了很多关于你问题的更新。在我看来,你不应该害怕深入了解建议的框架,请选择一个看起来很复杂但经过验证而不是堆叠或重新发明自行车只是因为你是新工作者。