Scalaの本を読み続けているのですが、REPL上ではミスが許されないのでそれなりの規模のコードを書くのはつらい。
という訳でIDEを利用しての開発を行おうと考え、手っ取り早くすみそうだと感じたeclipseをインストールしようとしているのですがうまく行かない。
Macへのeclipseインストール
ネット上を見る限りでは、Macへeclipseをインストールするのは何も難しいことではなく
- ダウンロード
- 解凍
- eclipse.appのダブルクリック
で終わるように思う。
これは、Windowsと異なりMacでは最初からJavaがインストールされているためにそれらのことを考えなくていいかららしい。
どこにもミスが介在するような余地が残されていないように感じるのだが、起動しようとするとエラーが発生してしまい起動が出来ないのである。
とりあえず状況の整理だ
まずは、障害対策の基本に立ち返って現状の整理を行う。
- Javaのバージョン
javaが正しく認識できるか?また、バージョンはいくつだろうか?
確かめるためにはターミナル上で「java -version」で確認が出来る
java version “1.6.0_26”
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
うん、一応認識しているね。
まぁ、この辺りはMacの場合はユーザー側ではなくApple側が管理しているゾーンのような気がするのでそんなに心配はしていないんだけど。
- ダウンロードしているファイルが間違っていないか
次にありがちなのが、一生懸命インストールしようとしている対象が間違っているというオチ。
MacOSなのにWindows版をインストールしようとしていたり32bitOSに64bitOS向けのものを利用していたり・・・だ。
私が利用している2011年に新発売されたモデルのiMacはデフォルトで64bitが利用されているようだ
Mac OS X v10.6:64 ビットのカーネルを使う Mac
http://support.apple.com/kb/HT3770?viewlocale=ja_JP
念のためにシステムプロファイラを起動してみても、「64ビットカーネルと拡張機能」項目は「はい」になっている。
先のjavaバージョン情報を見ても、64-Bit Server VMとなっているし64bitでいいようだ。
最新のIndigoはこちらからダウンロードが可能なので、MacOSX向けの64bit版を選ぶことになる
Eclipse Downloads
http://www.eclipse.org/downloads/
やりたいのはScalaなので何でもいいのかもしれないが、Javaが入っているにこしたことは無いので「Eclipse IDE for Java EE Developers」を選択してダウンロード。解凍する
やっぱりエラーになる
解凍したEclipse.appを起動すると、エラーになってしまう。
ログの中身を全部出すと長くなってしまうのだが、かいつまんで出せるほど詳しくもないので出してみる。うまく行ってない人間が中途半端な情報を出すとろくなことが起きないので。
!SESSION 2011-07-18 00:44:05.827 ———————————————–
eclipse.buildId=I20110613-1736
java.version=1.6.0_26
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=ja_JP
Framework arguments: -product org.eclipse.epp.package.jee.product -keyring /Users/krote/.eclipse_keyring -showlocation
Command-line arguments: -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.jee.product -keyring /Users/krote/.eclipse_keyring -showlocation!ENTRY org.eclipse.equinox.p2.core 4 0 2011-07-18 00:44:07.140
!MESSAGE Provisioning exception
!STACK 1
org.eclipse.equinox.p2.core.ProvisionException: Unknown repository type at file:/Users/krote/Dev/eclipse/configuration/org.eclipse.osgi/bundles/281/data/listener_1925729951/.
at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.fail(AbstractRepositoryManager.java:393)
at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.doCreateRepository(AbstractRepositoryManager.java:282)
at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.createRepository(MetadataRepositoryManager.java:41)
at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.initializeMetadataRepository(RepositoryListener.java:109)
at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.<init>(RepositoryListener.java:59)
at org.eclipse.equinox.internal.p2.reconciler.dropins.DropinsRepositoryListener.<init>(DropinsRepositoryListener.java:82)
at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.watchDropins(Activator.java:532)
at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.start(Activator.java:172)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1130)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
!SUBENTRY 1 org.eclipse.equinox.p2.metadata.repository 4 1005 2011-07-18 00:44:07.140
!MESSAGE Unknown repository type at file:/Users/krote/Dev/eclipse/configuration/org.eclipse.osgi/bundles/281/data/listener_1925729951/.!ENTRY org.eclipse.equinox.p2.reconciler.dropins 4 0 2011-07-18 00:44:07.142
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.start() of bundle org.eclipse.equinox.p2.reconciler.dropins.
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1130)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
Caused by: java.lang.IllegalStateException: Could not create metadata repository for: file:/Users/krote/Dev/eclipse/configuration/org.eclipse.osgi/bundles/281/data/listener_1925729951/
at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.initializeMetadataRepository(RepositoryListener.java:112)
at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.<init>(RepositoryListener.java:59)
at org.eclipse.equinox.internal.p2.reconciler.dropins.DropinsRepositoryListener.<init>(DropinsRepositoryListener.java:82)
at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.watchDropins(Activator.java:532)
at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.start(Activator.java:172)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
… 12 more
Root exception:
java.lang.IllegalStateException: Could not create metadata repository for: file:/Users/krote/Dev/eclipse/configuration/org.eclipse.osgi/bundles/281/data/listener_1925729951/
at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.initializeMetadataRepository(RepositoryListener.java:112)
at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.<init>(RepositoryListener.java:59)
at org.eclipse.equinox.internal.p2.reconciler.dropins.DropinsRepositoryListener.<init>(DropinsRepositoryListener.java:82)
at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.watchDropins(Activator.java:532)
at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.start(Activator.java:172)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1130)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatc
hEvent(StartLevelManager.java:438)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)!ENTRY org.eclipse.osgi 4 0 2011-07-18 00:44:07.529
!MESSAGE Application error
!STACK 1
org.osgi.service.application.ApplicationException: No application id has been found.
at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:262)
at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
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:344)
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: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:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
さてはて。気になるところとしては最初に発生している「org.eclipse.equinox.p2.core.ProvisionException: Unknown repository type at file」ですよね。
ただ、だからどーせいっちゅーねん!って感じ。
Javaのバグなのか?
ちょっと気になるものを見つけた
https://bugs.eclipse.org/bugs/show_bug.cgi?format=multiple&id=318046
うーん、コメント長いwwww
読んでいけばわかるのだろうか。今日はちょっとここまでにしよう。
ただ、「Scalaがしたい」のであって「Eclipseを使いたい」という訳ではない。
なので、いっそのこと違うIDEを利用するということも視野に入れるべきなんだろう。
こんなことに多大に時間を費やしてしまっていてなんだかバカバカしくなってきてしまったし・・・。
というわけで、続かないかもしれません><
/Library/Java/Extensionsを /System/Library/Java/Extensions.old へいったんrenameして"eclipse -clean" してからインストールしろだってさ
おおぉ!さすがkokoroっち。頼りになる!
やってみるね!
とりあえず、なんとか解決したのでメモ
http://d.hatena.ne.jp/krote/20110718/1311005302