2011-02-28 71 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中”,它将起作用。