Gradle несколько подпроектов с другим плагином загрузки весной - PullRequest
0 голосов
/ 19 ноября 2018

У меня многопроектная структура сборки, и весенняя загрузка применяется от родителя ко всем подпроектам. Вот родитель build.gradle

buildscript {
  repositories {
    maven {
            url 'http://someurl.com/repository/MavenRepositoryGroup/'
        }
  }

  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE"
  }
}


subprojects  {

    apply plugin: 'java'
    apply plugin: 'maven'
    apply plugin: 'eclipse'
    apply plugin: 'war'
    apply plugin: 'org.springframework.boot'
..
..
..
}
}

Среди нескольких подпроектов у меня есть требование обновить только один подпроект до версии с начальной загрузкой 2. Как это сделать?

1 Ответ

0 голосов
/ 21 ноября 2018

Это довольно просто, просто объявите плагины непосредственно в подпроектах, где они используются. Кстати, рассмотрите возможность использования new plugins DSL вместо apply. Взгляните на демонстрационный проект , который я создал для вас. Вот самые интересные детали:

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
}

а / build.gradle

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

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

б / build.gradle

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

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

с / 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
…

Как видите, вы используете три разных источника в трех разных подпроектах.


EDIT

Прежде всего, вы все еще можете использовать apply, просто поместите их в подпроекты.

Во-вторых, вы можете использовать plugins со своими собственными репозиториями и зависимостями, даже с теми, которые не опубликованы в репозитории плагинов Gradle , добавив блок pluginManagement в settings.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 в plugins DSL для всего проекта:

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

И он будет заменен на by.dev.madhead:some-gradle-plugin:42

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...