読者です 読者をやめる 読者になる 読者になる

Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

MacのEclipseでmarket placeが使えない[解決済み]

スポンサードリンク

f:id:fa11enprince:20160417051906j:plain 自分のmacOS SierraでeclipseのMarket PlaceからEclipse Tomcat Plugin 9.1.2をいれようとするとエラーが発生したのでその時のメモです。根本的な解決は行えませんでしたが、一応JavaとEclipseを入れ直すことで解消しました。
元々の環境はeclipse Mars.2, jdk 1.8.0_51でした。

その時の備忘録です。 同じ問題にはまっている人が多そうなのでメモとして書いておきます。
一番お手軽な解決策はjavaとeclipseをほぼ完全消去(ほぼ、というのは完全に消しされていないものがあるような気がするからです)した上で、
javaとeclpseをいれなおせばOKです。

これは想像なのですが、おそらく
${JAVA_HOME}/jre/lib/security/cacerts
にあるjava CAがなぜか壊れていたのだと思います。

Stackoverflowで類似の質問がめちゃくちゃありましたがどれも解決に至らず。

以下長々とした記録です。

エラー発生

日本語

http://tomcatplugin.sf.net/update/site.xml のリポジトリーを読み取ることができません。  
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

英語

Unable to read repository at http://tomcatplugin.sf.net/update/site.xml.  
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

http://tomcatplugin.sf.net/update/site.xml のリポジトリーを読み取ることができません。
のエラーが出た

試したこと

「直接」から「ネイティブ」に変更

効果なし

javaにサーバ証明書を入れる

効果なし

まずFireFoxなどでhttp://tomcatplugin.sf.net/update/site.xmlにアクセスします。
たぶんsource.forgenetに飛ばされます。
ブラウザで保護された通信から証明書を表示します。

GeoTrust Global CA  
  名前忘れたけどここに中間証明書  
    *.sourceforge.net  

Firefoxならブラウザ上からかきだせます
知識不足でルートの方を追加すればいいのかルートじゃない方を追加すればいいのかわからず
結局全部入れました。
全部デスクトップに書き出します。

JAVA_HOMEが設定されていないと不便なので設定します
僕の場合はjdk.1.8.51でした。
ここはWindowsとだいぶ違うところです。/usr/libexec/java_homeというjavaのバージョンを管理してくれているツールがあります。

$ vi ~/.bashrc  
export JAVA_HOME=`/usr/libexec/java_home`  
$ bash  
$ echo ${JAVA_HOME}  
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home  

そのあと

$ ls ${JAVA_HOME}/jre/lib/security/cacerts  
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/security/cacerts  

となっていることを確認して、

$ sudo keytool -import -trustcacerts -file ~/Desktop/GeoTrust\ Global\ CA.cer -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias ca -storepass "changeit"  
証明書は、別名<geotrustglobalca>のキーストアにすでに存在します  
追加しますか。[いいえ]:  y  
証明書がキーストアに追加されました  

あれ?すでにあるんかい…と思いながら続行
ちなみにchangeitがデフォルトのキーストアのパスワードです。
ここでmarket placeにつなぐも同様のエラー

$ sudo keytool -import -trustcacerts -file ~/Downloads/sourceforge.net.crt -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias sourceforge -storepass "changeit"  
この証明書を信頼しますか。 [いいえ]:  y  
証明書がキーストアに追加されました  

ここでmarket placeにつなぐも同様のエラー

よくわかってないので中間証明書も入れておきました

sudo keytool -import -trustcacerts -file ~/Downloads/GeoTrustSSLCA-G3.crt -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias geotrustsslca -storepass "changeit"  

ここでmarket placeにつなぐも同様のエラー

一応確認して見るも…ちゃんと登録されてる

$ keytool -v -list -keystore ${JAVA_HOME}/jre/lib/security/cacerts | less  

eclipse.iniに設定を追加

-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/security/cacerts  
-Djavax.net.ssl.trustStorePassword=changeit   

2行を追加しました。
効果はありませんでした。

eclipseのネットワーク設定をいじくる

効果なし
直接になっているものをマニュアルやネイティブに変える

以前SOCKSで似たような問題が出たが、消すことで解消したが、消せない
→これはproxy環境下の話で、現在のバージョンではsocksに情報を入力しなければいいそうな。

eclipseの利用可能なサイトの一覧をいじくる

効果なし

前準備として一覧を消しておく。

$ /Applications/Eclipse.app/Contents/Eclipse/p2/org.eclipse.equinox.p2.repository  
rm -rf cache/*  

eclipseを立ち上げ直して
インストール/更新から
利用可能なサイト
http://tomcatplugin.sf.net/update/
を追加
これを選んで際ロード
→エラー

解決しないので最新版のEclipseを入れ直す

Eclipse MarsからEclipse neon 2に
→効果なし

たまにeclipseのコンソールに設定した覚えのないproxyの除外設定が出る。

効果なし
Macのネットワーク設定を見るとproxyがおかしい
システム環境設定 > ネットワーク > プロクシタブ > プロキシ設定を使用しないホストとドメイン
*.local, 169.254/16
と書かれているので消す。
これ自体は何の影響もなかった
これ自体はMacの不具合として書き込みが多数あった。

javaとeclipseを完全消去してjavaとeclipseを入れ直す。

治りました!!
eclipseはデフォルトの状態なら$HOME/eclipseにあると思うのでフォルダごと削除
javaについてはOracleの公式の説明があるんだけど、なんか足りない気がする…ので
http://www.toraneco.com/blog2/?p=1795
を参照。

$ sudo rm -rf /Library/Internet Plug-Ins/JavaAppletPlugin.plugin  
$ sudo rm -rf /Library/LaunchAgents/com.oracle.java.Java-Updater.plist  
Password:  
$ sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane  
$ sudo rm -rf /System/Library/Java/Support/CoreDeploy.bundle  
rm: cannot remove ‘/System/Library/Java/Support/CoreDeploy.bundle/Contents/Download Java Components.app/Contents/_CodeSignature/CodeResources’: Operation not permitted  
以下opreration not permittedのエラーが続く...  
$ sudo rm -rf ~/Library/Preferences/com.apple.java.util.prefs.plist  
$ sudo rm -rf ~/Library/Preferences/com.apple.java.util.prefs.plist.lockfile  
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk  

エラーでたけど気にしない・・・
最新のJDKを入れる(最新じゃなくて同じバージョンでもよかったかもしれない)
最新のeclispeをインストールし直す。

無事つなぐことができました。
もし根本的な理由がわかる人がいましたらお知らせいただけると幸いです。

参考

http://stackoverflow.com/questions/7625943/unable-to-read-repository-at-http-download-eclipse-org-releases-indigo
http://qiita.com/nenokido2000/items/b36b6e5f0854d7d63ba6
http://www.toraneco.com/blog2/?p=1795