Dan*_*olf 7 java gradle kotlin
我正在使用 Gradle 5.5。我有一个基于 Groovy 的构建脚本,我正在尝试将其迁移到 Kotlin DSL。该jar任务包含用于将所有依赖项复制到 JAR 文件的典型行:
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
Run Code Online (Sandbox Code Playgroud)
我找不到将这一行转换为 Kotlin DSL 的方法。
让我给你一些背景。这是我最初的基于 Groovy 的构建脚本:
plugins {
id "org.jetbrains.kotlin.jvm" version "1.3.41"
}
group = "com.rhubarb_lip_sync"
version = "1.0.0"
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile "com.beust:klaxon:5.0.1"
compile "org.apache.commons:commons-lang3:3.9"
compile "no.tornado:tornadofx:1.7.19"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
jar {
manifest {
attributes "Main-Class": "com.rhubarb_lip_sync.rhubarb_for_spine.MainKt"
}
// This line of code recursively collects and copies all of a project"s files
// and adds them to the JAR itself. One can extend this task, to skip certain
// files or particular types at will
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
Run Code Online (Sandbox Code Playgroud)
这是我基于 Kotlin 的构建脚本。它工作正常,除了那一行:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.3.41"
}
group = "com.rhubarb_lip_sync"
version = "1.0.0"
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation("com.beust:klaxon:5.0.1")
implementation("org.apache.commons:commons-lang3:3.9")
implementation("no.tornado:tornadofx:1.7.19")
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
tasks.withType<Jar> {
manifest {
attributes("Main-Class" to "com.rhubarb_lip_sync.rhubarb_for_spine.MainKt")
}
// ?
}
Run Code Online (Sandbox Code Playgroud)
JB *_*zet 11
collect()在 groovy 中是map()在 Kotlin 中。
groovy 的三元运算符if在 Kotlin 中可以转化为 an 。
主要区别在于 Kotlin 中的configuration.compile 不是aConfiguration而是a Provider<Configuration>。因此,要么您get将配置从 Provider 中删除,要么通过map将 Provider ping 到另一个 Provider 来保持懒惰。所以我认为它应该工作
from(configurations.compileClasspath.get().map { if (it.isDirectory()) it else zipTree(it) })
Run Code Online (Sandbox Code Playgroud)
或者
from(configurations.compileClasspath.map { config -> config.map { if (it.isDirectory) it else zipTree(it) } })
Run Code Online (Sandbox Code Playgroud)
请注意,compile现在已经弃用了很长时间。由于使用implementationnow 来声明您的依赖项,因此编译配置中不再有任何内容,您必须从其中获取依赖项 compileClasspath以构建您的 uber jar。
这是Maksim Kostromin的一个很棒的样本
val mainClass = "com.myproject" // Replace this, your project main name
tasks {
register("fatJar", Jar::class.java) {
archiveClassifier.set("all")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes("Main-Class" to mainClass)
}
from(configurations.runtimeClasspath.get()
.onEach { println("add from dependencies: ${it.name}") }
.map { if (it.isDirectory) it else zipTree(it) })
val sourcesMain = sourceSets.main.get()
sourcesMain.allSource.forEach { println("add from sources: ${it.name}") }
from(sourcesMain.output)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2718 次 |
| 最近记录: |