首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将groovy中的集中化依赖数组转换为kotlin?

如何将groovy中的集中化依赖数组转换为kotlin?
EN

Stack Overflow用户
提问于 2019-05-08 14:10:17
回答 3查看 298关注 0票数 0

在groovy脚本中,我可以将数组中的依赖项列表指定为"implementation libraries.frameworkLibs",kotlin中是否存在类似的方法?

目标是在数组中有一个依赖项列表,这样每个列表都可以在子项目中单独分配。

代码语言:javascript
复制
plugins {
    id 'org.springframework.boot' version '2.1.4.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

sourceCompatibility = '1.8'

/* 1. centerilize dependencies for all projects */
ext.libraries = [
    frameworkLibs: [
        'org.springframework.boot:spring-boot-starter-data-redis',
        'org.springframework.boot:spring-boot-starter-web',
        'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1',
        'org.springframework.kafka:spring-kafka'
    ],
    testLibs: [
        'org.springframework.boot:spring-boot-starter-test',
        'org.springframework.kafka:spring-kafka-test'
    ],
    sqlLibs: [
        'org.postgresql:postgresql'
    ]
]

allprojects {
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'

    repositories {
        mavenCentral()
    }

    dependencies {
        /* 2. establish dependencies */
        implementation libraries.frameworkLibs
        runtimeOnly libraries.sqlLibs
        testImplementation libraries.testLibs
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-08 16:22:56

您可以将依赖关系映射更改为:

代码语言:javascript
复制
val libraries by extra {
    mapOf(
            "frameworkLibs" to listOf(
                    "org.springframework.boot:spring-boot-starter-data-redis",
                    "org.springframework.boot:spring-boot-starter-web",
                    "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1",
                    "org.springframework.kafka:spring-kafka"
            )
    )
}

然后在您的依赖项块中,它需要是:

代码语言:javascript
复制
    libraries["frameworkLibs"]?.forEach { s -> implementation(s) }

您可以将扩展方法作为buildSrc脚本的一部分添加到项目中,以隐藏此forEach以使依赖关系正常工作……

票数 2
EN

Stack Overflow用户

发布于 2019-05-08 15:56:17

您可以创建一个变量来存储依赖项,然后在allprojectssubprojects块中可以引用该数组。例如,您可以定义一个类来存储不同类型的依赖项(例如,每个依赖项都是字符串数组),创建该类的一个实例并填充它,在变量中存储对该实例的引用,然后使用该变量的值来分配依赖项,如下所示:

代码语言:javascript
复制
class Libraries(val frameworkLibs: Array<String>, val testLibs: Array<String>, val sqlLibs: Array<String>)

val libraries = Libraries(
    arrayOf(
        "org.springframework.boot:spring-boot-starter-data-redis",
        "org.springframework.boot:spring-boot-starter-web",
        "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1",
        "org.springframework.kafka:spring-kafka"
    ),
    arrayOf(
        "org.springframework.boot:spring-boot-starter-test",
        "org.springframework.kafka:spring-kafka-test"
    ),
    arrayOf("org.postgresql:postgresql")
)

allprojects {
    dependencies {
        libraries.frameworkLibs.forEach { implementation(it) }
        libraries.sqlLibs.forEach { runtimeOnly(it) }
        libraries.testLibs.forEach { testImplementation(it) }

我似乎找不到一种方法将依赖项数组传递给implementationruntimeOnly等方法,因此我循环它们并逐个添加每个依赖项。如果有一种方法可以在一行中传递数组,希望其他人能告诉我们怎么做。

票数 1
EN

Stack Overflow用户

发布于 2019-05-09 02:47:00

谢谢tim_yates和Yoni Gibbs。下面的实现解决了我的问题。

代码语言:javascript
复制
plugins {
    id("org.springframework.boot") version "2.1.4.RELEASE"
    java

    // this plugin is required for Kotlin
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

repositories {
    jcenter()
}

val libraries by extra {
    mapOf(
        "frameworkLibs" to listOf(
            "org.springframework.boot:spring-boot-starter-data-redis",
            "org.springframework.boot:spring-boot-starter-web",
            "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1",
            "org.springframework.kafka:spring-kafka"
        ),
        "testLibs" to listOf(
            "org.springframework.boot:spring-boot-starter-test",
            "org.springframework.kafka:spring-kafka-test"
        ),
        "sqlLibs" to listOf(
            "org.postgresql:postgresql"
        ),
        "testLibs" to listOf(
            "org.springframework.boot:spring-boot-starter-test",
            "org.springframework.kafka:spring-kafka-test"
        )
    )
}

allprojects {
    group = "com.example"
    version = "0.0.1-SNAPSHOT"

    dependencies {
        libraries["frameworkLibs"]?.forEach { s -> implementation(s) }
        libraries["testLibs"]?.forEach { s -> implementation(s) }
        libraries["sqlLibs"]?.forEach { s -> runtimeOnly(s) }
        libraries["testLibs"]?.forEach { s -> testImplementation(s) }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56034519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档