Gradleプロキシ構成


159

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"
}

この説明に従って、ホームディレクトリの.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で同じオプションを設定しても機能しました。


1
同じ問題があるため、ここでの回答は役に立ちませんでした(非推奨/非推奨ではないメソッドに従うものでも)。その後、私は実現HTTPSプロキシがしなければならない設定する:stackoverflow.com/a/27686730/1024839
hkoosha

あなたはより完全で(httpとhttpsで)更新は、次のURLをご覧ください:docs.gradle.org/current/userguide/...
ギヨームHusta

@GuillaumeHustaありがとうございます。ただし、この質問はGradle 0.8が最新のリリースである5年以上前に投稿されたものであり、これに関するドキュメントはまったく間違っていました(この質問に対する自分の回答をご覧ください)。
Daniel Beck

プロキシで引用符を使用するときにこの問題が発生しました。systemProp.http.proxyHost= 'xyz'ではなく systemProp.http.proxyHost = xyzを使用してください
ir2pid

回答:


211

ダニエルの対応に関する詳細:

HTTPのみのプロキシ構成

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

HTTPSのみのプロキシ構成

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

HTTPおよびHTTPSプロキシ構成

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

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

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 -Dhttp.nonProxyHosts = host1.com | host2.com

私のために働きました(gradle.propertieshomedirまたはプロジェクトdirのどちらでも、ビルドはまだ失敗していました)。この回避策を提供した問題をgradleで指摘していただきありがとうございます。https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxyにある参照ドキュメントを参照してください

更新 これらのプロパティをに含めることもできますgradle-wrapper.propertieshttps://stackoverflow.com/a/50492027/474034を参照)。


4
cntlmを使用しているとき、あまりにも私を助けた
ルカシュSiwińskiを

5
プロキシを削除するにはどうすればよいですか?
ジョナサン

2
また、-Dhttps.proxyUser = user -Dhttps.proxyPassword = pass
Owen B

10
あなたにプロパティを置く場合~/.gradle/gradle.propertiesを確認してくださいあなたはしてプロパティ接頭辞systemPropたとえばなどを、systemProp.http.proxyHost=127.0.0.1
ステファンHaberl

1
私はこれを試しましたが、うまくいきませんでした。オプション(-Dhttp.proxyHostなど)をJAVA_OPTS環境変数として設定して機能させる必要がありました。
GoldenD 2018

66

これは私の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

55

では、私build.gradle、私はいつものLinuxのプロキシ設定を使用して、次のタスクを、持っている、HTTP_PROXYHTTPS_PROXY、シェルのENVから:

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

2
楽しい!それはあなたのルートのbuild.gradleまたはアプリのbuild.gradleですか?
Miao1007 2015年

1
Windows 7でも動作します!これは受け入れられる答えになるはずです!

1
ありがとう!上記は、プロキシパスワードを必要としない構成で機能しました。プロキシパスワードを使用するか、または使用しないように変更しました。下記を参照してください
Norbert

if(map.keySet()のキー){
JustAnotherCoder

ベストアンサー。Javaエコシステムがそのままでこのように機能することを願っています
Avindra Goolcharan

26

私にとっては、この構成をプロジェクトの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のプロキシは同じです


23

以下を試してください:

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


2
この質問がいつ尋ねられたかを検討してください。私の回答でリンクする問題は、Gradle 1.0-milestone-8に向けて解決済みとマークされました...
Daniel Beck

2
@Danielこの質問が最初に浮上したので、「gradle proxy」を検索したところ、その答えを
ざっと見てみたところ

22

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

http.proxyUserまた、Gradleチュートリアルからリンクhttp.proxyPasswordされているJavaリファレンスページで説明されていないため、一般的ではありますが、標準的ではないオプションのようです。Gradleのマニュアルでは言及されていますが。

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


この問題(および修正)をGradleの問題トラッカーに送信しました。発生した問題GRADLE-1556は1.0-milestone-8で解決されました(2012年2月)


リンクされたブロックは、招待のみとして表示されます。この回避策の公開例はありますか?
Mike Yockey、2011

@yock私がGradleに提出した問題の添付を参照してください。これは非常によく似ています。
ダニエルベック

19

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 seperated by | >

5
@MurrayFoxcroftその回答のリンクはどこにありますか?
Max Vollmer 2018

基本的に、ローカルマシンへのリンクとファイルダンプ。答えを詳しく説明してください。
Murray Foxcroft 2018

superrrrrr tnx、あなたは私にとってあなたの投稿がどれほど役に立ったか気付かないかもしれませんが、それでも大きな感謝
Seyed Ali Roshan

@SeyedAliRoshan引数でproxyUserとパスワードをどのように渡すことができますか?globle gradle.propaertiesファイルを使用したくありません。
Nullpointer

@NullpointerプロジェクトのGradle内でプロキシ設定を使用しようとしましたか?
Seyed Ali Roshan

12

ファイルが存在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のためにちょうどでIPを指定するhttp://か、https://
確認のGradle公式ドキュメントを詳細については、グローバルなレベルでプロキシを設定します


9

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

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

(Guillaume Bercheの投稿から)

これらの引数を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が言ったように:私が最初に見落とした小さな重要な詳細:実際のホスト名には http:// URLのプロトコル部分が含まれていないことに注意してください ...


1
私が最初に見落としていた小さな重要な詳細:実際のホスト名にはhttp://URLのプロトコル部分が含まれていないことに注意してください...
Joost

5

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

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

ありがとう!以下にプロキシのユーザー名とパスワードを動的に取得する方法に関する更新があります
Norbert

1

更新@sourcesimianさん@クナル-Bのシステムプロパティに設定されている場合、動的にユーザー名とパスワードを設定します答え。

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

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

私がアンドロイドスタジオからプロキシを設定しようとした場合の外観&動作=>システム設定=> HTTPプロキシ。しかし、プロキシが機能しなかったので、プロキシをクリックしません。

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

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


私は1時間髪を引きはがしてきました。Macではどうやら、これらのプロパティはに自動的に追加されました~/.gradle/gradle.properties。指摘してくれてありがとう。
EpicPandaForce

0

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

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.