java - 如何通过 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"
}
}
解决方案
您确实需要将 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"
}
推荐阅读
- javascript - 一打开apk文件,Android上的React Native项目就会崩溃
- java - 如何使用改造将图像和json对象数组传递给android中的api
- java - 动态高亮android中textview的一部分
- ios - 只有一台设备出错:open() 失败:不允许操作路径:default.realm.lock
- javascript - 不和谐.js | 将机器人添加到新服务器时获取数据
- python - 应用程序级静态文件在 Django 中加载,但不是项目级
- python - 如何改变 QBarSet 的形状?
- git - 如何设置“不安全”的 Git LFS 配置项?
- python - linux 目录权限检查和/或目录是否存在
- node.js - 使用命令将 npm 包的 prepatch 版本从 1.0.0-0 更新到 1.0.0-1