2010-12-01 158 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旁邊的子文件夾中 這對我很有用。