- - PR -
Eclipseのプラグイン開発時に「java.lang.NoClassDefFoundError」
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-07-09 04:35
Eclipseを使用し、RCPを作成しております。
RCPへのプラグインを作成している最中に問題が生じました。 問題は、外部JARをビルドパスに含んで、コーディングすると、テスト起動時に「java.lang.NoClassDefFoundError」がでます。 (参考までに外部JARはApache commonsのDBCPとその必須JAR) 問題を切り分けようと思い、そのプラグイン内でDBCPを利用した別のMainメソッドを作成し、通常のjavaプログラムとして起動すると、問題なく起動します。 ClassPathの問題かとも思ったのですが、その方法も良く分からず、問題の解決に至っていない状態です。 どなたかご教授頂ければ幸いです。 何卒、よろしくお願い致します。 尚、詳細なエラー内容は下記の通りです。 java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource at agency.ConnectPool.setup(ConnectPool.java:12) at agency.Agency.<init>(Agency.java:16) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:157) at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:759) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51) at fox.func.Ext.load(Ext.java:25) at fox.property.Agents.setAgent(Agents.java:26) at fox.proc.Init.exec(Init.java:15) at fox.ApplicationWorkbenchAdvisor.initialize(ApplicationWorkbenchAdvisor.java:20) at org.eclipse.ui.application.WorkbenchAdvisor.internalBasicInitialize(WorkbenchAdvisor.java:172) at org.eclipse.ui.internal.Workbench.init(Workbench.java:1085) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1863) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:422) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at fox.Application.run(Application.java:18) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) 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.core.launcher.Main.invokeFramework(Main.java:336) at org.eclipse.core.launcher.Main.basicRun(Main.java:280) at org.eclipse.core.launcher.Main.run(Main.java:977) at org.eclipse.core.launcher.Main.main(Main.java:952) |
|
投稿日時: 2007-07-09 10:43
一番上のエラーメッセージ↓で検索したら
java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource 下の回避方法がヒットしましたが、関係ありませんか? http://grape.sapid.org/tutorial/lec2.html#java.lang.NoClassDefFoundError%3A+org%2Fapache%2Fstruts%2Flegacy%2FGenericDataSource+ 当方、超初心者で勉強させていただいている最中なので、間違っているかも しれませんが… |
|
投稿日時: 2007-07-09 16:13
ようこさん、返信ありがとうございました。
ご提示頂いた記事を拝見しましたが、Strutsアプリケーションに関する内容ですね。 似たような現象の可能性は考えられるのかもしれないのですが、今作成しているアプリケーションに照らし合わせるには、私自身力不足のようです。 問題は、何故RCPとして起動するとエラーが出て、javaプログラムとして起動するとエラーが出ないかなのですが、、、全く分かりません。差が分かれば調べようがあるのですが、手掛かりが見えない状態です。 恐らく、何らかの手順を踏まないといけないのだろうと思いますが、、、 EclipseRCPの起動の仕組み(プラグインの依存や外部JARを読み込む仕組み)か、抜本的な逃げ道があれば良いのですが、現状見えておりません。 皆さん、何卒よろしくお願い致します。 ◆追記ですが、Eclipse自体の異常を考え、再インストールと、バージョン3.3に同じプログラムを移し変えて起動してみましたが、結果は同じでした。 [ メッセージ編集済み 編集者: しんい 編集日時 2007-07-09 16:16 ] |
|
投稿日時: 2007-07-10 22:56
少し不完全ですが、取り急ぎは問題回避できました。
回避方法としては、 1.該当プロジェクトにファイルフォルダを作成 2.ファイルフォルダに使いたいJARをインポート 3.プラグインのマニフェストをPDEツールで開き、ランタイムのタブに移動 4.クラスパスから「追加」を選択し、1で作成したファイルフォルダを選択 5.すると「MANIFEST.MF」のBundle-ClassPathにファイルフォルダのPATHが追加される 以上の手順で、プラグインがJARファイルを認識してくれます。 ただ、この方法だとプラグインを作成するたびにJARファイルを取り込む必要があります。結果、無駄にファイルを重くしてしまうのではないかと思います。 理想としては、JARファイルをプラグインにまとめる等して、使いまわせると良いのですが、方法が分からない状態です。 「既存のJARアーカイブのプラグイン」というのも試しましたが、使い方や意義がいまいち分かっていないので、上手く行きません。(解説されているサイトがあれば教えて頂けるとありがたいです。) アドバイス頂けると大変助かります。何卒、よろしくお願い致します。 ちなみに、「既存のJARアーカイブのプラグイン」を使用した際のエラーは下記です。 eclipse.buildId=unknown java.version=1.6.0_01 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=ja_JP Framework arguments: -application Lib_test.application Command-line arguments: -application Lib_test.application -data D:\HOME\eclipse-rcp\foxworks/../runtime-Lib_test.application -dev file:D:/HOME/eclipse-rcp/foxworks/.metadata/.plugins/org.eclipse.pde.core/Lib_test.application/dev.properties -os win32 -ws win32 -arch x86 !ENTRY org.eclipse.osgi 2 0 2007-07-10 22:54:56.197 !MESSAGE One or more bundles are not resolved because the following root constraints are not resolved: !SUBENTRY 1 org.eclipse.osgi 2 0 2007-07-10 22:54:56.197 !MESSAGE Bundle initial@reference:file:../foxworks/Lib_test/ was not resolved. !SUBENTRY 2 Lib_test 2 0 2007-07-10 22:54:56.197 !MESSAGE Missing required bundle lib_o_0.0.0. !ENTRY org.eclipse.osgi 2 0 2007-07-10 22:54:56.197 !MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists: !SUBENTRY 1 org.eclipse.osgi 2 0 2007-07-10 22:54:56.197 !MESSAGE Bundle initial@reference:file:../foxworks/Lib_test/ [33] was not resolved. !SUBENTRY 2 Lib_test 2 0 2007-07-10 22:54:56.197 !MESSAGE Missing required bundle lib_o_0.0.0. !ENTRY org.eclipse.osgi 4 0 2007-07-10 22:54:56.209 !MESSAGE Application error !STACK 1 java.lang.RuntimeException: Application "Lib_test.application" could not be found in the registry. The applications available are: org.eclipse.equinox.app.error. at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:236) at org.eclipse.equinox.internal.app.EclipseAppContainer.start(EclipseAppContainer.java:92) at org.eclipse.equinox.internal.app.Activator.addingService(Activator.java:129) at org.osgi.util.tracker.ServiceTracker$Tracked.trackAdding(ServiceTracker.java:1064) at org.osgi.util.tracker.ServiceTracker$Tracked.track(ServiceTracker.java:1042) at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:967) at org.eclipse.osgi.framework.internal.core.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:94) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:1224) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:141) at org.eclipse.osgi.framework.internal.core.Framework.publishServiceEventPrivileged(Framework.java:1603) at org.eclipse.osgi.framework.internal.core.Framework.publishServiceEvent(Framework.java:1578) at org.eclipse.osgi.framework.internal.core.ServiceRegistrationImpl.<init>(ServiceRegistrationImpl.java:103) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.createServiceRegistration(BundleContextImpl.java:657) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:609) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:675) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:359) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176) 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.equinox.launcher.Main.invokeFramework(Main.java:504) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:443) at org.eclipse.equinox.launcher.Main.run(Main.java:1169) at org.eclipse.equinox.launcher.Main.main(Main.java:1144) !ENTRY org.eclipse.osgi 2 0 2007-07-10 22:54:56.214 !MESSAGE One or more bundles are not resolved because the following root constraints are not resolved: !SUBENTRY 1 org.eclipse.osgi 2 0 2007-07-10 22:54:56.215 !MESSAGE Bundle initial@reference:file:../foxworks/Lib_test/ was not resolved. !SUBENTRY 2 Lib_test 2 0 2007-07-10 22:54:56.215 !MESSAGE Missing required bundle lib_o_0.0.0. !ENTRY org.eclipse.osgi 2 0 2007-07-10 22:54:56.215 !MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists: !SUBENTRY 1 org.eclipse.osgi 2 0 2007-07-10 22:54:56.216 !MESSAGE Bundle initial@reference:file:../foxworks/Lib_test/ [33] was not resolved. !SUBENTRY 2 Lib_test 2 0 2007-07-10 22:54:56.216 !MESSAGE Missing required bundle lib_o_0.0.0. |
1