Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите ClassNotFoundException при подключении MySQL connector.

Метки:
Теги Теги
mysql
Статус
Закрыто для дальнейших ответов.

aloyen

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
aloyen
У меня есть плагин, который должен подключаться к внешней MySQL датабазе. Я подключил к проекту библиотеку mysql-connector-j и добавил в код строку перед подключением к ДБ Class.forName("com.mysql.jdbc.Driver");. Но IDE выводит ошибку Unhandled exception type ClassNotFoundException. При запуске плагина выводится эта же ошибка. Пробовал прописывать com.mysql.cj.jdbc.Driver но ничего не происходило. Это происходит в Eclipse и Intenji IDEA. Даже когда я установил MySQL Conector через установщик на Windows проблема не решалась.
Вот код:
Код:
package ru.aloyen.hwidbans;

import org.bukkit.plugin.java.JavaPlugin;
import java.lang.*;
import java.sql.Connection;
import java.sql.DriverManager;
/*import java.sql.ResultSet;
import java.sql.Statement;*/
import java.sql.SQLException;

public class Main extends JavaPlugin {
    private String db_ip, db_port, db_password, db_user, db_name, ban_message;
    private Connection con;
    @Override
    public void onEnable() {
        this.getLogger().info("Starting a plugin...");

        try {
            this.getLogger().info("Fetch a config...");
            db_ip = this.getConfig().getString("mysql.ip");
            db_port = this.getConfig().getString("mysql.port");
            db_password = this.getConfig().getString("mysql.password");
            db_user = this.getConfig().getString("mysql.user");
            db_name = this.getConfig().getString("mysql.name");
            ban_message = this.getConfig().getString("ban_message");
        } catch (Throwable err) {
            this.getLogger().warning("MySQL configuration are cursed. Rewriting default config and shutdown a plugin...");
            this.saveDefaultConfig();
            this.getServer().getPluginManager().disablePlugin(this);
        }
        this.saveDefaultConfig();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql//" + db_ip + ":" + db_port + "/" + db_name, db_user, db_password);
        } catch (SQLException e) {
            e.printStackTrace();
            this.getServer().getPluginManager().disablePlugin(this);
        }

    }
    @Override
    public void onDisable() {
        this.getLogger().info("Hwid Ban plugin now is shuting down...");
    }
}

rhRQy.png

Как это исправить?
 
А в рантайме классу-то откуда взяться?
Либо добавь зависимость в джарник (желательно зашейдить с релокацией пакетов)
Либо добавь в libraries в plugin.yml (работает с версии 1.16.5)
 
А в рантайме классу-то откуда взяться?
Либо зашейди его в джарник, либо добавь в libraries в plugin.yml
Уже добавил в plugin.yml.
libraries:
- mysql.mysql-connector-java:mysql-connector-java:5.1.46

А зашейдить это что? Это как?
 
Посмотреть вложение 63992

https://maven.apache.org/plugins/maven-shade-plugin/usage.html

Конкретно по поводу релокации пакетов тут:
https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html

В том же разделе меню есть и другие примеры

Сделал такой 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>HwidBans</groupId>
  <artifactId>HwidBans</artifactId>
  <version>1.0</version>
  <name>HwidBans</name>
  <description>HwidBans</description>
  <properties>
     <maven.compiler.source>1.8</maven.compiler.source>
     <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <configuration>
          <minimizeJar>true</minimizeJar>
          <artifactSet>
            <includes>
              <include>com.mysql.*</include>
            </includes>
          </artifactSet>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>

Если я прописываю shade:shade, то мне кидает это (лог с ошибкой)
В Eclipse та же ошибка с ClassNotFound
Что не так?
 
Тебе не нужно использовать shade:shade, просто юзай mvn package, после того как прописал плагин в pom.xml
 
Сделал такой 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>HwidBans</groupId>
  <artifactId>HwidBans</artifactId>
  <version>1.0</version>
  <name>HwidBans</name>
  <description>HwidBans</description>
  <properties>
     <maven.compiler.source>1.8</maven.compiler.source>
     <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <configuration>
          <minimizeJar>true</minimizeJar>
          <artifactSet>
            <includes>
              <include>com.mysql.*</include>
            </includes>
          </artifactSet>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>

Если я прописываю shade:shade, то мне кидает это (лог с ошибкой)
В Eclipse та же ошибка с ClassNotFound
Что не так?
Вроде норм. Собираешь при помощи maven package?
 
Сделал такой 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>HwidBans</groupId>
  <artifactId>HwidBans</artifactId>
  <version>1.0</version>
  <name>HwidBans</name>
  <description>HwidBans</description>
  <properties>
     <maven.compiler.source>1.8</maven.compiler.source>
     <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <configuration>
          <minimizeJar>true</minimizeJar>
          <artifactSet>
            <includes>
              <include>com.mysql.*</include>
            </includes>
          </artifactSet>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>

Если я прописываю shade:shade, то мне кидает это (лог с ошибкой)
В Eclipse та же ошибка с ClassNotFound
Что не так?
Когда в плагин шейдишь библиотеку, нужно плагин компилировать через maven.
upload_2022-12-21_16-56-56.png
 
Жду когда скинут тутор как в градле собирать джарник с зависимостями
 
Жду когда скинут тутор как в градле собирать джарник с зависимостями
Вместо того, чтобы ждать, мог бы просто загуглить. В интернете полно материалов, например:

Даже на русском язке видосы есть:

И я уже молчу про официальную документацию Gradle, где всё подробно расписано о зависимостях
 
Спасибо огромное :)
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх