我使用的是Gradle 5.5,我有一个基于Groovy的构建脚本,我正试图将其迁移到Kotlin DSL。jar
任务包含将所有依赖项复制到jar文件的典型行:
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
我找不到一种方法来把这一行翻译成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) } }
}
这是我基于静态编程语言的构建脚本。它运行良好,除了一行:
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")
}
// ?
}
这是马克西姆·科斯特罗明的一个很好的例子
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)
}
}
groovy中的Collection()
是静态编程语言中的map()
。
在Kotlin中,groovy的三元运算符可以转换为< code>if。
主要区别在于,Kotlin 中的 configurations.compile 不是 Configuration
,而是提供程序。
from(configurations.compileClasspath.get().map { if (it.isDirectory()) it else zipTree(it) })
或
from(configurations.compileClasspath.map { config -> config.map { if (it.isDirectory) it else zipTree(it) } })
请注意,< code>compile
现在已经被弃用很长时间了。因为现在使用< code>implementation来声明您的依赖项,所以编译配置中不再有任何东西,您必须从< code>compileClasspath中获取依赖项来构建您的uber jar。
我对如何使用Gradle制作胖罐做了很多研究。但是,我无法弄清楚如何使用Kotlin DSL和插件。我有这个代码: 但是我不知道如何为胖罐子清单指定主类。我遵循的教程是这样做的: 但这是Groovy DSL,而不是Kotlin DSL,我还不太熟悉Kotlin的DSL,所以我不知道如何将其转换为Kotlin DSL。非常感谢你的帮助。
我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。提议的解决办法: 这是一个好的解决方案,还是不可避免地会创建一个对象?我应该使用哪种图案?
为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D
我试图在基于静态编程语言的gradle文件中使用以下内容构建一个胖罐子。 但是,胖罐扩展了所有依赖项。我希望将jars按原样包含在/lib目录中,但我无法弄清楚如何实现这一点。 谁能给我一些建议,告诉我如何才能做到这一点? 谢啦
我有一个注释要求是编译时常量。我从下面的中获取: 我的s如下: 当我使用注解Kotlin需要是编译时常量。 注释实现本身: 我仔细研究了类似的问题,但没有找到解决方法。我还找到了一篇与这个主题相关的文章,但到目前为止没有任何效果。 附带说明:我不能更改注释,因为它来自库,我也不能更改库。 总而言之,有没有办法从静态编程语言中的编译时常量到注释中使用?
我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?