hibernate.cfg.xml не найдена ошибка при запуске приложения из файла JAR

Я экспортировал свой проект в файл JAR. У меня есть файл hibernate.cfg.xml внутри JAR, и я создал файл hibernate.properties, чтобы изменить настройки режима гибернации без непосредственного редактирования файла hibernate.cfg.xml. но, запустив файл JAR, я получаю исключение ниже, ожидая, что файл hibernate.cfg.xml будет там вне файла JAR. Но я хочу, чтобы только файл hibernate.properties находился вне файла JAR для предоставления настроек базы данных.

Исключение в консоли:

INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibern
ate.cfg.xml not found
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.ExceptionInInitializerError
        at DataLayer.HibernateAdapter.buildSessionFactory(HibernateAdapter.java:
37)
        at DataLayer.HibernateAdapter.<clinit>(HibernateUtil.java:13)
        at DataLayer.ApplicationDbContext.<init>(DatabaseContext.java:10)
        at ScanningServer.MainProg.init(TestMain.java:58)
        at ScanningServer.MainProg.main(TestMain.java:25)
        ... 5 more
Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found
        at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHe
lper.java:173)

строитьSessionFactory():

private static SessionFactory buildSessionFactory() {
        Properties hibernateProperties = new Properties();
        Properties hib = new Properties();
        if (sessionFactory == null){
            try {
                hibernateProperties.load(HibernateUtil.class.getClassLoader().getSystemClassLoader()
                                                          .getResourceAsStream("hibernate.properties"));
                Configuration configuration = new Configuration().configure();
                serviceRegistry = new StandardServiceRegistryBuilder()
                        .applySettings(configuration.getProperties()).build();
                sessionFactory = configuration.addAnnotatedClass(Account.class)
                        .addAnnotatedClass(Consumer.class).addAnnotatedClass(Order.class)
                        .addAnnotatedClass(Customer.class)
                        .addAnnotatedClass(Products.class)
                        .addAnnotatedClass(Category.class)
                        .addAnnotatedClass(Schedules.class)
                        .addAnnotatedClass(Alert.class)
                        .mergeProperties(hibernateProperties)
                        .configure("hibernate.cfg.xml").buildSessionFactory(serviceRegistry);
            } catch (Exception e) {
                System.err.println("Initial SessionFactory creation failed." + e);
                throw new ExceptionInInitializerError(e);
            }
        }   
        return sessionFactory;
    }

hibernate.properties:

hibernate.connection.url=jdbc:mysql://localhost/MyProjectDB?createDatabaseIfNotExist=true
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.username=root
hibernate.connection.password=Admin123!

Пожалуйста, помогите мне преодолеть это!!


person Nani    schedule 10.04.2015    source источник
comment
если банка находится в вашем пути к классам, вы можете использовать расположение пакета/файла следующим образом: configure(“com/bla/hibernate.cfg.xml”) это должно работать   -  person Paizo    schedule 10.04.2015
comment
@Paizo: файл jar находится в папке ресурсов. при запуске проекта в Eclipse он работает нормально. но я столкнулся с проблемой, только запустив экспортированный файл jar вместе с файлом «hibernate.properties» вне файла jar   -  person Nani    schedule 10.04.2015


Ответы (1)


Использовать

URL input = HibernateUtil.class.getResource("hibernate.cfg.xml");  
configure(input).buildSessionFactory(serviceRegistry); 

Извините, попробуйте это

public class HibernateUtil {    

 private static final SessionFactory sessionFactory = buildSessionFactory();

 private static SessionFactory buildSessionFactory() {
     try {                       
         ClassLoader classLoader = HibernateUtil.class.getClassLoader();             
         File file = new File(classLoader.getResource("Hibernate.properties").getFile());                                           
         Properties hibernateProperties = new Properties();          
         hibernateProperties.load(new FileInputStream(file));                                           
         Configuration configuration = new Configuration();          
         configuration.configure("/resources/hibernate.cfg.xml");            
         configuration.addProperties(hibernateProperties);           
         configuration.addAnnotatedClass(User.class);                               
         StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());             
         SessionFactory sf = configuration.buildSessionFactory(builder.build());
         return sf;          
     } catch (Throwable ex) {
         ex.printStackTrace();
         System.err.println("SessionFactory creation failed." + ex);
         throw new ExceptionInInitializerError(ex);
     }
 }

 public static SessionFactory getSessionFactory() {
     return sessionFactory;
 }

 public static void shutdown() {
     // Close caches and connection pools
     getSessionFactory().close();
 }

}

  1. Я создал проект maven с зависимостями гибернации.
  2. Экспортируйте проект как исполняемый файл jar и отметьте «упаковать необходимые библиотеки в сгенерированный jar».
  3. Запустите с помощью «java -jar myjar.jar»
person Fernando Romero Murat    schedule 10.04.2015
comment
Я попробовал то же самое и получил следующее исключение: «ИНФОРМАЦИЯ: HHH000040: Ресурс конфигурации: /hibernate.cfg.xml 13 апреля 2015 г., 11:12:19 org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null 13 апреля 2015 г., 11:12:19 org.hibernate.cfg.Configuration configure INFO: HHH000044: Настройка по URL-адресу: null Создание Initial SessionFactory failed.java.lang.NullPointerException Exception in thread main java.lang.ExceptionInInitializerError' - person Nani; 13.04.2015