【问题标题】:NoClassDefFoundException while trying to use HikariCP [duplicate]尝试使用 HikariCP 时出现 NoClassDefFoundException [重复]
【发布时间】:2017-01-28 09:22:58
【问题描述】:

我对 Bukkit 编程的外部问题非常陌生,所以如果它很容易解决,我很抱歉:P

我有一个问题,当我尝试在我的项目中使用 HikariCP 时,它返回一个错误(标题之一)。

我在 BungeeCord 插件中使用它。 奇怪的是我已经成功完成了几次,但我不知道为什么这次没有成功。

错误/日志:

06:13:36 [ADVERTENCIA] Exception encountered when loading plugin: DiverseReport java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariDataSource at net.srlegsini.DiverseReport.Bungee.MClass.onEnable(MClass.java:44) at net.md_5.bungee.api.plugin.PluginManager.enablePlugins(PluginManager.java:227) at net.md_5.bungee.BungeeCord.start(BungeeCord.java:272) at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:55) at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15) Caused by: java.lang.ClassNotFoundException: com.zaxxer.hikari.HikariDataSource at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:53) at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:27) at java.lang.ClassLoader.loadClass(Unknown Source) ... 5 more

我的主要课程:

package net.srlegsini.DiverseReport.Bungee;

import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;

import com.zaxxer.hikari.HikariDataSource;

import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
import net.srlegsini.DiverseReport.Bukkit.UUIDFetcher;

public class MClass extends Plugin {

    static Configuration config;
    static MClass plugin;

    static HikariDataSource hikari;
    static Connection connection;

    public void onEnable() {
        BungeeCord.getInstance().getPluginManager().registerListener(this, new ChannelListener());
        BungeeCord.getInstance().registerChannel("Return");

        loadCfg();

        if (!config.contains("MySQL")) {
            config.set("MySQL.Enable", false);

            config.set("MySQL.Host", "localhost");
            config.set("MySQL.Port", 3306);
            config.set("MySQL.User", "user");
            config.set("MySQL.Pass", "pass");
            config.set("MySQL.Database", "Sr_DiverseReport");
        }

        saveCfg(getDataFolder());

        hikari = new HikariDataSource();
        hikari.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
        hikari.addDataSourceProperty("serverName", config.getString("MySQL.Host"));
        hikari.addDataSourceProperty("port", 3306);
        hikari.addDataSourceProperty("databaseName", config.getString("MySQL.Database"));
        hikari.addDataSourceProperty("user", config.getString("MySQL.User"));
        hikari.addDataSourceProperty("password", config.getString("MySQL.Pass"));

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = hikari.getConnection();
        } catch (SQLException e1) {
            e1.printStackTrace();
        } catch (ClassNotFoundException e2) {

        }

        saveCfg(getDataFolder());



    }

    public void loadCfg() {
        try {
            File file = new File(getDataFolder(), "config.yml");
            if (!getDataFolder().exists()) {
                getDataFolder().mkdir();
            }

            if (!file.exists()) {
                file.createNewFile();
            }
            config = ConfigurationProvider.getProvider(YamlConfiguration.class)
                    .load(new File(getDataFolder(), "config.yml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void saveCfg(File dataFolder) {
        try {
            ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, new File(dataFolder, "config.yml"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @SuppressWarnings({ "unused", "deprecation" })
    public static String getUUID(String playerName) {
        UUIDFetcher fetcher = new UUIDFetcher(Arrays.asList("evilmidget38", "mbaxter"));
        String playerUUID = null;
        try {
            playerUUID = UUIDFetcher.getUUIDOf(playerName).toString();
        } catch (Exception e2) {
            playerUUID = BungeeCord.getInstance().getPlayer(playerName).getUniqueId().toString();
        }

        return playerUUID;
    }

}

我的程序: 创建项目,在buildpath中导入BungeeCord.jar、HikariCP-2.6.0.jar和slf4j-api-1.7.21.jar,导入HikariCP-2.6.0.jar和slf4j-api-1.7.21.jar

它在其他项目中有效,但神奇的是,它坏了。 我不想使用 Maven,只是因为它必须有一个修复程序,因为正如我所说,我过去多次使用相同的程序。

感谢您花时间阅读本文:)

编辑: Image of the project

【问题讨论】:

  • 请在您的问题中包含异常堆栈跟踪和您的代码,不要链接到外部位置。
  • 完成了。对不起。
  • 除非您使用 HTML、CSS 或 Javascript,否则请不要使用 sn-ps。

标签: java hikaricp bungeecord


【解决方案1】:

一切尽在例外:

原因:java.lang.ClassNotFoundException: com.zaxxer.hikari.HikariDataSource

HikariDataSource 在运行时丢失,您需要以某种方式提供它,例如将带有“驱动程序”的相关 .jar 复制到您的服务器库文件夹中。

另见一些相关问题: How to set up datasource with Spring for HikariCP?How do I configure HikariCP in my Spring Boot app in my application.properties files?

【讨论】:

  • 很好,但有一件事......我知道如何使用 HikariCP,并且我在许多其他插件中使用它很长时间。发生的事情是,现在,神奇地,我无法使用它。另外,我尝试复制和粘贴旧项目。不起作用。
  • 可能是数据库驱动程序曾经与您正在使用的其他库捆绑在一起,但升级依赖项会将其从您的项目中删除。
【解决方案2】:

从异常中可以清楚地看出,HikariCP-2.6.0.jar 在编译时位于类路径中,但在运行时和项目结构的图像中丢失,也很明显 HikariCP-2.6.0.jar和 slf4j-api-1.7.21.jar 缺少作为 ide 中的库引用。您需要在编译时和运行时将这些 jar 保存在类路径库中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多