0

私はこの質問が十分に聞かれることを知っています。以前は何回もここにいましたが、残念ながらまだ解決策を見つけることができません。コマンドプロンプトから(Eclipseなしで)swt-javaプロジェクトを実行しようとしています&次の例外が発生します:

Exception in thread "main" java.lang.NoClassDefFoundError: com/beans/MyBean
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
    at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:70)
    at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
    at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:401)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:334)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:273)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:144)
    at org.hibernate.cfg.Configuration.add(Configuration.java:669)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:504)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:566)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
    at com.facadeimplementation.hibernate.util.HibernateFactory.configureSessionFactory(HibernateFactory.java:83)
    at com.facadeimplementation.model.dao.MyDao.<init>(MyDao.java:23)
    at com.facadeimplementation.model.dao.MappingDao.<init>(MappingDao.java:23)
    at com.ui.MainForm.<init>(MainForm.java:45)
    at com.ui.MainForm$1.run(MainForm.java:77)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at com.ui.MainForm.main(MainForm.java:74)
Caused by: java.lang.ClassNotFoundException: com.beans.MyBean
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 37 more

このプロジェクトを Eclipse で正常に実行できます。

MyBean.javaは Jar に含まれています。私はプロジェクトで非常に多くの POJO を使用しているため、それらを jar 内から使用する代わりに直接使用することはできません。

これを解決するために、非常に多くのリンクをたどりました。それらのいくつかは次のとおりです。

NoClassDefFoundError と ClassNotFoundException の原因と違いは何ですか?

http://javaeesupportpatterns.blogspot.in/2012/06/javalangnoclassdeffounderror-how-to.html

http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html

誰でも私を助けることができますか?

編集

次のコマンドを使用して Java アプリを実行しようとしています。

java -classpath .:swt.jar:mybeans.jar:(other necessary jars separated by :) com.ui.MainForm.java
4

2 に答える 2

0

エラーの開始点は

com.facadeimplementation.hibernate.util.HibernateFactory.configureSessionFactory(HibernateFactory.java:83)

そして、あなたは得ています。

Exception in thread "main" java.lang.NoClassDefFoundError: com/beans/MyBean

POJOでサードパーティの依存関係を使用していて、そのAPIが他のAPIを参照している可能性があります。CLASSPATHからも欠落している場合。このエラーが発生する可能性があります。

POJOで使用しているサードパーティの依存関係がcom/beans/MyBeanCLASSPATHにあるかどうかを確認するだけです。

おっしゃるように、Eclipseからの検索を実行しています。

Eclipse CLASSPATHにあるすべての.jarファイルは、CMDから実行したときにCLASSPATHにもありますか。

そのPOJOで使用されているAPIをリストアップすることもできますが、それはもっと役立つかもしれません。

于 2012-10-18T08:25:24.517 に答える
0

com/beans/MyBean.classBean がJAR ファイルのように見つかることを確認してください。つまり、JAR ファイルの内容を で一覧表示する場合、次jar tfの行が必要です。

com/beans/MyBean.class

まさにその通りに違いない。また、クラスパスに JAR を追加したことを確認してください。このコードを使用して、次を確認できます。

URL url = getClass().getClassLoader().getResource("com/beans/MyBean.class"),

urlである場合null、クラスはランタイム クラス パス上にありません。

于 2012-10-15T11:48:13.863 に答える