2013/02/12

.m2 を削除したらEclipseが起動しなくなった件

取り敢えずメモ的な・・・。
若干読みにくいのでいつか清書します(いつだろう。

----------

ちょっと訳あって、ローカルの.m2ディレクトリを削除したら、Eclipseがorg.eclipse.m2e.coreのロード中にそのまま帰らぬ人に・・・。
もー頼むわマジで・・・Zzz

ログを確認したところ、java.io.FileNotFoundExceptionが出ていたので、単純にMavenのライブラリが読み込めない事が原因だと思う。
まあそりゃファイルが無いんだから開けないのは当たり前として、起動すらしてくれないってどうなのよ。
これEclipse3.7の時もこうだったかな〜?
.m2を削除なんで昔から結構よくやってた気がするんだけど・・・。
(ちなみに今回はEclipse4.2)

とりあえず、無いなら作ればいいかなと単純な発想で、Eclipseで参照しているMavenプロジェクトをすべて手動でmvn compileしてみた。

git pull
mvn compile

git pull
mvn compile
svn update
mvn compile
 ・
 ・
 ・

たまにsvnのプロジェクトがあって若干イラっとしつつ、無事作業完了。
で、再度Eclipseを起動するも、状況変わらず・・・。

イラつくwww

で、ログを見たら上記Exceptionは出なくなったけど、そのかわりこんなん。


!ENTRY com.android.ide.eclipse.adt 1 0 2013-02-12 14:45:07.683
!MESSAGE No valid Android XML Editor Delegate found for file /xxxxxxxxxxxxx/pom.xml [Res null, type null]

知らんわ!!!

さすがにちょっと意味不明で詰んだかな〜って思ったんだけど、そういえば最後にEclipse閉じた時はこのpom.xmlを修正していた気がするなぁ、と。

なので、ワークスペースの読み込み中に/xxxxxxxxxxxxx/pom.xmlファイルを開こうとして開けなかった、とか開くための有効なエディタが無い?とかそんなかなあ?なんて予想。
そう考えると上記のエラーもなんとなくそんな感じなことを言ってる気がする。(求:英語力

取り敢えずそうだと仮定して、だったらワークスペースを読み込む時にそのファイルを開かないようにすればいいんじゃないかとワークスペースの設定ファイルを弄る事に。



$ ls -1 /Applications/eclipse/workspace/.metadata/.plugins
org.eclipse.cdt.core
org.eclipse.cdt.make.core
org.eclipse.cdt.managedbuilder.core
org.eclipse.compare
org.eclipse.core.resources
org.eclipse.core.runtime
org.eclipse.datatools.connectivity
org.eclipse.debug.core
org.eclipse.debug.ui
org.eclipse.e4.workbench
org.eclipse.egit.ui
org.eclipse.equinox.p2.discovery.compatibility
org.eclipse.equinox.p2.ui
org.eclipse.jdt.core
org.eclipse.jdt.debug.ui
org.eclipse.jdt.junit.core
org.eclipse.jdt.launching
org.eclipse.jdt.ui
org.eclipse.jst.j2ee
org.eclipse.jst.j2ee.web
org.eclipse.jst.jsp.core
org.eclipse.ltk.core.refactoring
org.eclipse.ltk.ui.refactoring
org.eclipse.m2e.core
org.eclipse.m2e.jdt
org.eclipse.m2e.logback.configuration
org.eclipse.mylyn.bugzilla.core
org.eclipse.mylyn.context.core
org.eclipse.mylyn.tasks.ui
org.eclipse.pde.api.tools
org.eclipse.pde.core
org.eclipse.rse.core
org.eclipse.rse.ui
org.eclipse.search
org.eclipse.team.core
org.eclipse.team.cvs.core
org.eclipse.team.svn.core
org.eclipse.team.ui
org.eclipse.ui.editors
org.eclipse.ui.ide
org.eclipse.ui.intro
org.eclipse.ui.workbench
org.eclipse.ui.workbench.texteditor
org.eclipse.wst.common.modulecore
org.eclipse.wst.common.snippets
org.eclipse.wst.internet.cache
org.eclipse.wst.jsdt.core
org.eclipse.wst.jsdt.ui
org.eclipse.wst.jsdt.web.core
org.eclipse.wst.server.core
org.eclipse.wst.server.ui
org.eclipse.wst.sse.ui
org.eclipse.wst.validation
org.eclipse.wst.xml.core
org.insightech.er

いっぱいありすぎ、どれだよ・・・、泣きそう・・・。
取り敢えずそれっぽい名前を、ってことでorg.eclipse.e4.workbenchの中をみてみると、workbench.xmiってファイルがあったので、これかなっと思い中を覗いてみる・・・。

上記の/xxxxxxxxxxxxx/pom.xml って名前をgrep掛けると、いくつかHitする箇所が出てきたので、これかな?なんて思いつつも・・・どこをどう直せばいいのかがまったくわからない(駄

なので、一旦workbench.xmiをリネームしてEclipseを起動してみると・・・ぉ、無事起動!

取り敢えず最悪の構築しなおしという結果は回避することが出来たけど、僕の設定したクールなビューやパースペクティブの設定も綺麗にすっ飛んでしまい、若干目頭が熱く・・・。

なので、一旦は挫折したworkbench.xmiの修正を再度着手することに。
まずは、<sharedElements>の<children>というエレメントの中に、tooltip="xxxxxxxxxxxxx/pom.xml"っていう記述が合ったので、この<children>エレメントをごそっと削除してEclipseを起動。

結果、デフォルトのワークベンチで起動・・・。
ダメかー、と思いログを見ると

Caused by: org.eclipse.emf.ecore.xmi.UnresolvedReferenceException: Unresolved reference '_ENOE0HHQEeKoX5lRCQvg0w'. (file:/Applications/eclipse/workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi, 400, 150)

なんかよーわからんけど、参照出来ないよって言われた。

再度、workbench.xmlを見てみると、<children>エレメントには各々 xmi:id="_ENOE0HHQEeKoX5lRCQvg0w" っていうのが設定されてて、その上位のエレメントを見ると、 selectedElement="_ENOE0HHQEeKoX5lRCQvg0w" って感じで子エレメントのIDが設定されていた。
なので、子エレメントを削除し、かつその親エレメントのselectedElementの値を削除して再度起動してみたところ・・・。

出来た!!!
ビューもパースペクティブも綺麗に復元された、超感激・・・。

以前まではEclipseが起動しなくなるたび、入れ直しという愚直な行為を行なっていたが、ちょっとずつトラブルシュートが出来るようになってきたみたいで嬉しい・・・。
これからも精進しよう・・・。

----------


ちなみに、現場のJavaなおねーさんに教えてもらったところ、.m2配下はちょっとした設定等も入ることがあるらしいので、消すのであれば.m2/repository/配下を消すようにした方が安全とのことでした。
今までずっと.m2配下をごそっと消してたわ〜・・・。