我在 Eclipse 中创建了一个项目并成功执行了它(这是一个普通的项目,没有 Maven 或 Beans,非常简单),我用该项目创建了一个 .jar 并尝试执行它但是它抛出以下错误:
C:\Documents\wrapper-windows-x86-64-3.5.19-st\bin>java -cp QuoteHandler.jar stoc
k.view.Main
Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/hiber
nate/cfg/Configuration
Exception in thread "Quotes" java.lang.ExceptionInInitializerError
at stock.controller.HollidayController.<clinit>(HollidayController.java:
25)
at stock.view.MainThread.run(MainThread.java:57)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
at stock.controller.HollidayController.<clinit>(HollidayController.java:
22)
... 2 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
项目的.classpath文件有:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre7"/>
<classpathentry kind="lib" path="lib/antlr-2.7.7.jar"/>
<classpathentry kind="lib" path="lib/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/hibernate-commons-annotations-4.0.1.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-core-4.1.10.Final.jar" sourcepath="lib/hibernate-core-4.1.10.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-entitymanager-4.1.10.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-jpa-2.0-api-1.0.1.Final.jar"/>
<classpathentry kind="lib" path="lib/javassist-3.15.0-GA.jar"/>
<classpathentry kind="lib" path="lib/jboss-logging-3.1.0.GA.jar"/>
<classpathentry kind="lib" path="lib/jboss-transaction-api_1.1_spec-1.0.0.Final.jar"/>
<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.20-bin.jar"/>
<classpathentry kind="lib" path="lib/org.springframework.beans_3.1.4.RELEASE.jar"/>
<classpathentry kind="lib" path="lib/org.springframework.web_3.1.4.RELEASE.jar"/>
<classpathentry kind="lib" path="lib/org.springframework.context_3.1.4.RELEASE.jar"/>
<classpathentry kind="lib" path="lib/joda-time-2.2.jar"/>
<classpathentry kind="lib" path="lib/c3p0-0.9.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
网上查了一下我把%CLASSPATH%变量修改为:
CLASSPATH = C:\Program Files\Java\jre7\lib;C:\Program Files\Java\jre7\lib\c3p0-0.9.1.jar
所有引用都在项目的构建路径中配置好并且可以正常工作,但是当我执行 .jar 时它不起作用(所有引用都包含在 jar 中)。我错过了什么?
最佳答案
当您使用 -cp
运行程序时特别指定类路径时,您会覆盖默认的 CLASSPATH os 变量。
因此您需要将所有需要的类/jar 指定为 -cp
中的列表,或者您需要修改您的 CLASSPATH 以包含您的 jar 目录。这个问题,Setting multiple jars in java classpath , 描述了设置多个类路径元素。
关于java - 初始 SessionFactory 创建失败。java.lang.NoClassDefFoundError : org/hiber nate/cfg/Configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555720/