gpt4 book ai didi

spring-boot - 如何使用 Spring 启动的JarLauncher的自定义子类?

转载 作者:行者123 更新时间:2023-12-03 05:44:58 24 4
gpt4 key购买 nike

我遇到的情况是,我所需的依赖项jar之一中也嵌入了较旧版本的依赖项(uber-jar样式)。

可悲的是,嵌入式依赖关系与某些其他依赖关系不兼容。

我想出了使用自定义版本的com.springframework.boot.loader.JarLauncher的策略,在该策略中,我可以通过覆盖postProcessClassPathArchives方法来操纵类路径中jar文件的顺序。

此策略基于this blog post on the topic,但就我而言,不是确保classes文件夹首先出现在类路径中,而是我首先推送不兼容嵌入式类的兼容版本。

引用的博客文章将JarLauncher的子类放置在项目本身中,但是在我的情况下,这种情况将在多个项目中发生,因此我想将JarLauncher的自定义子类分解为自己的项目,并使其作为不同的依赖项提供通过一些适当的Maven存储库。

该博客文章还使用gradle copySpec将自定义启动器类从${buildDir}/classes复制到spring-boot jar的根目录中,以便负责在 list 中加载称为Main-Class的类的类加载器可以访问它。

因此,我的问题是要实现相似结果的选项,但要使用嵌入在依赖项jar中的自定义启动器。

我想知道是否可以从位于boot-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的依赖项...

我认为自己是gradle hack,所以随时发布更多惯用的解决方案;)

关于spring-boot - 如何使用 Spring 启动的JarLauncher的自定义子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50546491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com