#java #discord #package #minecraft #shadowjar
Вопрос:
Привет сообществу StackOverflow,
Я пытаюсь запустить бота Discord внутри плагина Minecraft (Spigot). Каждый раз, когда я пытаюсь это сделать, я получаю следующую ошибку:
[21:19:32] [Server thread/INFO]: [DiscordWhitelist] Loading DiscordWhitelist v1.0
[21:19:32] [Server thread/INFO]: [DiscordWhitelist] Enabling DiscordWhitelist v1.0
[21:19:32] [Server thread/ERROR]: Error occurred while enabling DiscordWhitelist v1.0 (Is it up to date?)
java.lang.NoClassDefFoundError: net/dv8tion/jda/api/JDABuilder
at discordwhitelist.DiscordWhitelist.onEnable(DiscordWhitelist.java:20) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:492) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:406) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.reload(CraftServer.java:879) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.Bukkit.reload(Bukkit.java:651) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:761) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchServerCommand(CraftServer.java:746) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at net.minecraft.server.v1_16_R3.DedicatedServer.handleCommandQueue(DedicatedServer.java:426) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:395) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1127) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:966) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:273) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_291]
Caused by: java.lang.ClassNotFoundException: net.dv8tion.jda.api.JDABuilder
at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:138) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:99) ~[spigot.jar:3082-Spigot-9fb885e-d49530f]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_291]
... 18 more
Эта ошибка, по-видимому, указывает на то, что пакет JDA не загружен при создании файла .jar.
Один из способов устранить эту проблему-с помощью shadowJar создать один файл fat .jar. К сожалению, это не идеально, из-за возможного размера .jar. При использовании shadowJar размер плагина составит более 7000 КБ, что значительно превышает максимальный размер файла большинства сайтов для обмена плагинами Minecraft.
Короче говоря, мне нужно найти способ затенить только некоторые пакеты.
Я не смог понять, как это сделать с помощью поиска, поэтому я надеюсь, что этот пост найдет нужных людей.
Для справки, я использую последнюю версию IntelliJ. Я создаю плагин с помощью Gradle. Вот код (пока) и файл build.gradle:
package discordwhitelist;
import org.bukkit.plugin.java.JavaPlugin;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import javax.security.auth.login.LoginException;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
public class DiscordWhitelist extends JavaPlugin {
String statusMessage = "im a dumb bot";
String token = "REDACTED";
@Override
public void onEnable() {
try { //runs bot
JDA jda = new JDABuilder(token)
.addEventListeners(new DiscordHandlers())
.setActivity(Activity.playing(statusMessage))
.build();
jda.awaitReady();
System.out.println("Finished Building JDA!");
} catch (LoginException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onDisable() {
}
}
plugins {
id 'java'
}
group 'wickn.discordwhitelist'
version '2.0'
repositories {
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
mavenCentral() // for transitive dependencies
maven {
name 'm2-dv8tion'
url 'https://m2.dv8tion.net/releases'
}
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
compileOnly 'org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT'
compile ('net.dv8tion:JDA:4.2.1_265')
}
test {
useJUnitPlatform()
}