наследование gradle в многомодульном проекте - PullRequest
0 голосов
/ 30 мая 2018
update 05/30/18

Я думаю, что техническая проблема связана с вопросом, с которым связан ToYonos.

Итак, позвольте мне расширить нетехнический вопрос:

У меня есть мультимодульпроект с множеством частей, принадлежащих разным людям.Мы следуем аналогичным структурам внутри модулей, но прямого наследования нет.Допустим, что-то вроде:

  • module1 /
    • Java /
      • services /
        • service1 /
      • common /
        • library1 /
  • module2 /
    • java /

Каждый модуль свободно делает то же самое, но немного отличается;) Мы хотим вытащить общие части на каждом слое и поместить их в общий файл, но при этом позволить каждому модулю иметь собственные настройки на каждом слое.

Я надеялся, что «применить из» может это сделать, ноКажется, что есть ограничения (методы экспорта, плагины и т. д.), все из-за проблем с областями видимости и стиля команд и управления gradle сверху вниз.

Единственный выход, который я вижу, - это полное извлечение settings.gradleиз этого:

include ':module1'
include ':module1:java'
include ':module1:java:services'
include ':module1:java:services:service1'

Для этого:

include ':root_common'
project(':root_common').projectDir = "$rootDir/common" as File

include ':root_common:module1'
project(':root_common:module1').projectDir = "$rootDir/module1" as File

include ':root_common:module1:module_common'
project(':root_common:module1:module_common').projectDir = "$rootDir/common/module" as File

include ':root_common:module1:module_common:java'
project(':root_common:module1:module_common:java').projectDir = "$rootDir/module1/java" as File

include ':root_common:module1:module_common:java:java_common'
project(':root_common:module1:module_common:java:java_common').projectDir = "$rootDir/common/java" as File

include ':root_common:module1:module_common:java:java_common:services'
project(':root_common:module1:module_common:java:java_common:services').projectDir = "$rootDir/module1/java/services" as File

.... and so on ....

Это кажется довольно неуправляемым.Есть ли лучший способ?

original 05/29/18

У меня работает следующее:

Мой build.gradle :

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    ext {
        dockerPluginVersion = '0.19.2'
    }
    dependencies {
        classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:${dockerPluginVersion}"
    }
}

apply plugin: "com.palantir.docker"
apply plugin: "com.palantir.docker-run"

docker {
    ....
}

Я хочу build.gradle других людей, чтобы иметь возможность использовать ту же конфигурацию, что и в приведенном выше build.gradle без копирования / вставки, поэтому я придумал следующее:

Другой человек build.gradle :

apply from: ${rootDir}/common/docker/build.gradle

Когда я запускаю вышеупомянутое, я получаю

* What went wrong:
A problem occurred evaluating script.
> Plugin with id 'com.palantir.docker' not found.

Если я копирую / вставляю только buildscript часть My build.gradle в их build.gradle , тогда он работает.Итак, должна быть проблема с разрешением / упорядочением.

Я думаю, что основной вопрос: как мне применить и настроить плагин из build.gradle , который сам по себе рассматривается какПлагин через применяется от ?

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