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

java - springboot启动时加载外部jar?

郏正信
2024-02-08

现有一个springboot项目,通过扫描二维码查询信息,比如一棵树,扫描二维码后可以看到他相关的信息。但这个项目不止有树类型,还有道路,某个物品。所以将项目分模块开发,核心模块作为一个jar包,复制提供基础服务如数据导入导出。各类型构建成单独的jar。部署时需要那种类型就加载对应的jar。这样做是为了满足不同客户需求。
尝试:

  1. java -Xbootclasspath/a:file:./libs -jar main.jar,运行后并没有加载libs中的jar
  2. java -Djava.ext.dirs=file:./libs -jar main.jar,启动异常

    错误: 找不到或无法加载主类 .ext.dirs=file:..libs原因: java.lang.ClassNotFoundException: /ext/dirs=file://libs
  3. java -Dloader.path=file:./libs -jar main.jar 与第2种一样错误

请问需要使用什么方式才能在启动时同时加载外部jar呢?

共有2个答案

晏永康
2024-02-08

这个需要你实现一套插件加载机制。下面是我写的一个示例项目:

https://github.com/yiding-he/spring-boot-plugin-demo

这是一个在 Spring Boot 项目中实现插件机制的例子。其中包含三个模块:

  • plugin-api:插件接口
  • plugin-sample:插件实现
  • main-service: 使用插件的主服务

其中 main-service 和 plugin-sample 都依赖 plugin-api 模块。

这个插件机制的特点在于:

  1. 插件独立开发打包,不依赖主服务的代码;
  2. 插件的加载使用单独的类加载器,避免插件和主服务之间相互依赖;
  3. 插件加载后自动被纳入 Spring IoC 容器管,并可以使用容器提供的各种环境;

运行方法:

  1. 首先对整个项目执行 mvn package,生成的插件包会输出到 plugins 目录下;
  2. 运行 main-service 项目,启动后会自动加载插件包并执行对应的逻辑;
周志文
2024-02-08
java -classpath './libs*:main.jar' org.springframework.boot.loader.launch.JarLauncher# orjava -cp './libs*:main.jar' org.springframework.boot.loader.launch.JarLauncher

使用 -jar 启动时,-cp 会被忽略。

因此只能将运行 jar 也放入 -cp 中,再使用 main 类启动。

spring boot 的 main 类,打包成 jar 时,会变为 org.springframework.boot.loader.launch.JarLauncher

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

  • 问题内容: 我已经用Java编写了Thrift服务器来利用特定的Java包/库,但是我不是Java程序员。 问题是; 我看到对服务器的第一个RPC调用超时。Subsequest请求的执行没有任何问题,它仅影响以某些(但必不可少)语言编写的客户端。 我当前的想法是服务器在响应上超时,因为在第一次调用时,服务器必须加载请求所需的所有库。一些Thrift客户端实现必须比其他实现更好地处理超时,这可能会使

  • 我们有一个对外部JAR具有运行时依赖性的应用程序(例如,在Spring boot中运行的Talend作业)。现在,我们可以使用-Dloader从Spring Boot启动它。路径参数。然而,我们无法使用外部lib文件夹运行集成测试(即从Spring Boot测试启动Talend作业)。是否有可能使用SpringBoot测试为集成测试加载外部作业?

  • 问题内容: (此问题与我所见过的许多问题相似,但大多数问题对我的工作不够具体) 背景: 我的程序的目的是使使用我的程序的人可以轻松制作自定义的“插件”,然后将其编译并加载到程序中使用(与在我的程序中实现的不完整,缓慢的解析器相比)。我的程序允许用户将代码输入到预定义的类中,从而扩展了与我的程序一起打包的已编译类。他们将代码输入到文本窗格中,然后我的程序将代码复制到被覆盖的方法中。然后,将其保存为(

  • 本文向大家介绍SpringBoot内部外部配置文件加载顺序解析,包括了SpringBoot内部外部配置文件加载顺序解析的使用技巧和注意事项,需要的朋友参考一下 内部配置加载顺序 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件 –file:./config/ –file:./ –cl

  • 我正在用Hubot框架开发一个应用程序,使用Heroku。我在Heroku上设置了一些配置变量,当我部署代码时,我的引用可以正常工作。