java - 在没有父类主体的情况下用 Java 编译插件代码

标签 java plugins compilation loading abstract

我正在尝试将插件系统添加到我的应用程序中。我有一个插件必须扩展的抽象类。这个类提供了有用的方法,所以我真的需要它。问题是这些插件可以由任何人编写,所以我认为他们需要抽象类代码才能编译他们的代码。

我不想让创建插件的过程复杂化。有没有一种方法可以在不知道抽象类主体(仅了解其方法)的情况下编译代码?

提前致谢。

最佳答案

Is there a way to compile the code without know the abstract class body (only its methods)?

没有。为了编译声明为的类

class A extends B

您必须在源路径中包含源格式的 B 或在类路径中包含 .class 格式的 B

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

I don´t want to complicate the process of creating a plugin.

提供 B 的已编译 .class 文件完全不复杂,可能是这种情况下的最佳实践。

实际上,通过包含相关类和接口(interface)的 .jar 文件获得 API 可能是标准做法。

要清楚:

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

关于java - 在没有父类主体的情况下用 Java 编译插件代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6056155/

相关文章:

javascript - 尝试在 iframe 中使用 Cordova 插件

visual-studio - 在没有 Visual Studio 的情况下编译 .vbproj 或 .csproj 项目文件

c++ - 如何从多个 cpp 文件编译 WebAssembly?

c# - 有关如何链接、编译等以及它们如何组合在一起的书籍?

javascript - 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

java - 面向对象的二维图形方法 : delegating JPanel clicks to painted objects

ruby-on-rails - 跨多个 Rails 应用程序重用 Ruby 代码

c++ - 为什么我收到错误 : initializing argument 1 of 'Item::Item(int)' [-fpermissive] in Eclipse when I try to compile my C++ code?

java - @embedded 注解有什么影响?

java - 如何通过省略中介类来简化Retrofit