我对 Toothpick 还很陌生,今天我决定在我目前正在进行的一个小项目中对其进行测试。但是当我尝试编译时,kapt
抛出了一个异常但我真的不明白它的意思,我已经尝试在谷歌上查找它,但似乎没有人使用 Toothpick 遇到这个问题(还),所以这是我最后的手段。提前致谢。
Stacktrace(使用详细模式): https ://paste.helpch.at/uqusanaheh.cs
gradle.build.kts(我使用的是 Gradle 7.2 版本)
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.5.30"
kotlin("kapt") version "1.5.30"
id("com.github.johnrengelman.shadow") version "7.0.0"
}
group = "com.github.secretx33"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
maven("https://oss.sonatype.org/content/groups/public/")
maven("https://repo.codemc.org/repository/maven-public/")
maven("https://papermc.io/repo/repository/maven-public/")
maven("https://plugins.gradle.org/m2/")
maven("https://jitpack.io")
maven("https://maven.enginehub.org/repo/")
maven("https://repo.mattstudios.me/artifactory/public")
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
// API dependency
compileOnly("com.destroystokyo.paper:paper-api:1.12.2-R0.1-SNAPSHOT")
compileOnly(fileTree("libs"))
// DI
val toothpick_version = "3.1.0"
implementation("com.github.stephanenicolas.toothpick:ktp:$toothpick_version")
kapt("com.github.stephanenicolas.toothpick:toothpick-compiler:$toothpick_version")
compileOnly("com.comphenix.protocol:ProtocolLib:4.7.0")
implementation("net.kyori:adventure-api:4.9.1")
implementation("net.kyori:adventure-platform-bukkit:4.0.0")
implementation("net.kyori:adventure-text-serializer-plain:4.9.0")
}
tasks.test {
useJUnitPlatform()
}
// Disables the normal jar task
tasks.jar { enabled = false }
// And enables shadowJar task
artifacts.archives(tasks.shadowJar)
tasks.shadowJar {
archiveFileName.set(rootProject.name + ".jar")
val dependencyPackage = "${rootProject.group}.dependencies.${rootProject.name.toLowerCase()}"
relocate("kotlin", "${dependencyPackage}.kotlin")
relocate("kotlinx", "${dependencyPackage}.kotlinx")
relocate("org.jetbrains", "${dependencyPackage}.jetbrains")
relocate("org.intellij", "${dependencyPackage}.jetbrains.intellij")
exclude("ScopeJVMKt.class")
exclude("DebugProbesKt.bin")
exclude("META-INF/**")
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
options.encoding = "UTF-8"
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict", "-Xjvm-default=all")
jvmTarget = "1.8"
}
}
tasks.processResources {
val main_class = "${project.group}.${project.name.toLowerCase()}.${project.name}"
expand("name" to project.name, "version" to project.version, "mainClass" to main_class)
}
主类(GTFix)
package com.github.secretx33.gtfix
import com.comphenix.protocol.ProtocolLibrary
import com.comphenix.protocol.events.PacketAdapter
import com.github.secretx33.gtfix.command.Commands
import com.github.secretx33.gtfix.eventlistener.CommandTabBlockerListener
import com.github.secretx33.gtfix.eventlistener.DisableOffhandSlotListener
import com.github.secretx33.gtfix.packetlistener.ChatPacketListener
import org.bukkit.Bukkit
import org.bukkit.event.Listener
import org.bukkit.plugin.Plugin
import org.bukkit.plugin.java.JavaPlugin
import toothpick.Scope
import toothpick.configuration.Configuration
import toothpick.ktp.KTP
import toothpick.ktp.binding.bind
import toothpick.ktp.binding.module
import java.util.logging.Logger
import kotlin.reflect.KClass
class GTFix : JavaPlugin() {
private val mod = module {
bind<Plugin>().toInstance(this@GTFix)
bind<JavaPlugin>().toInstance(this@GTFix)
bind<Logger>().toInstance(this@GTFix.logger)
}
override fun onEnable() {
KTP.setConfiguration(Configuration.forDevelopment().preventMultipleRootScopes())
val scope = KTP.openScope("GTFix").installModules(mod)
registerPacketListeners(scope, ChatPacketListener::class)
registerListeners(scope, CommandTabBlockerListener::class, DisableOffhandSlotListener::class)
Commands(scope)
}
override fun onDisable() {
KTP.closeScope("GTFix")
}
private fun registerPacketListeners(scope: Scope, vararg listeners: KClass<out PacketAdapter>) {
listeners.map { scope.getInstance(it.java) }
.forEach { ProtocolLibrary.getProtocolManager().addPacketListener(it) }
}
private fun registerListeners(scope: Scope, vararg listeners: KClass<out Listener>) {
listeners.map { scope.getInstance(it.java) }
.forEach { Bukkit.getPluginManager().registerEvents(it, this) }
}
}