Update Site のURL
Update Siteのsite.xmlを別名(site-terminal.xml)にしていたのだが,ある日突然,ハマった.
現象確認
アップデートサイトにあるsite-terminal.xmlを使って更新をかけようとすると,
サイトにフィーチャーが無いかのような挙動を示す.
ログはこんな感じ.
!ENTRY org.eclipse.update.core 4 0 2007-04-28 17:47:41.021 !MESSAGE Error retrieving "feature.xml". [error in opening zip file] !STACK 0 java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:203)
無論,feature.xmlの存在は確認済み.
とりあえず,org.eclipse.update.core のトレースを有効にして出力を眺めてみる.
これじゃあ解らん.
デバッガと仲良し.
例外が出た辺りから遡って,変数を眺めてみる.URLを見てみる.
http://pizza-ipa-oss.sourceforge.jp/update31/site-terminal.xml/site.xml
なんじゃこりゃ.不要なsite.xmlが付いとるぞ.
コード解析
解析ってほどでもないか.スタックトレースを遡って怪しいところを発見.
//org.eclipse.update.internal.core.InternalSiteManager#createSite // see if we need to (and can) fix url by adding site.xml to it try { if ( (url.getRef() != null) || (url.getFile().endsWith(Site.SITE_XML) || (url.getProtocol().equalsIgnoreCase("file")))) { //$NON-NLS-1$ fixedUrl = url; } else if (url.getFile().endsWith("/")) { //$NON-NLS-1$ fixedUrl = new URL(url, Site.SITE_XML); } else { fixedUrl = new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getFile() + "/" + Site.SITE_XML); //$NON-NLS-1$ } } catch (MalformedURLException mue) { fixedUrl = url; }
関数の頭にコメントもついている.
要するに,fileプロトコルにするか,リファレンスを置くか,いずれかの対策をしないと,site.xmlを強制的につける仕様*1らしい.
ここまで解れば,
http://pizza-ipa-oss.sourceforge.jp/update31/site-terminal.xml#
ちょっと謎なのは
Platform3.2.1で大丈夫だったのに,3.2.2でダメになった理由.これが良く判らない.
確かに,CVSのログを見てみると,件の処理は何回か変更になっている.
けれど,3.2.1の頃にはもう現状のものになっている様子.
執拗にやるなら,jarファイル解いて差分取りゃいいのですが…いいや,気にせず先に進もう.