我们如何在运行时加载额外的jar以及boot jar。
主要jar :Main
。jar
其他jar :Support
。jar
Main
项目是一个gradle启动项目。
Support
项目不是一个gradle项目,但是它被赋予了对所需jar的编译时依赖性。
支持项目的内容:
@RestController
@RequestMapping("/test")
public class CustomService implements WebMvcConfigurer {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public @ResponseBody String get() {
return "Done!!";
}
}
我尝试了什么:
java -cp Support.jar:Main.jar -Dloader.path=Support.jar -Xbootclasspath/p:alpn-boot-8.1.11.v20170118.jar -Dloader.main=com.abc.app.MyApplication org.springframework.boot.loader.PropertiesLauncher
启动正常,但端点未注册。
注意: 我曾提到过注释扫描。
@SpringBootApplication
@ComponentScan("com.abc")
public class MyApplication {
....
}
此外,Main.jar将由各种用户从各个地方运行。每个用户可能会提供自己的Support.jar版本。因此,将依赖项硬编码到Main项目的gradle文件中是不可行的。
答案 0 :(得分:0)
尝试将@ComponentScan(basePackages=full.name.of.customservice.package
添加到您的Spring应用程序配置中,或者使CustomService
与您的@SpringApplication
类相同的包
答案 1 :(得分:0)
尝试使用它-https://github.com/kamranzafar/JCL中的org.xeustechnologies.jcl.JarClassLoader
JCL是可配置,动态和可扩展的自定义类加载器,可直接从Jar文件和其他来源加载Java类。