после сборки jar - нет поставщика Persistence для EntityManager с именем

я разрабатываю автономное приложение, и оно отлично работает при запуске из моей идеи (идея Intellij), но после создания uberjar и запуска приложения из него выдается javax.persistence.spi.PersistenceProvider со словами «Нет поставщика Persistence для EntityManager с именем testPU»

вот мой файл persistence.xml, который находится в каталоге meta-inf:

 <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <class>test.model.Configuration</class>
     <properties>
         <property name="hibernate.connection.username" value="root"/>
         <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
         <property name="hibernate.connection.password" value="root"/>
         <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
         <property name="hibernate.c3p0.timeout" value="300"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
     </properties>
 </persistence-unit>

and here is how im creating the entity manager factory:

emf = Persistence.createEntityManagerFactory("testPU");

я использую maven и попробовал плагин сборки с конфигурацией по умолчанию для него, у меня нет большого опыта сборки банок, и я не знаю, не упустил ли я что-то, поэтому, если у вас есть какие-либо идеи, я буду рад их услышать


person Community    schedule 16.03.2010    source источник


Ответы (3)


Вероятно, у вас проблемы с вашими библиотеками. Попробуйте сделать ниже.

  1. Создайте JAR-файл приложения
  2. Получите все библиотеки, которые вы использовали для приложения, и поместите их в папку lib.
  3. Поместите файл JAR и папку lib в новую папку, скажем, MyApp.
  4. Откройте файл с помощью 7-ZIP или WinRAR. Найдите файл Manifest.MF в папке META-INF.
  5. Ваш файл манифеста должен выглядеть примерно так..

Версия манифеста: 1.0 Версия Ant: Apache Ant 1.7.0 Автор: 1.6.0_03-b05 (Sun Microsystems Inc.) Основной класс: Путь к классу: lib/.jar lib/.jar lib/.jar . ..

person Matt    schedule 01.10.2010

Я помню, что у меня была эта проблема, и я думаю, что проблема заключалась в том, что вы не можете ссылаться на банку в банке. Для ваших внешних библиотек они должны быть расширены внутри вашей банки или жить в другом месте в системе CLASSPATH. Так как вы не указываете, что именно вы кладете в свою банку, я ставлю на это.

Вы НЕ можете использовать параметр командной строки -cp, если вы запускаете банку с использованием параметра -jar. Один или другой.

person TomR    schedule 16.03.2010
comment
не уверен, что стало ясно, через подключаемый модуль сборки maven я создаю uberjar, этот плагин по умолчанию расширяет все банки зависимостей внутри моей банки, поэтому все, что мне нужно, должно быть в моей банке, и, похоже, это так, как я смотрю в нем ... еще больше я пытался создать фабрику диспетчера сущностей, когда давал карту свойств, результат был таким же, что меня еще больше смущает, я думал, что это что-то с путями - person ; 16.03.2010
comment
Ах, прошу прощения. Я пропустил uberjar как конкретный термин, а не как общий. Вы пробовали сотрясать его, а затем расцеплять на другом ящике и бегать таким образом? Я помню, что у меня была эта проблема, и, судя по боковой панели «Связанные» справа от нас, многие другие тоже были, но я не могу вспомнить свое конкретное исправление, хотя я подозреваю, что это было un-jar и запустить его не в банке . Извините за неправильное понимание ссылки на uberjar. - person TomR; 16.03.2010

При использовании плагина сборки Maven с предопределенным jar-with-dependencies, вы получаете архив jar, который содержит двоичный вывод вашего проекта, а также его распакованные зависимости. Таким образом, одной из возможных проблем, о которой я могу думать, будет несколько JAR-файлов с persistence.xml, и в этом случае я не уверен, какой из них вы получите в окончательной сборке.

Поскольку вы получаете сообщение об ошибке с жалобой на «Нет поставщика постоянства для EntityManager с именем testPU», я бы открыл megajar и:

  • проверьте наличие persistence.xml (должно быть)
  • check that it contains the expected persistence unit testPU
    • if it doesn't, find the origin of the conflicting file and rewrite the assembly descriptor to exclude it
person Pascal Thivent    schedule 26.09.2010