用不同的Spring Boot插件Gradle多个子项目

时间:2018-11-19 19:42:16

标签: java spring spring-boot gradle

我有多个项目构建结构,并且Spring Boot从父级应用到所有子项目。这是父级 build.gradle

create_container

在多个子项目中,我只需要将一个子项目升级到Spring Boot 2版本。怎么做?

1 个答案:

答案 0 :(得分:0)

这很简单,只需直接在子项目中声明使用插件的位置即可。顺便说一句,请考虑使用new plugins DSL而不是apply。看看我为您创建的demo project。这是最有趣的部分:

settings.gradle

rootProject.name = "so53381565"

enableFeaturePreview("IMPROVED_POM_SUPPORT")

include(":a")
include(":b")
include(":c")

build.gradle

subprojects {
    apply plugin: "java"

    repositories {
        jcenter()
    }
}

wrapper {
    gradleVersion = "4.10.2"
    distributionType = Wrapper.DistributionType.ALL
}

a / build.gradle

plugins {
    id "org.springframework.boot" version "1.5.8.RELEASE"
}

dependencies {
    implementation "org.springframework.boot:spring-boot-starter"
}

b / build.gradle

plugins {
    id "org.springframework.boot" version "1.5.17.RELEASE"
}

dependencies {
    implementation "org.springframework.boot:spring-boot-starter"
}

c / build.gradle

plugins {
    id "org.springframework.boot" version "2.0.6.RELEASE"
}

dependencies {
    implementation "org.springframework.boot:spring-boot-dependencies:2.0.6.RELEASE"
    implementation "org.springframework.boot:spring-boot-starter"
}

App.java

@SpringBootApplication
public class App implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(SpringVersion.getVersion());
    }
}

App.java在所有三个子项目中都相同。执行./gradlew clean :a:bootRun :b:bootRun :c:bootRun将输出如下内容:

…
4.3.12.RELEASE
…
4.3.20.RELEASE
…
5.0.10.RELEASE
…

如您所见,您正在三个不同的子项目中使用三个不同的Spring。


编辑

首先,您仍然可以使用apply,只需将它们放在子项目中即可。

第二,您可以对自己的存储库和依赖项使用plugins,即使没有在Gradle的插件存储库by adding pluginManagementsettings.gradle块中发布的存储库和依赖项中也是如此(这是我项目中的Kotlin DSL):

pluginManagement {
    repositories {
        gradlePluginPortal()
        add(jcenter())
        add(maven("http://my.jfrog.io"))

    }

    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "by.dev.madhead.some-plugin") {
                useModule("by.dev.madhead:some-gradle-plugin:${requested.version}")
            }
        }
    }
}

现在,我可以在整个项目的by.dev.madhead.some-plugin DSL中使用plugins

plugins {
    id("by.dev.madhead.some-plugin").version("42")
}

它将被by.dev.madhead:some-gradle-plugin:42

代替