Gradle множественный подпроект с другим плагином весенней загрузки

У меня есть структура сборки с несколькими проектами, и весенняя загрузка применяется от родителя ко всем подпроектам. Вот родительский 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'
..
..
..
}
}

Среди множества подпроектов у меня есть требование обновить только подпроект один до версии Spring boot 2. Как это сделать?

Вы можете опубликовать, где вы управляете своей версией, я имею в виду ext {}

stacker 19.11.2018 20:48

возможно, вы сможете найти ответ или идеи из этого вопроса на форуме gradle: обсуждение.gradle.org/t/…

M.Ricciuti 19.11.2018 21:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
1 846
1

Ответы 1

Это довольно просто, просто объявите плагины напрямую в подпроектах, где они используются. Кстати, подумайте об использовании новый 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"
}

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
…

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


РЕДАКТИРОВАТЬ

Во-первых, вы все еще можете использовать 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

Это здорово, но я включил плагин старого стиля в том, что я должен определить свои собственные серверы нексуса, а не общедоступный, если вы заметили. Есть ли способ определить такие прокси-серверы в новом плагине DSL?

cosmos 21.11.2018 13:20

Другие вопросы по теме