web-dev-qa-db-ja.com

Gradleプロキシ構成

JenkinsのGradle/Artifactory統合を使用するには、プロキシサーバーを介したGradleからのWebアクセスが必要です。問題の考えられる原因を減らすために、build.gradleにArtifactoryプラグインを手動で追加し、コマンドラインから実行します。

apply {
    apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}

次の this の説明ホームディレクトリの.gradle/gradle.propertiesで以下を指定しました。

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx

上記のプロキシ構成(それ以外の場合は動作することがわかっている)では、失敗します。

11:33:17.699 [エラー] [org.gradle.BuildExceptionReporter]原因:Java.io.IOException:サーバーがHTTP応答コードを返しました:URLの407: http://gradle.artifactoryonline.com/gradle/ plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle

選択できるプロキシサーバーは2つあり、1つは常に407プロキシ認証が必要です)で応答し、もう1つは502で応答します(悪いゲートウェイ)、したがって明らかに、proxyHostとproxyPortオプションが使用されます。

ユーザー名(Active Directoryユーザーに基づく)にバックスラッシュが含まれているため、\\\の両方を試しましたが、どちらも機能しませんでした。指定されたユーザーは、マシンおよびActive Directoryにログインしているユーザーとは異なります。このユーザーの資格情報はプロキシに対して有効ではないため、別のユーザーを指定できる必要があります。

JenkinsまたはArtifactoryのGUIで同じオプションを設定すると機能しました。

127
Daniel Beck

very単純な「URLをリクエスト」Javaプログラムを使用して、問題を再現することができました。

http.proxyUserhttp.proxyPasswordは、一般的ではありますが、標準ではないオプションのようです。これらは GradleチュートリアルからリンクされたJavaリファレンスページ ; Gradleマニュアルにはそれらが記載されていますが。

プロキシ認証をサポートしたいJavaプログラムのようです 手動でこれを行う必要があります (リンクされたページのコードを使用してこれを行うことができました)。


この問題(および修正)を Gradleの問題追跡ツール に提出しました。発生した問題GRADLE-1556は1.0マイルストーン-8で解決されました(2012年2月)

22
Daniel Beck

ダニエルの応答に対する改良:

HTTPのみのプロキシ設定

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128

HTTPSのみのプロキシ設定

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

HTTPおよびHTTPSプロキシ設定の両方

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

ユーザーとパスワードを使用したプロキシ構成

gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128-Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129 -Dhttps.proxyUser = user -Dhttps.proxyPassword = pass -Dhttp.proxyUser = user -Dhttp。 proxyPassword = pass

私のために働いた(gradle.propertiesがhomedirまたはproject dirのいずれかで、ビルドがまだ失敗していました)。この回避策を与えたgradleで問題を指摘してくれてありがとう。

Updateこれらのプロパティをgradle-wrapper.propertiesに入れることもできます(参照: https://stackoverflow.com/a/50492027/474034 )。

186

これは私のgradle.propertiesです。これらのHTTPS部分に注意してください

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
48
Kampau Ocu

build.gradleには、シェル環境の通常のLinuxプロキシ設定HTTP_PROXYおよびHTTPS_PROXYを使用する次のタスクがあります。

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.Host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.Host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
        }
    }
}

build.dependsOn setHttpProxyFromEnv
43
SourceSimian

以下を試してください:

gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword

23
Raphael Vitor

私の場合、この構成をプロジェクトのgradle.propertiesファイルに追加して動作します。build.gradleファイルは次のとおりです。

systemProp.http.proxyHost=proxyURL
systemProp.http.proxyPort=proxyPort
systemProp.http.proxyUser=USER
systemProp.http.proxyPassword=PASSWORD
systemProp.https.proxyHost=proxyUrl 
systemProp.https.proxyPort=proxyPort
systemProp.https.proxyUser=USER
systemProp.https.proxyPassword=PASSWORD

