如何为我的bukkit插件使用api?

mo49yndu  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(310)

正如标题所说,我试图为我的minecraft 1.16.1 spigot服务器制作一个bukkit插件,它使用api。我的计划是制作一个插件(在eclipse中),分析服务器的一些统计信息,比如playercount和tps等等,然后通过电子邮件发送到我的电子邮件地址。为了实现这一点,我需要实现javaee,因为javase没有发送电子邮件的能力。此外,我需要实现java邮件api。总共有4个.jar文件,当我将其作为普通jar文件运行时,它们工作得非常好,而buildpath中的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。这意味着我的插件没有使用我在buildpath中设置的api,对吗?我尝试用实现的api导出插件,但没有成功。我也试过用maven来做这个bukkit插件,但是也不管用。我总是得到这个例外,我真的不知道如何解决这个问题。但是正如我所说的,我猜我的插件没有以正确的方式导出包含的api或者到api的链接(我还制作了一个名为“lib”的文件夹,在那里我把api放进去了,但不起作用……)。我还尝试将类路径添加到插件中生成的清单文件中,但也不起作用。。
我个人第一次使用API制作了一个插件,我真的不知道如何用正确的方法来做。如果有人能给我简单的说明如何解决这个问题,那真的太好了!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题