после сборки jar - не указан поставщик сохраняемости для EntityManager - PullRequest
1 голос
/ 16 марта 2010

я разрабатываю автономное приложение, и оно прекрасно работает, когда запускает его из моей идеи (идея intellij), но после создания uberjar и запуска приложения из него выдается javax.persistence.spi.PersistenceProvider, говорящий «Нет поставщика постоянства для 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>

и вот как я создаю фабрику менеджера сущностей:

emf = Persistence.createEntityManagerFactory ("testPU");

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

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

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

  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.) Main-Class: Путь к классу: lib / .jar lib / .jar lib / .jar ...

0 голосов
/ 26 сентября 2010

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

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

  • проверить, присутствует ли persistence.xml (должно быть)
  • проверить, что он содержит ожидаемую единицу сохраняемости testPU
    • в противном случае найдите источник конфликтующего файла и перепишите дескриптор сборки, чтобы исключить его
0 голосов
/ 16 марта 2010

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

Нельзя использовать параметр командной строки -cp, если вы запускаете jar с помощью параметра -jar. Один или другой.

...