Как определить версию зависимости только один раз для всего многомодульного проекта Gradle? - PullRequest
1 голос
/ 28 февраля 2020

Я принял решение перейти с Плагин управления зависимостями на Поддержка импорта встроенной спецификации Gradle . Так как Встроенная поддержка импорта Gradle имеет лучшую производительность Но

Я столкнулся с проблемой:

Я не могу найти альтернативы для зависимостей и dependencySet в родном Gradle:

    dependencyManagement {
        dependencies {
            dependency("org.springframework:spring-core:4.0.3.RELEASE")
        }
    }
//or
    dependencyManagement {
         dependencies {
              dependencySet(group:'org.slf4j', version: '1.7.7') {
                   entry 'slf4j-api'
                   entry 'slf4j-simple'
              }
         }
    }

, и тогда я смогу использовать зависимости без версии

dependencies {
    compile 'org.springframework:spring-core'
}

Как можно Я получаю такое же поведение в наивном Gradle ? Я имею в виду: я хотел бы определить версию один раз , как я это делал при использовании Плагин управления зависимостями

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы можете сделать это в файле gradle.properties. Т.е.:

# APPLICATION PROPERTIES
name=projectName
group=com.domain
version=1.0.0
description=A brief description

gradleScripts=https://raw.githubusercontent.com/hexagonkt/hexagon/1.2.0/gradle

# DEPENDENCIES VERSIONS
kotlinVersion=1.3.61
kotlinCoroutinesVersion=1.3.2

Или в settings.gradle, если вы не хотите создавать другой файл:


rootProject.name = "hexagon-contact-application"

gradle.rootProject {

    allprojects {
        version = "1.0.0"
        group = "org.hexagonkt"
        description = "Contact application backend api"
    }

    extensions.gradleScripts = "https://raw.githubusercontent.com/hexagonkt/hexagon/1.0.18/gradle"

    extensions.kotlinVersion = "1.3.50"
    extensions.kotlinCoroutinesVersion = "1.3.2"

    extensions.hexagonVersion = "1.0.21"

    extensions.logbackVersion = "1.2.3"
    extensions.bcryptVersion="0.8.0"
    extensions.javaJwtVersion="3.8.2"
}

И если вы хотите избежать добавления переменной версии ко всем связанным зависимостям Вы можете создать метод в файле сборки:

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.50'
}

apply from: "$gradleScripts/kotlin.gradle"
apply from: "$gradleScripts/service.gradle"
apply from: "$gradleScripts/junit.gradle"

defaultTasks("test")

mainClassName = 'com.hexagonkt.contact.ApplicationKt'
applicationDefaultJvmArgs = ["-Xms64M", "-Xmx2G", "-XX:+UseNUMA", "-XX:+UseParallelGC"]

dependencies {
    httpkt(it, "http_server_jetty")
    httpkt(it, "store_mongodb")
    httpkt(it, "hexagon_web")

    implementation("at.favre.lib:bcrypt:$bcryptVersion")
    implementation("com.auth0:java-jwt:$javaJwtVersion")

    testImplementation("com.hexagonkt:port_http_client:$hexagonVersion")
}

private void httpkt(final def dependencies, final String artifact) {
    dependencies.implementation("com.hexagonkt:$artifact:$hexagonVersion")
}
1 голос
/ 28 февраля 2020

Решение ниже помогает избежать версий copy-paste. Однако это не то же самое с плагином управления зависимостями.

Для Gradle Kotlin Dsl:

Вы можете создать buildSrc с вашим собственным кодом, когда вы Можно разместить любые константы.

Алгоритм:

  1. Создать папку buildSrc/src/main/kotlin
  2. Создать файл buildSrc/src/main/kotlin/Versions.kt с содержимым:
object Versions {
    const val junitVersion = "5.5.5" // just example
}
Создать файл buildSrc/build.gradle.kts с содержанием:
plugins {
    `kotlin-dsl`
}
Используйте следующий синтаксис в файлах gradle.kts:
dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:${Versions.junitVersion}")
}

Для Gradle Groovy:

  1. Создать файл gradle.properties
  2. Поместите туда версии с синтаксисом вроде okhttp_version=4.2.0
  3. Используйте следующий синтаксис в ваших файлах Gradle:
dependencies {
    compile group: 'com.squareup.okhttp3', name: 'okhttp', version: okhttp_version
}
...