eclipselink PersistenceUnitLoadingEception в исполняемом JAR - PullRequest
5 голосов
/ 02 декабря 2010

Я разрабатываю отдельное Java-приложение, которое использует eclipselink. Все нормально, когда я запускаю приложение из Eclipse IDE. Но я экспортировал исполняемый файл JAR, и с тех пор я не могу заставить работать eclipseLink. Я нашел похожую проблему на форуме сообщества Eclipse здесь , но все же не слишком удобно:

Пожалуйста, помогите,

Моё исключение следующее:

01 dec. 2010 22:47:31,199  INFO Configuration:97 - Iniciate database
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:56)
Caused by: Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.0.2.v
20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoadingExcept
ion
Exception Description: An exception was thrown while searching for persistence a
rchives with ClassLoader: java.net.URLClassLoader@61de33
Internal Exception: Exception [EclipseLink-30004] (Eclipse Persistence Services
- 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoad
ingExceptionException Description: An exception was thrown while processing persistence.xml
from URL: rsrc:../
Internal Exception: java.net.MalformedURLException
        at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.ex
ceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126
)
        at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFa
ctory(PersistenceProvider.java:133)
        at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFa
ctory(PersistenceProvider.java:65)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.
java:51)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.
java:33)
        at eu.agilelabs.pillAgent.db.dam.DataManagerImplJPA.(DataManagerIm
plJPA.java:36)
        at eu.agilelabs.pillAgent.db.dam.DataManagerImplJPA.getInstance(DataMana
gerImplJPA.java:47)
        at eu.agilelabs.configuration.Configuration.(Configuration.java:98
)
        at eu.agilelabs.configuration.Configuration.getInstance(Configuration.ja
va:119)
        at eu.agilelabs.pillAgent.core.Main.main(Main.java:15)
        ... 5 more
Caused by: Exception [EclipseLink-30004] (Eclipse Persistence Services - 2.0.2.v
20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoadingExcept
ion
Exception Description: An exception was thrown while processing persistence.xml
from URL: rsrc:../
Internal Exception: java.net.MalformedURLException
        at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.ex
ceptionProcessingPersistenceXML(PersistenceUnitLoadingException.java:117)
        at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces
sor.processPersistenceXML(PersistenceUnitProcessor.java:444)
        at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces
sor.processPersistenceArchive(PersistenceUnitProcessor.java:401)
        at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces
sor.getPersistenceUnits(PersistenceUnitProcessor.java:310)
        at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPe
rsistenceUnitInfoInArchive(JPAInitializer.java:149)
        at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPe
rsistenceUnitInfoInArchives(JPAInitializer.java:136)
        at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPe
rsistenceUnitInfo(JPAInitializer.java:125)
        at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFa
ctory(PersistenceProvider.java:98)
        ... 13 more
Caused by: java.net.MalformedURLException
        at java.net.URL.(Unknown Source)
        at java.net.URL.(Unknown Source)
        at java.net.URL.(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
Entity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineD
ocVersion(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Un
known Source)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p
arse(Unknown Source)
        at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces
sor.processPersistenceXML(PersistenceUnitProcessor.java:442)
        ... 19 more

Я думаю, что эта строка должна быть ключевой:

Internal Exception: Exception [EclipseLink-30004] (Eclipse Persistence Services
- 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoad
ingExceptionException Description: An exception was thrown while processing persistence.xml
from URL: rsrc:../

Ответы [ 6 ]

3 голосов
/ 21 января 2011

Мне удалось это решить. Я изменил способ экспорта файла jar в eclipse. Если он извлекает необходимые библиотеки в банку, все работает отлично. В любом случае, спасибо!

0 голосов
/ 13 февраля 2015

Щелкните правой кнопкой мыши по проекту -> Свойства -> Путь сборки Java -> Порядок и экспорт и выберите библиотеки

Щелкните правой кнопкой мыши по проекту -> Экспорт ... -> Запускаемый файл JAR -> Скопируйте необходимые библиотеки в подпапку рядом с созданным JAR Это сработало для меня.

0 голосов
/ 19 июля 2012

Я использовал EclipseLink 2.3.2 с Eclipse Indigo и все еще получал сообщение об ошибке.

Затем, как дурак, я понял, что выбираю «Пакет необходимых библиотек в сгенерированный JAR» вместоРаботает «Извлечение необходимых библиотек в сгенерированный JAR».

Не уверен, в чем разница, хотя я заметил, что некоторые из моих JAR работают только когда я создаю при использовании «Package required ...», и другиеработают только когда я создаю их, используя «Извлечь требуется ...».

Не уверен, почему это так.В конечном счете, меня это не волнует, поскольку полученный JAR не имеет внешних зависимостей.

Кстати, другой предложенный вариант (изменение файла манифеста JAR) не работает для меня.Я извлек манифест (jar xf MYJAR.jar META-INF/MANIFEST.MF), добавил Eclipse-BundleShape: dir, ввел его в банку (jar umf META-INF/MANIFEST.MF MYJAR.jar) и убедился, что манифест изменился.Та же ошибка.

0 голосов
/ 14 мая 2012

Я нашел соответствующее решение (то есть, если вы не используете EclipseLink 2.3.2), как упомянуто GaDo в Ошибка 364748 , решение заключается в добавлении следующей строки в MANIFEST.MF

Eclipse-BundleShape: dir

Это приводит к тому, что плагин экспортируется как каталог, а не как файл JAR, что делает файл persistence.xml доступным.

0 голосов
/ 04 марта 2012

Эта проблема была исправлена ​​в EclipseLink 2.3.2 Я обновился, и он ушел

0 голосов
/ 08 августа 2011

Некоторая справочная информация

Как указала предоставленная вами ссылка, EclipseLink, похоже, не поддерживает загрузку persistence.xml, когда EclipseLink jar встроен в jar вашего приложения.

Насколько я понимаю, стандартная ненастроенная Java не поддерживает исполняемые файлы jar, которые загружают классы из встроенных файлов jar. Исполняемый JAR-файл, который создает Eclipse, способен преодолеть это ограничение, добавив пользовательский загрузчик классов (org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader) в Jar-файл вашего приложения. Пользовательский загрузчик классов, по-видимому, является тем местом, где EclipseLink сталкивается с этой проблемой.

С учетом сказанного, в Eclipse Helios я обнаружил, что более удобно управлять «Копировать необходимые библиотеки в подпапку рядом с сгенерированным JAR», а не «Извлекать необходимые библиотеки в сгенерированный JAR».

При выборе опции копирования файл jar eclipselink остается нетронутым, в отличие от Eclipse, извлекающего различные файлы .class и загромождающего файл jar вашего приложения. Правда, ваше приложение больше не будет распространяться как один jar, но с точки зрения управляемости это выглядит лучше, чем опция extract-library.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...