创建了一个自定义的Spring启动layoutFactory,现在无法启动我的spring启动应用程序

时间:2017-03-01 20:28:10

标签: java gradle spring-boot

这是我得到的错误 -

Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

如果我取出layoutFactory选项,我就可以启动启动应用程序。

build.gradle我有

springBoot  {
    mainClass = "com.mycompany.Application"
    layoutFactory = new CustomLayoutFactory()

}

class CustomLayoutFactory implements LayoutFactory {

    @Override
    Layout getLayout(File source) {
        if (source?.getName().toLowerCase().endsWith('.jar')) {
            return new Layouts.Jar() {
                @Override
                public String getLibraryDestination(String libraryName, LibraryScope scope) {
                    return "lib/";
                }

                @Override
                public String getRepackagedClassesLocation() {
                    return "";
                }
            };
        }

        return Layouts.forFile(source);
    }

1 个答案:

答案 0 :(得分:1)

您正在使用自定义jar布局,在lib而不是BOOT-INF/lib中打包嵌套的jar,但据我所知,您仍在使用Spring Boot的JarLauncher来自Spring Boot的默认加载器,期望在BOOT-INF/lib中找到jar。

您需要实现CustomLoaderLayout并在jar的根目录中提供您自己的加载器类,这些类知道要查看lib而不是BOOT-INF/lib