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