2011-02-28 91 views
2

我正在開發一個使用Hibernate3的JPA-2.0應用程序。它運行在Eclipse好的,但如果從生成運行的JAR運行它,它提供了javax.persistence.PersistenceException:無法配置的EntityManagerFactory:無法從可運行jar配置EntityManagerFactory

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56) 
Caused by: javax.persistence.PersistenceException: Unable to configure EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:374) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) 
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
    at java.lang.String.substring(String.java:1937) 
    at org.hibernate.ejb.packaging.JarVisitorFactory.getJarURLFromURLEntry(JarVisitorFactory.java:55) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:340) 
    ... 12 more 

如果我解開這個同樣的罐子,並直接運行類,它的工作原理,但:

java -cp .:<add list to all .jar files> MainClass 

我無法弄清楚什麼是錯的。

+0

真正的例外是別的。請發佈完整的堆棧跟蹤。你知道,其中說明了實際原因:-) – jpkrohling 2011-02-28 16:45:38

+0

我添加了一個更完整的堆棧跟蹤。 – Roalt 2011-03-01 06:54:29

+0

您是否在jar清單中添加/檢查了classpath依賴關係? 也許在pom中顯式的utf8編碼會有所幫助。 – 2013-01-18 12:02:53

回答

0

我首先要檢查的一件事是persistance.xml位於正在構建的jar的META-INF目錄中。

+0

是的,jar裏有一個META-INF/persistence.xml – Roalt 2011-02-28 14:57:11

2

如果在生成可運行JAR的同時選擇「將所需的庫提取到生成的JAR中」,它將起作用。