- PR -

Eclipseのプラグイン開発時に「java.lang.NoClassDefFoundError」

1
投稿者投稿内容
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 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/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 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+

当方、超初心者で勉強させていただいている最中なので、間違っているかも
しれませんが…
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 2007-07-09 16:13
ようこさん、返信ありがとうございました。

ご提示頂いた記事を拝見しましたが、Strutsアプリケーションに関する内容ですね。
似たような現象の可能性は考えられるのかもしれないのですが、今作成しているアプリケーションに照らし合わせるには、私自身力不足のようです。

問題は、何故RCPとして起動するとエラーが出て、javaプログラムとして起動するとエラーが出ないかなのですが、、、全く分かりません。差が分かれば調べようがあるのですが、手掛かりが見えない状態です。
恐らく、何らかの手順を踏まないといけないのだろうと思いますが、、、

EclipseRCPの起動の仕組み(プラグインの依存や外部JARを読み込む仕組み)か、抜本的な逃げ道があれば良いのですが、現状見えておりません。

皆さん、何卒よろしくお願い致します。

◆追記ですが、Eclipse自体の異常を考え、再インストールと、バージョン3.3に同じプログラムを移し変えて起動してみましたが、結果は同じでした。

[ メッセージ編集済み 編集者: しんい 編集日時 2007-07-09 16:16 ]
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)