导出后从任何位置加载任何库
Load any libraries form any location after export
是否可以在创建 jar 后加载其他库?
我想在一个文件夹中搜索 jar 文件,并将它们作为库加载。 "They" 将扩展一个 class,我已经有了,这样我就可以解决它们。 libs 的文件夹与加载所有其他文件的 jar 文件所在的文件夹不同。如果没有其他办法,只能更改 jar 本身内的设置文件(链接要加载的库的位置),那不是很好但也有帮助;)
谢谢
西蒙
是的。您只需要使用 URLClassLoader。
URLClassLoader loader = new URLClassLoader(new URL[]{new URL("jar:file:/home/myapp/plugins/dateplugin.jar!/")}, ClassLoader.getSystemClassLoader());
MyInterface pluginClass = (MyInterface )loader.loadClass("com.mypackage.MyClass").newinstance();
您想通过将系统 classloader 传递给构造函数来确保将 classloader 与主加载器连接起来。这将允许您将新加载的库分配给现有界面。这就是您可以为您的游戏或应用程序制作插件系统的方法。
这里是一个 link 源代码,显示了此操作:Git Hub Repository for Sticky。看看 class sticky.gui.Main。它显示插件系统在启动后加载新库 运行。
是否可以在创建 jar 后加载其他库? 我想在一个文件夹中搜索 jar 文件,并将它们作为库加载。 "They" 将扩展一个 class,我已经有了,这样我就可以解决它们。 libs 的文件夹与加载所有其他文件的 jar 文件所在的文件夹不同。如果没有其他办法,只能更改 jar 本身内的设置文件(链接要加载的库的位置),那不是很好但也有帮助;)
谢谢
西蒙
是的。您只需要使用 URLClassLoader。
URLClassLoader loader = new URLClassLoader(new URL[]{new URL("jar:file:/home/myapp/plugins/dateplugin.jar!/")}, ClassLoader.getSystemClassLoader());
MyInterface pluginClass = (MyInterface )loader.loadClass("com.mypackage.MyClass").newinstance();
您想通过将系统 classloader 传递给构造函数来确保将 classloader 与主加载器连接起来。这将允许您将新加载的库分配给现有界面。这就是您可以为您的游戏或应用程序制作插件系统的方法。
这里是一个 link 源代码,显示了此操作:Git Hub Repository for Sticky。看看 class sticky.gui.Main。它显示插件系统在启动后加载新库 运行。