1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем aloyen, 19 дек 2022.

Метки:
Статус темы:
Закрыта.
  1. Автор темы
    aloyen

    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...");
        }
    }
    

    [​IMG]

    Как это исправить?
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    А в рантайме классу-то откуда взяться?
    Либо добавь зависимость в джарник (желательно зашейдить с релокацией пакетов)
    Либо добавь в libraries в plugin.yml (работает с версии 1.16.5)
     
  3. Автор темы
    aloyen

    aloyen Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    aloyen
    Уже добавил в plugin.yml.
    libraries:
    - mysql.mysql-connector-java:mysql-connector-java:5.1.46

    А зашейдить это что? Это как?
     
  4. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
  5. Автор темы
    aloyen

    aloyen Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    aloyen
  6. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
  7. Автор темы
    aloyen

    aloyen Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    aloyen
    Сделал такой 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
    Что не так?
     
  8. DestKoder

    DestKoder Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    DestKoder
    Тебе не нужно использовать shade:shade, просто юзай mvn package, после того как прописал плагин в pom.xml
     
  9. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Вроде норм. Собираешь при помощи maven package?
     
  10. Egorov

    Egorov Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    sqlex
    Когда в плагин шейдишь библиотеку, нужно плагин компилировать через maven.
    upload_2022-12-21_16-56-56.png
     
  11. AlexeyVodnuy

    AlexeyVodnuy Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    KIZAK
    Жду когда скинут тутор как в градле собирать джарник с зависимостями
     
  12. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Вместо того, чтобы ждать, мог бы просто загуглить. В интернете полно материалов, например:


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


    И я уже молчу про официальную документацию Gradle, где всё подробно расписано о зависимостях
     
  13. Автор темы
    aloyen

    aloyen Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    aloyen
    Спасибо огромное :)
     
Статус темы:
Закрыта.

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