首页 > 解决方案 > 如何通过 Bukkit/Spigot 插件和 Gradle 使用 Kotlin

问题描述

我正在尝试将 Kotlin 用于 Spigot 插件(适用于 1.8.8 版),因为我发现 Kotlin 的使用效率要高得多。但是,每当我尝试运行插件时,都会收到此错误:

Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics

我在网上看过,似乎我需要将 Kotlin jar 文件隐藏到我的插件中,谁能告诉我该怎么做?

更新在尝试了下面的建议后,我仍然得到同样的错误。这是我的 build.gradle:

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
    id 'com.github.johnrengelman.shadow' version '4.0.2'
}

group 'me.graphicalcake95'
version '1.0.0'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven {
        url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
    }
}

shadowJar {
    baseName = 'shadow'
    classifier = null
    version = null
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compileOnly 'org.bukkit:bukkit:1.8.8-R0.1-SNAPSHOT'
    shadow "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

标签: javagradlekotlinbukkit

解决方案


您确实需要将 Kotlin 标准库映射到您的插件中。由于您使用的是 Gradle,因此可以使用类似于Shade的Shadow Plugin来执行此操作,但 Shade 仅适用于Maven,因此对您没有用处。

使用 Shadow 插件很简单。首先应用插件本身:

plugins {
  id 'com.github.johnrengelman.shadow' version '5.0.0'
}

然后你可以配置影子:

shadowJar {
   baseName = 'shadow'
   classifier = null
   version = null
}

shadow.jar当您构建项目时,这将在您的构建文件夹中创建一个。应用影子插件后,您可以将shadow依赖项包含在 fat jar 中:

dependencies {
  shadow "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
}

推荐阅读