Meblog

このブログ記事は個人の見解であり、所属する組織の公式見解ではありません

認証付きプロキシでgradlewビルドする

前座

僕の職場の低スペPCでは、だんだんAndroidStudioが満足に動かなくなってきた。普通に使う分にはギリギリ使える感じなんだけど、ブラウザと行き来したり、同時に画像編集をしたりなんかは望むべくもない。そこで、以前よりEmacsでコードを買いてターミナルよりgradlewコマンドでビルドしていた。そんなにターミナルにお世話にならない人たちには馴染みがないかもしれないけど、以下のコマンドでターミナルからビルドすることができる。

$ ./gradlew assembleDebug

毎回場所を忘れるので、find . -name "*.apk"で探してくる。ちょっとビルドしたいときには非常に便利だ。

問題

ところが、最近になって突然、以下のエラーが出るようになった。

Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"

会社の環境は認証付きプロキシを使って外部と接続してるんだけど、その認証がうまくいっていないっぽい。以前は使えたはずなのに。。エラーの内容からすると、プロキシを通そうとしているんだけど、認証は通らないようだ。奇妙なことに、AndroidStudioではうまくビルドできている。そんなわけで、多少の不便は感じつつも数ヶ月放置していた。

解決

Java8のどこからかのバージョンからBasic認証が禁止されていたみたい*1。そしてこれを無効化し、Basic認証を使えるようにするにはコマンドライン引数を渡してやればいいみたい。

gradlewを開き、以下を追加する。

DEFAULT_JVM_OPTS="-Djdk.http.auth.tunneling.disabledSchemes=\"\""

これで通った!!