ここで、proxyUrlはプロキシサーバーのURLです( http:// .... 。)

proxyPortはポートです(通常は8080)

USERは私のドメインユーザーです

パスワード、パスワード

この場合、httpとhttpsのプロキシは同じです

21
rtrujillor

C:\ Users\your username\.gradle\gradle.propertiesでチェックアウトします。

systemProp.http.proxyHost=<proxy Host>
systemProp.http.proxyPort=<proxy port>
systemProp.http.proxyUser=<proxy user>
systemProp.http.proxyPassword=<proxy password>
systemProp.http.nonProxyHosts=<csv of exceptions>
systemProp.https.proxyHost=<proxy Host>
systemProp.https.proxyPort=<proxy port>
systemProp.https.proxyUser=<proxy user>
systemProp.https.proxyPassword=<proxy password>
systemProp.https.nonProxyHosts=<csv of exceptions>
10
Charles Tempo

gradle.propertiesファイルが存在するプロジェクトフォルダー内にbuild.gradleというファイルを作成します。次のエントリを追加します

     systemProp.http.proxyHost=proxy_url
     systemProp.http.proxyPort=proxy_port
     systemProp.http.proxyUser=USER
     systemProp.http.proxyPassword=PWD
     systemProp.https.proxyHost=proxy_url 
     systemProp.https.proxyPort=proxy_port
     systemProp.https.proxyUser=USER
     systemProp.https.proxyPassword=PWD

プロキシにDNSを使用している場合は、systemProp.https.proxyHost=www.proxysite.comのように追加します

IPの場合は、http://またはhttps://なしでIPを指定するだけです
チェック gradle official doc 詳細およびグローバルレベルでのプロキシの設定

10
user2720864

SourceSimianの応答に基づきます。これは、Windowsドメインユーザーアカウントで機能しました。 Usernamedoes notにドメインが含まれていることに注意してください。

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.Host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.Host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
            System.setProperty("${base}.proxyUser", "Username")
            System.setProperty("${base}.proxyPassword", "Password")
        }
    }
}
build.dependsOn setHttpProxyFromEnv
6
Kunal B.

プロキシの背後でGradleを使用するには2つの方法があります:

コマンドラインで引数を追加する

(ギヨーム・ベルシュの投稿より)

Gradleコマンドにこれらの引数を追加します。

-Dhttp.proxyHost=your_proxy_http_Host -Dhttp.proxyPort=your_proxy_http_port

またはhttpsを使用している場合はこれらの引数:

-Dhttps.proxyHost=your_proxy_https_Host -Dhttps.proxyPort=your_proxy_https_port

Gradle設定ファイルに行を追加します

gradle.propertiesに次の行を追加します。

systemProp.http.proxyHost=your_proxy_http_Host
systemProp.http.proxyPort=your_proxy_http_port
systemProp.https.proxyHost=your_proxy_https_Host
systemProp.https.proxyPort=your_proxy_https_port

gradle.propertiesファイルの場所については、公式ドキュメントを参照してください https://docs.gradle.org/current/userguide/build_environment.html


編集: @Joostによると:最初は見落としていた小さいが重要な詳細:通知実際のホスト名に含まれていないこと URLのhttp://プロトコル部分...

1
Thibault

@ sourcesimian 's および @ kunal-b's answerの更新。システムプロパティで設定されている場合、ユーザー名とパスワードを動的に設定します。

以下は、ユーザー名とパスワードが提供されている場合はユーザー名とパスワードを設定するか、ユーザー名とパスワードが設定されていない場合はホストとポートを追加するだけです。

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            //Get proxyHost,port, username, and password from http system properties 
            // in the format http://username:password@proxyhost:proxyport
            def (val1,val2) = e.value.tokenize( '@' )
            def (val3,val4) = val1.tokenize( '//' )
            def(userName, password) = val4.tokenize(':')
            def url = e.value.toURL()
            //println " - systemProp.${base}.proxy=${url.Host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.Host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
            System.setProperty("${base}.proxyUser", userName.toString())
            System.setProperty("${base}.proxyPassword", password.toString())
        }
    }
}
1
Norbert

私の場合、Androidスタジオの外観と動作=>システム設定=> HTTPプロキシからプロキシを設定しようとします。しかし、プロキシが機能しなかったため、プロキシなしをクリックしました。

NO PROXYをチェックしても、gradle.properties(Global)からプロキシ設定は削除されません。手動で削除する必要があります。

systemPropで始まるすべてのプロパティを削除します。たとえば、-systemProp.http.nonProxyHosts = *。local、localhost

0
Anirban

プロキシの背後でEclipseを使用している場合は、Window Menu --> Preferences --> General --> Network Connectionsにアクセスしてください。アクティブプロバイダーを「手動」として選択します。

[プロキシエントリ]セクションで、[HTTPS]をクリックし、[編集]をクリックして、プロキシホストとポートを追加します。ユーザー名とパスワードが必要な場合は、それも入力します。それは私のために働いた!

0
whoami

このHTTPエラー407の問題が選択したパッケージにのみ発生した場合、問題はプロキシ設定とインターネット接続にありません。 NATを介してPCをインターネットに公開しても、この問題に直面する可能性があります。通常、同時にブラウザで目的のパッケージをダウンロードできます。私が見つける唯一の解決策は、(プロジェクトではなく)プロファイルの.gradleフォルダーを削除することです。プロジェクトを同期した後、長い時間がかかりますが、すべてを復元します。

0
Almaz