【问题标题】:.kts script in a Gradle projectGradle 项目中的 .kts 脚本
【发布时间】:2018-10-12 17:02:55
【问题描述】:

我有一个 Kotlin Gradle 项目。

如果我创建一个 .kts 文件,它在 InteliJ 中运行,好吧 except 当它位于 /src/main/kotlin 文件夹中时。

IDEA 以红色突出显示整个文件。 Gradle 抛出编译异常。 例外是

...src/main/kotlin/test.kts: (3, 1): Cannot access script base class 'kotlin.script.templates.standard.ScriptTemplateWithArgs'. Check your module classpath for missing or conflicting dependencies`. 

有什么问题?

我的build.gradle

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.0-rc-131'
}

group 'kotlin.tutorials.coroutines'
version '1.0-SNAPSHOT'

repositories {
    maven {     url 'http://dl.bintray.com/kotlin/kotlin-eap' }
    mavenCentral()
    jcenter()
    maven { url "https://dl.bintray.com/kotlin/ktor" }
}

ext.ktor_version = '1.0.0-alpha-1'
ext.coroutines_version = '0.30.2-eap13'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile "io.ktor:ktor-server-netty:$ktor_version"
    compile "ch.qos.logback:logback-classic:1.2.3"

    //KTOR features
    compile "io.ktor:ktor-jackson:$ktor_version"
    compile "io.ktor:ktor-auth:$ktor_version"
    compile "io.ktor:ktor-auth-jwt:$ktor_version"
    compile "io.ktor:ktor-freemarker:$ktor_version"
    compile "io.ktor:ktor-html-builder:$ktor_version"
}

compileKotlin.kotlinOptions.jvmTarget = "1.8"
compileTestKotlin.kotlinOptions.jvmTarget = "1.8"

【问题讨论】:

  • 为什么要放一个 kts 文件?源文件仍然只是 kt 文件
  • 我需要一些类,我需要一些脚本来演示如何使用这些类。这就是为什么将它们放在一起最方便的原因。

标签: gradle kotlin


【解决方案1】:

.kts 文件应该转到src/main/resources 文件夹,因为src/main/kotlin 用于.kt 文件。

从这个意义上说,脚本是一种完全不同的动物,您应该使用KtsRunner 之类的东西来执行它们。

相关问题是here

如果您只想使用来自 IDEA 的脚本,那么您应该使用开箱即用支持的 Scratch files

【讨论】:

  • 请注意,我想从 InteliJ 运行此脚本,而不是从其他程序运行。你的答案是针对另一个问题。我会更新问题。
  • 是的,暂存文件就是我想要的。问题是我需要它们 1) 在文件夹层次结构中 2) 在 Git 下的项目中。
  • 我找到了解决问题的方法,但我仍然希望获得类似于暂存文件的 REPL 支持。你知道怎么做吗?
  • 我认为这是给你的xor。您要么使用暂存文件,要么使用 resources 文件夹中的 .kts 文件和脚本运行器。
  • 您是对的,JB 确认此功能尚不可用。如果你想要youtrack.jetbrains.com/issue/KT-27542,你可以在这张票上投票
【解决方案2】:

结果证明解决方案非常简单。

编译器找不到通常添加到任何 Kotlin 脚本类路径的实用程序类。向我的build.gradle 添加一个依赖项修复了它:

dependencies {
    compile "org.jetbrains.kotlin:kotlin-scripting-jvm"
}

附言

我创建了 2 个票证来改进 InteliJ 中的 Kotlin 脚本支持:

如果您关心这些功能,请投票!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2020-12-26
    • 2012-08-31
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多