Java 系统插件是如何工作的?谁实例化了我的类?

Java 系统插件是如何工作的?谁实例化了我的类?,java,plugins,jenkins,nexus,Java,Plugins,Jenkins,Nexus,我正在为NexusOSS编写插件。我有权在创建插件时以任何名称调用我的类。我是java新手,所以如果我的问题很奇怪,请原谅我 如果名称可以是任何东西,它们是如何实例化我的类的 在我的插件中,类的开头如下: public class HelloWorldPlexusResource extends AbstractPlexusResource implements PlexusResource 即使在我为詹金斯写插件的时候,我也有同样的怀疑。课程开始时就像: public cla

我正在为NexusOSS编写插件。我有权在创建插件时以任何名称调用我的类。我是java新手,所以如果我的问题很奇怪,请原谅我

如果名称可以是任何东西,它们是如何实例化我的类的

在我的插件中,类的开头如下:

public class HelloWorldPlexusResource
    extends AbstractPlexusResource
    implements PlexusResource
即使在我为詹金斯写插件的时候,我也有同样的怀疑。课程开始时就像:

public class HelloWorldBuilder extends Builder
例如:

再说一次,当我的类名可以是任何名称时,他们在运行时如何调用我的类? 系统是否正在扫描扩展特定类的类?如果是的话,是如何做到的?但这也需要实例化,对吗?(不确定)


如果可能的话,也请指导我一些java阅读。

我不能给你一个具体的答案,但在其他这样的插件支持系统中,比如说
plugins/
文件夹中的所有有效文件基本上都是作为插件加载的


由于它是Java,我想filenname==主类名

您要查找的是
反射
。看一看,当然你需要某种约定(例如,你的类必须有一个默认构造函数),那么在运行时实例化你的类是非常容易的(例如,扫描一个特定的文件夹,加载所有类并实例化每个类一次)。关于细节,我建议阅读插件文档。他们应该提供这些信息。@zip谢谢。是的,我通过教程进行反思,还有这个特殊的链接,他们在一个包中获得所有的类,但也看到了他们说“不”的地方。在学习了reflection之后,我还提出了同样的问题:为什么不可能呢?如果您只使用内置Java功能,那么可能无法从包中加载所有类(例如,您的应用程序打包在jar归档中)。与詹金斯不同。Jenkins是一个Webarchive(war文件),它在开始之前被解包。因此,您可以在一个包(基本上是一个目录)中加载所有类/资源。也可以使用您已经提到的第三部分库。一旦有了类名,实例化就非常容易:
class.forName(“com.stackoverflow.examples.MyClass”).newInstance()