前回、UEFIに翻弄されつつWindows 10をインストールしたマシンにEclipseを入れたい。
JDK入れて、普通にEclipse入れればなんてことないはずだけど、なぜかはまったので記録しとく。
インストール直後はまったく問題がなかった
JDKのインストール
ここから普通にOracleに行って最新のJDKをインストール。
今の環境は64bit版が必要なため、Windows x64版 JDK(このときは8u121)を使用した。
Eclipseのインストール
次に上記トップページから「DOWNLOAD」をクリックしてダウンロードページへ。
左側の「Get Eclipse Neon」セクションの「DOWNLOAD 64BIT」をクリック、最新のインストーラー(このときはNEON.3 Release (4.6.3))の「eclipse-inst-win64.exe」をダウンロードして、「Eclipse Java EE IDE for Web Developers」をインストール。
ここまでは全く問題なし。
翌日、突然Eclipseが立ち上がらなくなる
インストールした翌日、Eclipseを立ち上げると「エラーが出たからログ見てね。」というダイアログが突然出てきて立ち上がらない。
ログ(抜粋)を見ると
!ENTRY org.eclipse.osgi 4 0 2017-04-11 08:58:33.292
!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTException: Unsupported or unrecognized format
at org.eclipse.swt.SWT.error(SWT.java:4533)
(略)
at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
!ENTRY org.eclipse.core.runtime 4 0 2017-04-11 08:59:34.716
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.lang.IllegalStateException: BundleContext is no longer valid
at org.eclipse.osgi.internal.framework.BundleContextImpl.checkValid(BundleContextImpl.java:984)
(略)
at java.lang.Thread.run(Thread.java:745)
となっていて、最初の「org.eclipse.swt.SWTException: Unsupported or unrecognized format
」が起こったために、次の「java.lang.IllegalStateException: BundleContext is no longer valid
」が発生したように見える。
が、訳が分からない。
インストールした当日はちゃんと動いていて、それからなにも変更してないし。
ググってみるとセキュリティソフトが邪魔している例があった
とりあえずググってみると、2件ほど「セキュリティソフトのせいじゃないか?」という記事を見つけた。
確かにこのマシンにはセキュリティソフトをインストールしてるけど、それを見越してセキュリティソフトの適用除外のディレクトリをインストーラーに指定して、インストールをしてる。
今回はこれに当てはまらないよなぁ… と思ったときにふと思い出した。
「Windowsのログオンユーザーのホームディレクトリ直下に『.eclipse』『.p2』ていうディレクトリがなかったか?」
「.p2」「.eclipse」ディレクトリがセキュリティソフト監視対象になっていた
c:\ユーザー\<ユーザー名>
のディレクトリに行くと、やっぱり「.eclipse」「.p2」というEclipseのインストーラーが作ったディレクトリがあった。
しかも、Windowsログオンユーザーのホームディレクトリは、セキュリティソフトの監視対象に入っている。
そこで、この二つのディレクトリをセキュリティソフトの監視対象外のディレクトリに、今回はEclipseのインストールされたディレクトリに移動させらないかと考えた。
「.p2」「.eclipse」ディレクトリをセキュリティソフト監視対象外の場所にするには?
arbk-works 4 users 2 pocketsEclipse を起動すると作られる .eclipse や .p2 や .oracle_jre_usage の場所を変...http://aruo.net/arbk/blog/article/move_eclipse_p2_oracle_jre_usage_directoriesいつの頃からか Eclipse を起動すると ユーザーディレクトリ(Linux なら /home/USER名, Windows なら C:\Users\USER名 とか)に .eclipse や .p2 や .oracle_jre_usage なんて ディレクトリが作成されるようになりました. Linux はまだしも Windows でユーザープロ...
によると、
.eclipse と .p2 は Eclipse が作成するディレクトリです.
.oracle_jre_usage は Java が作成するディレクトリです.
いずれも デフォルトでは Java の user.home プロパティ で示されるディレクトリに作成されます.
通常, user.home には,
Linux なら 環境変数 HOME の値(/home/USER名 とか)
Windows なら 環境変数 USERPROFILE の値(C:\Users\USER名 とか)
が設定されます.
ということらしく、確かにディレクトリの位置はこの通りになってる。
これを変えるには環境変数を書き換えるか、直接Javaのuser.homeプロパティを書き換えるかだが、今回はuser.homeプロパティをeclipse.iniで書き換える方法にした。
eclipse.iniの「-vmargs」セクションに「-Duser.home=<移動先>」を書き加えることで、user.homeプロパティをどこにでも変更できる。
-vmargs
-Duser.home=c:\eclipse\
-Dosgi.requiredJavaVersion=1.8
セキュリティソフトに監視させないため、ディレクトリを移動させたら別の問題が発生
以上の情報から、
- エキスプローラーで「.eclipse」「.p2」をセキュリティソフトの監視対象外の場所に移動させる。
- 上記の位置をeclipse.iniで指定する。
とすれば解決するはず! と思ってやってみた。すると…
無情にも「共有ライブラリが見つからない。」とログも出さずにエラーとなってしまって立ち上がらない。
大量のリンク切れが発生していた
そこでeclipse.iniや他の設定ファイルをのぞいてみると、
--launcher.library
C:\Users\<ユーザー名>\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.401.v20161122-1740
のように、フルパスでライブラリ名が指定されているところが大量に見つかった。
「.eclipse」「.p2」を動かしてしまったため、それに従ってこの辺も書き換えないといけないらしい。
が、あまりにも多いうえに、すべて書き換えられるか不安でしょうがないので、別の手を考えることに。
インストーラ実行環境のuser.homeを変更する
上記の設定ファイルはインストーラーの実行とともに生成される。
なので、インストーラー実行中のuser.homeをセキュリティソフトの監視対象外にし、eclipse.iniでそこを指定すれば思った通りの環境ができるはず。
そこで、
- コマンドプロンプト(管理者)を起動
- コマンドプロンプト上で「set USERPROFILE=”<.p2 .eclipceを作る場所>”」を実行
- コマンドプロンプト上でインストーラーを実行。
とすれば、環境変数USERPROFILEがuser.homeに設定されるためうまくいくはず。
それでもだめだった
しかし、やってみたものの、「.eclipse」「.p2」ともに従来通りWindowsのログオンユーザーのホームディレクトリにできてしまい、インストール当日はよいのだけど、翌日にはまた起動しなくなってしまった。
インストーラーを使わずにチャレンジ
こうなってくると、インストーラーが「.eclipse」「.p2」を作ってしまうため、手も足も出ない。
そこで、インストーラーを使わずにインストールすることをチャレンジしたいと思う。
長くなったので、それは次のエントリーで。