2010-03-16 3 views
1

im разрабатывает автономное приложение, и он отлично работает при запуске его из моей идеи (intellij idea), но после создания uberjar и запуска приложения из него javax.persistence.spi. PersistenceProvider брошено говорят "нет поставщик Persistence для EntityManager не назвал testPU"после сборки jar - Отсутствует поставщик Persistence для EntityManager с именем

вот мой persistence.xml, который помещен под мета-инф каталоге:

<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> 

и вот как им создание диспетчера объектов завода:

эдс = Persistence.createEntityManagerFactory ("testPU");

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

ответ

0

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

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

+0

не уверен, что стало ясно, через подключаемый модуль сборки maven, создав uberjar, этот плагин по умолчанию расширяет все банки с зависимостями внутри моей банки, поэтому все, что мне нужно, должно быть в моей банке, и, похоже, я смотрю в нее ... далее Ив пытался создать фабрику управления сущностями при предоставлении ap свойств результат был тот же, что меня смущает еще больше, я думал, что-то с путями – 2010-03-16 18:07:52

+0

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

0

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

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

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

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

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

Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Создано-By: 1.6.0_03-b05 (Sun Microsystems Inc.) Main-Class: Class-Path: lib/.jar lib/.jar lib/.jar ...

Смежные вопросы