Spring boot 如何使用SpringBootJarLauncher的自定义子类?

Spring boot 如何使用SpringBootJarLauncher的自定义子类?,spring-boot,gradle,spring-boot-gradle-plugin,Spring Boot,Gradle,Spring Boot Gradle Plugin,我有一种情况,我所需要的一个依赖项jar中还嵌入了一个旧版本的依赖项(uber-jar样式) 遗憾的是,嵌入式依赖项与其他一些依赖项不兼容 我使用自定义版本的com.springframework.boot.loader.JarLauncher想出了一个策略,在这里,我可以通过重写postProcessClassPathArchives方法来操作类路径中jar文件的顺序 这个策略是基于,但在我的例子中,不是确保classes文件夹首先出现在类路径中,而是首先推送不兼容嵌入式类的兼容版本 引用的博

我有一种情况,我所需要的一个依赖项jar中还嵌入了一个旧版本的依赖项(uber-jar样式)

遗憾的是,嵌入式依赖项与其他一些依赖项不兼容

我使用自定义版本的
com.springframework.boot.loader.JarLauncher
想出了一个策略,在这里,我可以通过重写
postProcessClassPathArchives
方法来操作类路径中jar文件的顺序

这个策略是基于,但在我的例子中,不是确保
classes
文件夹首先出现在类路径中,而是首先推送不兼容嵌入式类的兼容版本

引用的博客文章将
JarLauncher
的子类放在项目本身中,但在我的例子中,这种情况会发生在多个项目中,因此我想将
JarLauncher
的自定义子类分解到它自己的项目中,并通过一些适当的maven存储库将其作为一个独特的依赖项提供

这篇博文还使用gradle
copySpec
将自定义启动程序类从
${buildDir}/classes
复制到spring引导jar的根目录中,以便负责加载清单中作为
主类调用的类的类加载器可以访问它

所以,我的问题是关于实现类似结果的选项,但是使用嵌入在依赖项jar中的自定义启动器

我想知道是否可以从位于启动jar根目录下的jar文件中引用自定义启动器,或者是否需要提取内容并将离散类移动到那里

不管怎样,我只熟悉gradle的基础知识,不知道如何通过gradle技术实现这两种选择


感谢您的指导

经过一些研究和修补,我想出了以下解决方案:

configurations {
  bootHelpr { transitive = false }
}

dependencies {
  //...
  bootHelpr 'com.github.the-watchmen:boot-helpr:1.0.0'
}

bootJar {
  with copySpec {
    from(zipTree(configurations.bootHelpr.singleFile))
  }
}
其中
boot helpr
是包含自定义
JarLauncher
的依赖项

我认为自己是个新手,所以可以自由地发表更多的惯用解决方案;p>