2017-01-28 120 views
0

我很小白在外部的东西Bukkit编程,所以我很抱歉,如果它是那么容易解决:PNoClassDefFoundException试图使用HikariCP

我有一个问题,那就是当我尝试在我的项目中使用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; 
    } 

} 

我的方法: 创建项目,进口BungeeCord.jar,HikariCP-2.6.0.jar和slf4j- api-1.7.21.jar在buildpath中,导入HikariCP-2.6.0.jar和slf4j-api-1.7.21.jar

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

感谢您抽出时间来阅读这篇:)

编辑: Image of the project

+1

请在您的问题中包含异常堆栈跟踪和您的代码,请勿链接到外部位置。 –

+1

完成了。抱歉。 – SrLegsini

+0

请不要使用片段,除非您使用HTML,CSS或Javascript。 –

回答

0

这一切都在例外:

造成的:抛出java.lang.ClassNotFoundException:COM。 zaxxer.hikari.HikariDataSource

HikariDataSource在运行时丢失,您需要以某种方式提供它,例如通过将'drivers'相关的.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?

+0

不错,但有一点...我知道如何使用HikariCP,而且我在工作了很长时间很多其他插件。现在发生的是,神奇的是,我无法使用它。 另外,我尝试复制并粘贴较旧的项目。不起作用。 – SrLegsini

+0

以及数据库驱动程序曾经与您正在使用的其他库捆绑在一起的情况,但升级依赖项会将其从您的项目中删除。 – jediz

0

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

+0

不错,谢谢,但...我该怎么做? (我很喜欢这样的东西,对于愚蠢的问题感到抱歉。) – SrLegsini

+0

http://www.wikihow。com/Add-JARs-to-Project-Build-Paths-in-Eclipse-(Java) – mhshimul

+0

我尝试过所有方法...没有任何工作:/ – SrLegsini