Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中编译插件代码而不使用父类主体_Java_Plugins_Compilation_Loading_Abstract - Fatal编程技术网

在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
  • 分发.jar并告诉插件开发人员他们的插件应该编译,前提是
    pluginapi.jar
  • 请plugindeveloper为您提供
    plugin.jar
    (不一定包括pluginapi类)
  • 在应用程序中,确保插件API类存在,例如通过将它们包含在类路径中
  • 加载插件类
  • 有没有一种方法可以在不知道抽象类主体(只知道其方法)的情况下编译代码?

    否。为了编译声明为

    class A extends B
    
    必须在源路径中使用源格式的
    B
    ,或在类路径中使用.class格式的

    (如果只知道方法就足以编写插件,那么听起来更像是在寻找接口而不是抽象类。)

    我不想让创建插件的过程复杂化。

    提供
    B
    的编译后的.class文件完全不复杂,可能是该场景中的最佳实践

    实际上,通过包含相关类和接口的.jar文件手头有一个API可能是标准的

    要明确的是:

  • 获取与插件开发相关的类,编译它们,并将它们放入,比如
    pluginapi.jar
  • 分发.jar并告诉插件开发人员他们的插件应该编译,前提是
    pluginapi.jar
  • 请plugindeveloper为您提供
    plugin.jar
    (不一定包括pluginapi类)
  • 在应用程序中,确保插件API类存在,例如通过将它们包含在类路径中
  • 加载插件类

  • 或者,您可以不强制用户扩展类或实现接口,而是让他们提供具有特定签名的函数,然后您可以通过反射调用该签名。在这种情况下,他们不需要您提供任何东西,但是,如果他们的函数出现错误,显然您将无法调用插件。

    或者,您可以不强制用户扩展类或实现接口,而是让他们提供具有特定签名的函数,然后您可以通过反射调用该函数。在这种情况下,他们不需要您提供任何帮助,但是,如果他们的函数出现错误,显然您将无法调用插件。

    在这种情况下,Java脚本非常有用。让您的插件用Groovy编写,代码就可以在您的框架中轻松(下载)加载和执行,在这些情况下类似这样