java - JAR 插件实现

标签 java reflection plugins groovy jar

让我们有一个 Groovy/Java 应用程序,它应该使用一组在外部 *.jar 文件中定义的类(假设它们位于主要可执行 jar 附近)。

因此,主类(让我们称它为 Main)应该在运行时加载 plugin.jar 文件并调用该类中定义的一些实例方法,在该 jar 中定义(对于某些约定,假设该类的名称作为其 jar - Plugin 在我们的例子中)。

Main 类在运行之前无法知道它拥有哪些插件。让我们扔掉 CLASSPATHjava -jar 运行参数,只用代码来施展魔法。

那么,如何做到这一点以及如何创建 plugin.jar(在我的例子中使用 Eclipse)以便正确加载?

PS: 是的,我确实将我的 groovy 源代码编译成 jar 文件。但我需要执行类加载并即时调用。

最佳答案

secret 真的很简单!

使用 URLClassLoader 就可以了。

因此,Groovy 代码:

ClassLoader loader = new URLClassLoader((URL[]) [
    new File("C:\\Users\\errorist\\workspace\\javatest1\\bin\\").toURI().toURL()
])

Class c = loader.loadClass("src.SomeClass1")

c.invokeMethod("main", (String[]) ["Hello", "World"])

还有 Java 一个:

File file = new File("C:\\Users\\errorist\\workspace\\javatest1\\bin\\");
URL[] urls = new URL[] { file.toURI().toURL() };
ClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("src.SomeClass1");
c.invokeMethod("main", new String[] { "Hello", "World!" });

关于java - JAR 插件实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546467/

相关文章:

Intellij 上的 Golang 插件。库和断点

java - -bash : import: command not found : command not found Java Compilation Mac Terminal

java - 为什么 Class.newInstance 总是抛出异常?

c# - 在 .NET/C# 中使用委托(delegate)加速反射 API

加载 DLL 期间出现 C# 异常。找不到解决方法

ruby-on-rails - Rails 3.2 升级 - 供应商/插件问题

jquery - 在 jQuery 插件中调用函数

java - 在 Eclipse RCP 4.X 中使用默认命令

eclipse - 我可以与其他人同时在同一个项目上使用 Java 进行编程吗?

java - 如何在 Spring Boot @Async 中使用 ForkJoinPool?