在groovy脚本中,我可以将数组中的依赖项列表指定为"implementation libraries.frameworkLibs",kotlin中是否存在类似的方法?
目标是在数组中有一个依赖项列表,这样每个列表都可以在子项目中单独分配。
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
}
}发布于 2019-05-08 16:22:56
您可以将依赖关系映射更改为:
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"
)
)
}然后在您的依赖项块中,它需要是:
libraries["frameworkLibs"]?.forEach { s -> implementation(s) }您可以将扩展方法作为buildSrc脚本的一部分添加到项目中,以隐藏此forEach以使依赖关系正常工作……
发布于 2019-05-08 15:56:17
您可以创建一个变量来存储依赖项,然后在allprojects或subprojects块中可以引用该数组。例如,您可以定义一个类来存储不同类型的依赖项(例如,每个依赖项都是字符串数组),创建该类的一个实例并填充它,在变量中存储对该实例的引用,然后使用该变量的值来分配依赖项,如下所示:
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) }我似乎找不到一种方法将依赖项数组传递给implementation或runtimeOnly等方法,因此我循环它们并逐个添加每个依赖项。如果有一种方法可以在一行中传递数组,希望其他人能告诉我们怎么做。
发布于 2019-05-09 02:47:00
谢谢tim_yates和Yoni Gibbs。下面的实现解决了我的问题。
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) }
}
}https://stackoverflow.com/questions/56034519
复制相似问题