java - 如何将 Kotlin 与 Bukkit/Spigot 插件和 Gradle 结合使用

标签 java gradle kotlin bukkit

我正在尝试使用 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"
    }
}

最佳答案

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

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

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

然后你可以配置Shadow:

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

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

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

关于java - 如何将 Kotlin 与 Bukkit/Spigot 插件和 Gradle 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434280/

相关文章:

android - 即使使用内置的Android Studio应用程序,我也总是在Android Studio中收到错误 “Content not allowed in prolog”

android - 如何使Apollo Android缓存无效?

java - 由于 Firebase 数据库调用导致 UI 延迟

java - 为什么是 `sun.jvm.hotspot.debugger.DebuggerException: cannot open binary file` ?

java - 如何获取对象或类的方法列表?

java - 如何使用 YAML 库将字符串数据转换为字节数组?

java - dex 文件不包含 MainActivity 类

java - 如何将带有自定义 .properties 文件的 Spring Boot 应用程序部署到 AWS ElasticBeanstalk?

gradle - 使用Gradle创建构建后复制任务

java - 在 Webflux 中解决 Pageable