как объявить версию зависимости в одном месте для многих gradle проектов - PullRequest
1 голос
/ 24 июня 2019

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

В maven я имел обыкновение объявлять версии всех зависимостей в одном родительском проекте pom или шаблоне pom и включать только зависимости в проекты, которые требовали их без версий. Это позволило легко обновить зависимости в одном месте. Есть ли простой способ сделать это в Gradle?

Пример псевдокода:

master_template / build.gradle

    dependencies {
        joda-time:joda-time:2.9.1
        cglib:cglib:3.2.9
        javax.servlet:javax.servlet-api:3.1.0
    }

SERVICE_A / build.gradle

    parent: master_template
    dependencies {
        joda-time:joda-time
        javax.servlet:javax.servlet-api
    }

SERVICE_B / build.gradle

    parent: master_template
    dependencies {
        cglib:cglib
        javax.servlet:javax.servlet-api
    }

Ответы [ 2 ]

3 голосов
/ 24 июня 2019

Вы можете создать многомодульный проект , как если бы вы работали в maven с родительским pom.

Чтобы управлять зависимостями в родительском элементе, я использую пружину плагин управления зависимостями .

Ваш родительский build.gradle будет выглядеть так:

subprojects {
    apply plugin: "io.spring.dependency-management"

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    check.dependsOn dependencyCheckAggregate

    repositories {
        mavenLocal()
        jcenter()
        // other repos
    }

    dependencyManagement {

        def jacksonVersion = "2.+"

        dependencies {
            dependency "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion"
            dependency "com.fasterxml.jackson.core:jackson-core:$jacksonVersion"
            dependency "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
            dependency "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion"
            dependency "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:$jacksonVersion"
        }
    }
}

Теперь вы можете добавлять зависимости в свои подмодули, не указывая версию.

0 голосов
/ 24 июня 2019

Вы можете легко достичь желаемого, используя значение по умолчанию Gradle apply from: 'other.gradle', поэтому никаких дополнительных плагинов не требуется.

В моем проекте микросервиса я использую что-то вроде этого:

общего Gradle / env.gradle

apply plugin:'groovy'

ext.compile = [ 'joda-time:joda-time:2.9.1', 'cglib:cglib:3.2.9` ]
ext.testCompile = [ 'org.spockframework:spock-core:1.3-groovy-2.5' ]

общего Gradle / dependencies.gradle

dependencies {
  compile ext.compile
  testCompile ext.testCompile
}

И использование

SERVICE_A / build.gradle

apply from:'../common-gradle/env.gradle'

ext.compile << 'ch.qos.logback:logback-classic:1.2.3'

apply from:'../common-gradle/dependencies.gradle'

Таким образом, каждый из моих build.gradle файлов содержит только 3-5 строк критической информации, такой как название проекта и версия.

Вам не нужно импортировать common-gradle как проект в вашей IDE, вы можете просто использовать символические ссылки, чтобы избежать использования внешних ссылок. Кроме того, во время сборки на конвейере, подобном Jenkins, единственное, что вам нужно сделать, это проверить репо common-gradle в вашем рабочем каталоге.

...