在弹簧靴中装入外部罐子

时间:2018-03-21 10:28:55

标签: java spring spring-boot

我们如何在运行时加载额外的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文件中是不可行的。

2 个答案:

答案 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类。