在Spring Boot中构建分层jar时,如何在一个层中包含多模块项目jar?

时间:2020-09-06 10:32:17

标签: spring-boot spring-boot-gradle-plugin

根据Spring Boot gradle plugin reference,我应该能够将jar的特定模式打包到特定层中(以制作更好的docker文件)。

我对文档中使用的模式匹配感到困惑。这是一个示例:

tasks.getByName<BootJar>("bootJar") {
    layered {
        isIncludeLayerTools = true
        application {
            intoLayer("spring-boot-loader") {
                include("org/springframework/boot/loader/**")
            }
            intoLayer("application")
        }
        dependencies {

            intoLayer("module-dependencies") {
                include("com*:*:*")
            }

            intoLayer("dependencies")
        }
        layerOrder = listOf("dependencies", "spring-boot-loader", "module-dependencies", "application")
    }
}

我不了解的是此模式匹配在以下条件上进行匹配:

intoLayer(“模块依赖性”){ include(“ com *:”) }

它是罐子的组,工件和版本吗?是罐子的名字吗?

如果我有一个包含模块aa,ab和ac的多模块项目,分别相当于aa.jar,ab.jar和ac.jar和一个外部依赖项org.something:anartifact:25等同于anartifact-25。 jar我需要添加什么模式以在一层中包含aa,ab和ac,在另一层中包含其他所有依赖项?

1 个答案:

答案 0 :(得分:3)

对于模块依赖性,模式为<group>:<artifactid>:<version>。您可以使用尾部通配符来匹配项的子集,或者完全省略项以匹配所有项。例如,com.fasterxml.jackson::将匹配com.fasterxml.jackson组中的所有工件和所有版本。

对于多模块项目,默认情况下,artifactid是项目的名称,group是{{ 1}}。

通常在根项目的group文件中定义组,例如:

build.gradle

然后,您可以在应用程序模块中如下定义层模式:

build.gradle

我已将示例上传到https://github.com/philwebb/mutli-module-layered-gradle-example,该示例在完整的项目中进行了显示。