«Исключение в потоке» mainHow, чтобы решить это исключение: «java.lang.NoClassDefFoundError: net / bytebuddy / NamingStrategy ...» - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь подключить локальную базу данных к своему приложению, используя спящий режим Я получаю следующую ошибку:

Jul 02, 2019 9:20:08 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {[WORKING]}
Exception in thread "main" java.lang.NoClassDefFoundError: net/bytebuddy/NamingStrategy$SuffixingRandom$BaseNameResolver
    at org.hibernate.orm.core@5.4.3.Final/org.hibernate.cfg.Environment.buildBytecodeProvider(Environment.java:345)
    at org.hibernate.orm.core@5.4.3.Final/org.hibernate.cfg.Environment.buildBytecodeProvider(Environment.java:337)
    at org.hibernate.orm.core@5.4.3.Final/org.hibernate.cfg.Environment.<clinit>(Environment.java:230)
    at org.hibernate.orm.core@5.4.3.Final/org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:78)
    at org.hibernate.orm.core@5.4.3.Final/org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:67)
    at org.hibernate.orm.core@5.4.3.Final/org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:58)
    at ProjectDBTest/ProjectDBTest2.HibernateUtil.getSessionFactory(HibernateUtil.java:28)
    at ProjectDBTest/ProjectDBTest2.App.main(App.java:28)
Caused by: java.lang.ClassNotFoundException: net.bytebuddy.NamingStrategy$SuffixingRandom$BaseNameResolver
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 8 more

Любая помощь в решении этой проблемы будет принята с благодарностью.

Изначально я получал исключение 'java.lang.NoClassDefFoundError: java / sql / SQLException' и поэтому добавил 'Требуется java.sql' после того, как увидел это как предлагаемое решение в другом месте переполнения стека, но теперь это исключение описано выше возникает. Я не уверен, где я ошибся в своем коде или чего не хватает.

Вот мой файл module-info.java:

module ProjectDBTest {

    requires java.persistence;
    //requires lombok;
    requires javafx.graphics;
    requires org.hibernate.orm.core;
    requires java.naming;
    requires java.sql;

    exports ProjectDBTest2.DB;

}

основной класс:

package ProjectDBTest2;

import ProjectDBTest2.DB.Vocabulary;
import org.hibernate.Session;
import org.hibernate.Transaction;

import java.util.List;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {


        Vocabulary word1 = new Vocabulary();
        word1.setUnitID(1);
        word1.setWord("test");
        word1.setVocabClass("noun");
        word1.setVocabDefinition("this is a test");
        word1.setVocabID(7);
        System.out.println(word1.getUnitID());

        Transaction transaction = null;
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {

            transaction = session.beginTransaction();

            session.save(word1);

            transaction.commit();

        } catch (Exception e) {

            if (transaction != null) {

                transaction.rollback();
            }

            e.printStackTrace();

        }

        try (Session session = HibernateUtil.getSessionFactory().openSession()) {

            List< Vocabulary > students = session.createQuery("from Vocabulary ", Vocabulary.class).list();

            students.forEach(s -> System.out.println(s.getWord()));

        } catch (Exception e) {

            if (transaction != null) {

                transaction.rollback();

            }

            e.printStackTrace();

        }


    }
}

Файл утилиты Hibernate:

package ProjectDBTest2;

import org.hibernate.SessionFactory;

import org.hibernate.boot.Metadata;

import org.hibernate.boot.MetadataSources;

import org.hibernate.boot.registry.StandardServiceRegistry;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;



public class HibernateUtil {
    private static StandardServiceRegistry registry;

    private static SessionFactory sessionFactory;

    public static SessionFactory getSessionFactory() {

        if (sessionFactory == null) {

            try {

                // Create registry

                registry = new StandardServiceRegistryBuilder().configure().build();

                // Create MetadataSources

                MetadataSources sources = new MetadataSources(registry);

                // Create Metadata

                Metadata metadata = sources.getMetadataBuilder().build();

                // Create SessionFactory

                sessionFactory = metadata.getSessionFactoryBuilder().build();

            } catch (Exception e) {

                e.printStackTrace();

                if (registry != null) {

                    StandardServiceRegistryBuilder.destroy(registry);

                }

            }

        }

        return sessionFactory;

    }

    public static void shutdown() {

        if (registry != null) {

            StandardServiceRegistryBuilder.destroy(registry);

        }

    }
}

Класс данных постоянства:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

//@Data

@Entity
@Table(name = "vocabulary")
public class Vocabulary {

    @Id
    @Column(name = "V_ID")
    private int vocabID;

    @Column(name = "V_WORD")
    private String word;

    @Column(name = "V_CLASS")
    private String vocabClass;

    @Column(name = "V_DEFINITION")
    private String vocabDefinition;

    @Column(name = "U_ID")
    private int unitID;

    public int getVocabID() {
        return vocabID;
    }

    public void setVocabID(int vocabID) {
        this.vocabID = vocabID;
    }

    public String getWord() {
        return word;
    }

    public void setWord(String word) {
        this.word = word;
    }

    public String getVocabClass() {
        return vocabClass;
    }

    public void setVocabClass(String vocabClass) {
        this.vocabClass = vocabClass;
    }

    public String getVocabDefinition() {
        return vocabDefinition;
    }

    public void setVocabDefinition(String vocabDefinition) {
        this.vocabDefinition = vocabDefinition;
    }

    public int getUnitID() {
        return unitID;
    }

    public void setUnitID(int unitID) {
        this.unitID = unitID;
    }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<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>ProjectDBTest2</groupId>
  <artifactId>ProjectDBTest2.0</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>ProjectDBTest2.0</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

  <dependencies>

    <!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy -->
    <dependency>
      <groupId>net.bytebuddy</groupId>
      <artifactId>byte-buddy</artifactId>
      <version>1.9.13</version>
    </dependency>


    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.4.3.Final</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok-->
    <!--
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
      <scope>provided</scope>
    </dependency> -->
    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <version>1.3.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-graphics</artifactId>
      <version>13-ea+9</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx</artifactId>
      <version>13-ea+9</version>
      <type>pom</type>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-base</artifactId>
      <version>13-ea+9</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>13-ea+9</version>
    </dependency>



  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Я использую intelliJ ultimate 2019.1, а уровень языка установлен на 11.

1 Ответ

0 голосов
/ 03 июля 2019

Мне, наконец, удалось решить эту проблему, обновив файл module-info.java, добавив в него:

module AlienDB {
    requires static lombok;
    requires java.persistence;
    requires org.hibernate.orm.core;
    requires java.naming;
    requires java.sql;
    requires com.sun.xml.bind; 
    requires net.bytebuddy;

    opens Aliens to org.hibernate.orm.core;


    exports Aliens;

}

Ранее я добавлял java.xml.bind, что вызывало дальнейшие проблемы.

...