Я получаю ошибку java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariDataSource
при запуске моего плагина Java на spigot. из того, что я могу сказать, я правильно импортировал его.
Я знаю, что этот вопрос был опубликован несколько раз, но просматривая 3-4, я не вижу четкого ответа на вопрос, что не так. Код падает на hikari = new HikariDataSource()
, который также является первым используемым оператором hikari.
My Pom
<groupId>drhampust.github.io</groupId>
<artifactId>Blank</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshot/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
похоже, что hikari не компилируется в jar, но яможет использовать свои активы во время кодирования.
Код:
import com.zaxxer.hikari.HikariDataSource;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.sql.*;
public class Main extends JavaPlugin {
//DataBase vars.
public String username, password, database, host, properties, table; //db variables
public int port; //db variable
//Connection vars
private HikariDataSource hikari;
@Override
public void onEnable() {
getLogger().info("onEnable is called!");
loadConfig();
new BukkitRunnable(){
@Override
public void run(){
connectToDatabase();
}
}.runTaskAsynchronously(this);
this.getServer().getPluginManager().registerEvents(new SetterGetter(), this);
}
@Override
public void onDisable() {
getLogger().info("onDisable is called!");
}
public synchronized void connectToDatabase() {
//Database details
String address = getConfig().getString("Database.address");
String name = getConfig().getString("Database.Name");
String username = getConfig().getString("Database.username");
String password = getConfig().getString("Database.password");
int port = getConfig().getInt("Database.port");
//Initialise hikari instace
hikari = new HikariDataSource();
//Setting Hikari properties
hikari.setMaximumPoolSize(10);
hikari.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
hikari.addDataSourceProperty("serverName", address);
hikari.addDataSourceProperty("port", port);
hikari.addDataSourceProperty("databaseName", name);
hikari.addDataSourceProperty("user", username);
hikari.addDataSourceProperty("password", password);
}
public void loadConfig() {
getConfig().options().copyDefaults(true);
saveConfig();
}
}
полный отчет о сбое в контейнере для вставки, чтобы его было легче увидеть: https://pastebin.com/JEMz0f6T
Моя попыткасоздать автономную программу, используя hikaricp: Код:
package test;
import com.zaxxer.hikari.HikariDataSource;
public class Main
{
public static void main(String[] args) {
HikariDataSource hikari = new HikariDataSource();
//Setting Hikari properties
hikari.setMaximumPoolSize(10);
hikari.setDriverClassName("com.mysql.jdbc.Driver");
hikari.setJdbcUrl("jdbc:mysql://" + "localhost" + ":" + "3306" + "/" + "plugin");
hikari.setUsername("Server1");
hikari.setPassword("227VU07dickCQjav");
}
}
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Test</groupId>
<artifactId>Test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>test.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
stacktrace: https://pastebin.com/fNQ7EFnQ
Я опубликовал проблему на HikaricpGithub, это может не подходить, так как это кажется проблемой только для меня, но эй! Может быть, он может помочь. Я не знаю, почему это происходит, я подозреваю, что другие люди могут выполнить HikariCP просто отлично, вопрос в том, почему это не работает для меня ...
Редактировать: кажется, что-то подобное произошло раньше:
https://www.spigotmc.org/threads/hikaricp-with-spigot-not-importing-with-the-jar.246851/ Проверка, могу ли я заставить мою проблему исправить себя, используя эту информацию.
Хорошо. Добавив новые аргументы в мой pom.xml, я теперь удалил NoClassDefFoundErrorи теперь получили это: https://pastebin.com/9DU9Tqra
Но, эй, это предупреждение, а не аварийный сброс. это значит, что это сработало!
Отсутствуют детали? Спросите, и я посмотрю, что я могу сделать.