在Java中编译插件代码而不使用父类主体
我正在尝试将插件系统添加到我的应用程序中。我有一个插件必须扩展的抽象类。这个类提供了常用的方法,所以我真的需要它。问题是这些插件可以由任何人编写,所以我支持他们需要抽象类代码来编译代码 我不想让创建插件的过程复杂化。有没有一种方法可以在不知道抽象类主体(只知道其方法)的情况下编译代码在Java中编译插件代码而不使用父类主体,java,plugins,compilation,loading,abstract,Java,Plugins,Compilation,Loading,Abstract,我正在尝试将插件系统添加到我的应用程序中。我有一个插件必须扩展的抽象类。这个类提供了常用的方法,所以我真的需要它。问题是这些插件可以由任何人编写,所以我支持他们需要抽象类代码来编译代码 我不想让创建插件的过程复杂化。有没有一种方法可以在不知道抽象类主体(只知道其方法)的情况下编译代码 提前感谢。您只需提供一个包含所有必需java文件的jar文件即可。但是请记住,一旦发布了api,就应该非常小心地对其进行更改。您只需提供一个包含所有必需java文件的jar文件即可。但是请记住,一旦发布api,您应
提前感谢。您只需提供一个包含所有必需java文件的jar文件即可。但是请记住,一旦发布了api,就应该非常小心地对其进行更改。您只需提供一个包含所有必需java文件的jar文件即可。但是请记住,一旦发布api,您应该非常小心地更改它。您可以要求插件作者为您提供一些具有某些指定方法的类,并使用反射调用这些类。这意味着他们可以编写一个插件,可以在不访问任何代码的情况下进行编译 但是这也会严重限制他们的可能性:如果他们无法调用插件,插件应该如何与您的系统交互?由于唯一合理的方法是使某些类(或接口)可访问,因此您也可以提供它们需要实现/扩展的接口(或抽象类) 您可以将该接口(以及插件可见的所有接口/类)放在一个单独的.jar文件中。这样,他们只需要jar文件就可以编译插件。您可以要求插件作者为您提供一些具有特定方法的类,并使用反射调用这些类。这意味着他们可以编写一个插件,可以在不访问任何代码的情况下进行编译 但是这也会严重限制他们的可能性:如果他们无法调用插件,插件应该如何与您的系统交互?由于唯一合理的方法是使某些类(或接口)可访问,因此您也可以提供它们需要实现/扩展的接口(或抽象类) 您可以将该接口(以及插件可见的所有接口/类)放在一个单独的.jar文件中。这样,他们只需要这个jar文件就可以编译插件 有没有一种方法可以在不知道抽象类主体(只知道其方法)的情况下编译代码? 否。为了编译声明为
class A extends B
必须在源路径中使用源格式的B
,或在类路径中使用.class格式的
(如果只知道方法就足以编写插件,那么听起来更像是在寻找接口而不是抽象类。)
我不想让创建插件的过程复杂化。
提供B
的编译后的.class文件完全不复杂,可能是该场景中的最佳实践
实际上,通过包含相关类和接口的.jar文件手头有一个API可能是标准的
要明确的是:
pluginapi.jar
pluginapi.jar
plugin.jar
(不一定包括pluginapi类)class A extends B
必须在源路径中使用源格式的B
,或在类路径中使用.class格式的
(如果只知道方法就足以编写插件,那么听起来更像是在寻找接口而不是抽象类。)
我不想让创建插件的过程复杂化。
提供B
的编译后的.class文件完全不复杂,可能是该场景中的最佳实践
实际上,通过包含相关类和接口的.jar文件手头有一个API可能是标准的
要明确的是:
pluginapi.jar
pluginapi.jar
plugin.jar
(不一定包括pluginapi类)或者,您可以不强制用户扩展类或实现接口,而是让他们提供具有特定签名的函数,然后您可以通过反射调用该签名。在这种情况下,他们不需要您提供任何东西,但是,如果他们的函数出现错误,显然您将无法调用插件。或者,您可以不强制用户扩展类或实现接口,而是让他们提供具有特定签名的函数,然后您可以通过反射调用该函数。在这种情况下,他们不需要您提供任何帮助,但是,如果他们的函数出现错误,显然您将无法调用插件。在这种情况下,Java脚本非常有用。让您的插件用Groovy编写,代码就可以在您的框架中轻松(下载)加载和执行,在这些情况下类似这样