当前位置: 首页 > 知识库问答 >
问题:

从外部JAR文件加载Spring组件

万俟飞语
2023-03-14

我正在开发一个Spring Boot应用程序。我想提供一个(相当初级的)插件系统。最初,我希望只将JAR添加到类路径中就足够了,如下所示:

URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;

Method method = sysclass.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(sysloader, new File("./plugin/plugin.jar").toURI().toURL());

SpringApplication.run(Application.class, args);

此外,如果我尝试在插件控制器中@autowire一个JpaRepository,它会失败,因为它找不到存储库接口类(我猜这是因为我乱弄类加载器引起的问题)。

不过,在我的主应用程序中自动创建存储库就可以很好地工作,因此它的配置不应该是一个问题。

是不是我做错了什么?我是否可以配置Springs ApplicationContext或它的类加载器使其正常工作?

共有1个答案

丰佐
2023-03-14

现在,我只是在我的应用程序pom中为我的各种插件声明概要文件,我只是使用我想要的插件的概要文件来编译它。它不是很动态,但至少我可以将插件开发与应用程序开发完全分离,并让Spring处理插件的所有组件。

这不完全是我想要的,但我想我会描述我是如何“解决”它的。如果有人知道一种方法,使这个工作与外部罐子,我很乐意接受这个答案,而不是!

 类似资料:
  • 我有一个名为core project jar的maven spring项目,其中包含orm和持久性xml文件,以及在注释和xml中定义的实体。现在我有了另一个spring boot项目,它利用这个核心项目初始化持久性。在SpringBoot Main类中定义@EntityScan(packages)时,我能够扫描带注释的实体(即带有实体的实体),但没有扫描orm xml中定义的实体(即 获取错误,

  • 我试图弄清楚什么是最好的方法来设置Spring Boot应用程序,使其具有自己的jar依赖项,但当它作为java-jar命令运行时,将额外的jar添加到类路径中。哪种方法更有意义 > 使用原始jar(不添加依赖项)并将所有jar(应用程序和运行时)放置在文件系统的文件夹中,并使用PropertiesLauncher指定jar文件夹的loader.path。 使用fat jar(与应用程序jar一起

  • 我有一个带有spring boot的java项目,我需要加载应用程序。外部文件夹中的属性和依赖项jar。 我使用该应用程序进行了测试。类路径和加载程序中的属性。路径属性工作正常。 当我使用外部属性文件(我确信它们已被使用)时,加载程序。路径工作不正常,结果为ClassNotFound,因为JAR未加载。 此外,当我启动应用程序与**-Dloader.path=**xxx它的工作正常。 如何使用外部

  • 在我的Spring启动应用程序中,我想使用日志记录到外部文件。 所以我配置了应用程序属性,如下所示: 我想在windows系统上使用应用程序,并想使用NSSM将jar文件作为windows服务启动。 我还想要我提到的外部日志文件。 在当前状态下,我仅在eclipse中测试了此配置,并且名为的日志文件仅存在于我的类路径中。 没有创建文件夹< code>var。 总之…… 如何配置此应用程序日志以使其

  • 我目前正在制作一个Minecraft Mod Loader。 正如您在上面看到的,我有一个名为Client的类。当Minecraft游戏启动时,启动被调用。现在我有一个名为Mods的文件夹,在调用startup时,我需要将Mods从Mods文件夹加载到ArrayList命名模块中。更深入地说,每个Mod将有一个继承这个模块类的主类 因此,在调用startup时,我需要遍历mods文件夹中的每个Mo

  • 问题内容: 到处寻找它,找到答案却迷失了。有谁知道如何从另一个js文件加载外部.js文件? innerHTML可以工作,并且可以粘贴响应文本。问题在于JS无法在该文档中工作。jQuery.getScript应该正在加载该外部js文件,但不会加载 问题答案: 这是您将外部js文件加载到Jquery的方法