使用gradle有条件地将bean添加到spring项目

问题描述 投票:0回答:1

我正在尝试想办法在我的 Spring boot 项目中有条件地添加(或增强)行为。用例是这样的:当为特定客户构建项目时,他们有自定义功能需求。我不希望(未使用的)自定义功能类文件存在于其他客户的部署中,因此我正在考虑一个使用 gradle 构建参数来包含自定义功能模块的多模块项目。但是,我认为存在循环依赖问题,其中自定义功能依赖于主项目中的组件 - 但为了在构建中包含自定义功能,主项目必须依赖于自定义模块。我尝试将模块包含在父 gradle.settings 中,让模块依赖于主项目,然后使用与主项目中存在的相同的包名称和结构,希望类路径扫描能够拾取该类并创建 bean - 但似乎除非我的主项目依赖于自定义代码,否则它似乎不想工作。

是否有一些我错过的简单的事情或者更好的方法来完成我想做的事情? 问候

java spring gradle dependencies multi-module
1个回答
0
投票

您是否使用由

bootJar
任务创建的 Springboot“fat-jar”来部署应用程序?如果是这样,一种解决方案是有条件地将功能模块库包含在此 Springboot jar 中的预期位置(在
BOOT-INF/lib
下,主项目中的所有其他依赖库都将位于该位置)。 这样,您的功能模块库将在应用程序启动时被扫描,并且您的自定义bean将被找到(如果您尊重您提到的包命名)。

可用于配置 Spring jar 内容的示例配置:

if (project.hasProperty("feature-a")) {
    project(":feature-a").afterEvaluate { featureAproject->
        bootJar {
            into("BOOT-INF/lib") {
                // note: there might be other ways to reference the output jar from subproject                
                from(featureAproject.tasks.getByName("jar").outputs)

                // TODO : create task dependency between bootJar task and the 'jar' task from feature subproject
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.