Mandriva Linux 2010.1上のEclipseに関する幾つかのメモ(前半)
Eclipseが起動しない(スプラッシュウィンドウの先に進まない)件について
パッケージ(「eclipse-platform」と任意の「eclipse-*」のプラグインパッケージ)をインストールして起動しようとしたが、いきなり「正常に起動しない」という問題が発生した。スプラッシュウィンドウのバーが一番右までいった後でエラーダイアログが出て終了し、書かれているログファイルの中には「java.lang.RuntimeException: Widget disposed too early!」というメッセージが含まれていた。
調べたところ
https://qa.mandriva.com/show_bug.cgi?id=55887
が見つかり、XULRunnerライブラリの場所に関する指定が足りていないということが分かった。Mandriva Linux 2010.1では/usr/lib(64)/eclipse/eclipse.iniの中のorg.eclipse.swt.browser.XULRunnerPathの値をXULRunnerのディレクトリ/usr/lib(64)/xulrunner-1.9.2.6にするという形になる。もちろん、XULRunnerのパッケージ(パッケージ名は「xulrunner」)がなければインストールしておく必要があるが、Eclipseの依存パッケージとして自動的に入るようになっているようだ。
下はx86_64版ディストリの例。
[追記]ファイル名: /usr/lib64/eclipse/eclipse.ini
-Dorg.eclipse.swt.browser.XULRunnerPath=/usr/lib64/xulrunner-1.9.2.6
下はi586(32bit)版ディストリの例。
[追記]ファイル名: /usr/lib/eclipse/eclipse.ini
-Dorg.eclipse.swt.browser.XULRunnerPath=/usr/lib/xulrunner-1.9.2.6
ディストリやXULRunnerのバージョンによってはXULRunnerのディレクトリ名が変わることがある。今後XULRunnerのバージョンが上がった場合、この部分も更新する必要がある。
(2010/8/11)ダイアログ上のエラーメッセージは「An error has occurred. See the log file /home/[ユーザ名]/workspace/.metadata/.log.」のようになり、そのファイルを見ると
!SESSION 2010-xx-xx xx:xx:xx.xxx ----------------------------------------------- eclipse.buildId=M20090211-1700 java.version=1.6.0_18 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP Command-line arguments: -os linux -ws gtk -arch x86_64 !ENTRY org.eclipse.equinox.p2.engine 4 4 2010-xx-xx xx:xx:xx.xxx !MESSAGE An error occurred while collecting items to be installed !SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2010-xx-xx xx:xx:xx.xxx !MESSAGE No artifact repository available. !ENTRY org.eclipse.ui.workbench 4 0 2010-xx-xx xx:xx:xx.xxx !MESSAGE Widget disposed too early! !STACK 0 java.lang.RuntimeException: Widget disposed too early! at org.eclipse.ui.internal.WorkbenchPartReference$1.widgetDisposed(WorkbenchPartReference.java:171) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:117) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1158) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1182) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1163) at org.eclipse.swt.widgets.Widget.release(Widget.java:1026) at org.eclipse.swt.widgets.Control.release(Control.java:3221) at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1184) at org.eclipse.swt.widgets.Widget.release(Widget.java:1029) at org.eclipse.swt.widgets.Control.release(Control.java:3221) at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1184) at org.eclipse.swt.widgets.Widget.release(Widget.java:1029) at org.eclipse.swt.widgets.Control.release(Control.java:3221) at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1184) at org.eclipse.swt.widgets.Canvas.releaseChildren(Canvas.java:211) at org.eclipse.swt.widgets.Decorations.releaseChildren(Decorations.java:466) at org.eclipse.swt.widgets.Shell.releaseChildren(Shell.java:1948) at org.eclipse.swt.widgets.Widget.release(Widget.java:1029) at org.eclipse.swt.widgets.Control.release(Control.java:3221) at org.eclipse.swt.widgets.Widget.dispose(Widget.java:442) at org.eclipse.swt.widgets.Shell.dispose(Shell.java:1893) at org.eclipse.swt.widgets.Display.release(Display.java:3083) at org.eclipse.swt.graphics.Device.dispose(Device.java:237) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:129) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212) !ENTRY org.eclipse.ui.workbench 4 0 2010-xx-xx xx:xx:xx.xxx !MESSAGE Widget disposed too early! !STACK 0 java.lang.RuntimeException: Widget disposed too early! at org.eclipse.ui.internal.WorkbenchPartReference$1.widgetDisposed(WorkbenchPartReference.java:171) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:117) (以下略)
のようになっている。
日本語化
言語パックによる方法
「Help - Software Updates」で「Add Site」から「http://download.eclipse.org/technology/babel/update-site/ganymede」のようなURLを指定して日本語言語パックを簡単に入手/適用することができるが、プラグインによっては日本語化されず、また、手元の環境では適用後に何故か同時使用ファイル数が上限(1024/既定値)を超えてしまい、/etc/security/limits.confで「[ユーザ名] - nofile 2048」のように記述してログインし直す必要もあった。あまりおすすめはできない。
Pleiadesによる方法
Pleiades(mergedoc.sourceforge.jp/)が配布するパッケージを用いることで、プラグインの中のユーザインターフェースも更に日本語化でき、言語パックがなくても主要なユーザインターフェースについてもそれと同様に日本語化される。「Pleiades 本体ダウンロード」の下のリンクからファイルをダウンロードし、ドキュメント(readme/readme_pleiades.txt)の通りに配置するのだが、後半に記述するような注意点がある。
使用したバージョン: