【发布时间】:2021-01-11 04:07:40
【问题描述】:
正如标题所说,我尝试为使用 API 的 Minecraft 1.16.1 Spigot 服务器制作 Bukkit 插件。我的计划是制作一个插件(在 Eclipse 中),它分析服务器的一些统计信息,例如玩家人数和 TPS 等,并通过电子邮件将其发送到我的电子邮件地址。 为了实现这一点,我需要实现 Java-EE,因为 Java SE 没有发送电子邮件的能力。此外,我需要实现 java-mail-api。当我将其作为普通 jar 文件运行时,总共有 4 个 .jar 文件可以正常工作,其中 4 个 .jar 在构建路径中设置为“使用外部 jar”。 当我使用 maven 将 API 实现为 pom.xml 的依赖项时,它也可以正常工作。没问题。 但是当我将工作代码实现到 bukkit 插件中时,事情就开始出错了。
一开始我设置了一个简单的 onEnable 方法,看起来像这样
package mailsend;
import org.bukkit.plugin.java.JavaPlugin;
public class Mailer extends JavaPlugin {
Commands cmds;
@Override
public void onEnable() {
cmds = new Commands(); // this is line 12
this.getCommand(cmds.cmd).setExecutor(cmds);
System.out.println("Enabled Plugin MAIL");
}
}
它启用插件和看起来像这样的命令执行器
package mailsend;
import java.io.UnsupportedEncodingException;
import javax.mail.MessagingException;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commands implements CommandExecutor {
String cmd = "send";
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Player p = null;
if(sender instanceof Player)
p = (Player) sender;
if(command.getName().equals(cmd)) {
MailSender sndr = new MailSender();
sndr.login(Data.smtp, Data.number, Data.email, Data.password);
sndr.sendTestMail();
return true;
}
return false;
}
}
当我重新加载服务器时出现问题。例外是
[19:42:15 INFO]: [Mailer] Enabling Mailer v1.0
[19:42:15 ERROR]: Error occurred while enabling Mailer v1.0 (Is it up to date?)
java.lang.NoClassDefFoundError: javax/mail/MessagingException
at mailsend.Mailer.onEnable(Mailer.java:12) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:351) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at org.bukkit.craftbukkit.v1_16_R1.CraftServer.enablePlugin(CraftServer.java:491) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at org.bukkit.craftbukkit.v1_16_R1.CraftServer.enablePlugins(CraftServer.java:405) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at net.minecraft.server.v1_16_R1.MinecraftServer.loadWorld(MinecraftServer.java:438) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at net.minecraft.server.v1_16_R1.DedicatedServer.init(DedicatedServer.java:219) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:810) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at net.minecraft.server.v1_16_R1.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_271]
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_271]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:167) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:96) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_271]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_271]
... 11 more
我所知道的关于这个异常的所有信息是,我正在使用的 API 中的类在这种情况下无法加载 javax/mail/MessagingException。这意味着我的插件不使用我在构建路径中设置的 API 对吗?我尝试使用实现的 API 导出插件,但这不起作用。我还尝试将 maven 用于这个 Bukkit 插件,但它也不起作用。我总是遇到这个异常,我真的不知道如何解决这个问题。但正如我所说,我猜我的插件没有以正确的方式导出,其中包含 API 或指向 API 的链接(我还创建了一个名为“lib”的文件夹,我将 API 放入其中,但不起作用..)。我还尝试将类路径添加到插件中生成的 MANIFEST 文件中,但这也不起作用..
我个人第一次使用 API 制作插件,我真的不知道如何以正确的方式做到这一点。如果有人能给我简单的说明如何解决这个问题,那就太好了!
【问题讨论】:
-
如果您有外部 Jar 文件,您需要将这些文件与插件 jar 一起放入您的插件文件夹中。如果您使用例如 maven,则需要创建一个“胖”jar 文件 (stackoverflow.com/questions/63972961/…)
-
它们都不起作用。我将 API 放入我的插件文件夹中,但它仍然给了我同样的错误(加载 API 时出现 +4 错误,因为它们不是插件)。制作一个'fat'-jar 文件也不起作用,或者我做错了什么。你能告诉我如何制作一个胖 jar 文件吗?
-
我实际上还没有使用“fat”-jar 文件。所以我不能帮你抱歉:(
-
我也有同样的问题。你解决了吗?
-
很遗憾没有...我尝试使用 Eclipse 和 IntelliJ 但它们都不起作用...
标签: java api email minecraft bukkit