2010-12-01 72 views
5

我正在开发一个使用eclipselink的独立Java应用程序。当我从eclipse IDE执行应用程序时,这一切都很好。但是我导出了一个可执行的JAR文件,因为我无法使eclipseLink工作。 我也发现了类似的问题在Eclipse社区论坛here,但还没有太顺手:eclipselink可执行文件中的PersistenceUnitLoadingEception JAR

请帮帮忙,

我的例外是:

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: [email protected] 
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:../
+0

奇怪,错误总是会发生吗?请包括你的persistence.xml。 JVM和OS与Eclipse运行相同吗?你如何运行它? – James 2010-12-02 16:07:13

+0

我已经设法解决它。我改变了eclipse导出jar文件的方式。如果它将所需的库提取到jar中,一切都很好。不管怎样,谢谢你! – GaDo 2011-01-07 14:37:08

回答

3

我有设法解决它。我改变了eclipse导出jar文件的方式。如果它将所需的库提取到jar中,一切都很好。不管怎样,谢谢你!

0

一些背景信息

正如您所提供的说,的EclipseLink似乎不支持加载的persistence.xml当的EclipseLink罐子被嵌入在应用程序的JAR的链接。

据我所知,标准的非定制Java不支持从嵌入式jar加载类的可运行jar。 Eclipse创建的可运行jar可以通过向应用程序的jar添加自定义类加载器(org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader)来克服该限制。显然,自定义类加载器是EclipseLink遇到此问题的地方。因此,在Eclipse Helios中,我发现它更易于“将所需的库复制到生成的JAR旁边的子文件夹中”,而不是“将所需的库提取到生成的JAR中”。

选择复制选项可保持eclipselink jar完好无损,与Eclipse提取各种.class文件和混乱应用程序的jar相反。诚然,您的应用程序将不再作为单个jar分发,但从可管理性的角度来看,这似乎比extract-libraries选项更好。

0

此问题已得到修复的EclipseLink 2.3.2 我升级,它走了

0

我找到了各自的解决方案(即如果你不使用的EclipseLink 2.3.2),由加多在Bug 364748提到,解决的办法就是添加下面一行到MANIFEST.MF

Eclipse-BundleShape: dir 

这导致插件被导出为目录而不是为JAR文件,这使得persistence.xml中访问。

0

我在使用EclipseLink 2.3.2和Eclipse Indigo,但仍然出现错误。

然后,就像一个傻瓜,我意识到我选择了“将所需的库包装到生成的JAR中”而不是“将所需的库提取到生成的JAR中”。

不知道有什么区别,虽然我注意到我的一些JAR只在使用“Package required ...”时创建,其他人只有在我使用“Extract required ..”创建它们时才起作用。 “。

不知道这是为什么。最终,我并不在意,只要生成的JAR没有外部依赖关系。

顺便说一句,提出的另一个选项(修改JAR的清单文件)并不适用于我。我提取了表单文件(jar xf MYJAR.jar META-INF/MANIFEST.MF),并添加了Eclipse-BundleShape: dir,将它注入到jar(jar umf META-INF/MANIFEST.MF MYJAR.jar)中,并验证清单已更改。同样的错误。

0

右键单击项目 - >属性 - > Java构建路径 - >在线订单和出口,并选择库

该项目右击 - >导出... - >运行的JAR文件 - >复制需要的库放到生成的JAR旁边的子文件夹中 这对我很有用。