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で同じオプションを設定すると機能しました。
very単純な「URLをリクエスト」Javaプログラムを使用して、問題を再現することができました。
http.proxyUser
とhttp.proxyPassword
は、一般的ではありますが、標準ではないオプションのようです。これらは GradleチュートリアルからリンクされたJavaリファレンスページ ; Gradleマニュアルにはそれらが記載されていますが。
プロキシ認証をサポートしたいJavaプログラムのようです 手動でこれを行う必要があります (リンクされたページのコードを使用してこれを行うことができました)。
この問題(および修正)を Gradleの問題追跡ツール に提出しました。発生した問題GRADLE-1556は1.0マイルストーン-8で解決されました(2012年2月)
ダニエルの応答に対する改良:
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 )。
これは私の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
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
以下を試してください:
gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword
私の場合、この構成をプロジェクトの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のプロキシは同じです
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>
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 詳細およびグローバルレベルでのプロキシの設定
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
プロキシの背後で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.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://
プロトコル部分...
@ 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())
}
}
}
私の場合、Androidスタジオの外観と動作=>システム設定=> HTTPプロキシからプロキシを設定しようとします。しかし、プロキシが機能しなかったため、プロキシなしをクリックしました。
NO PROXYをチェックしても、gradle.properties(Global)からプロキシ設定は削除されません。手動で削除する必要があります。
systemPropで始まるすべてのプロパティを削除します。たとえば、-systemProp.http.nonProxyHosts = *。local、localhost
プロキシの背後でEclipseを使用している場合は、Window Menu --> Preferences --> General --> Network Connections
にアクセスしてください。アクティブプロバイダーを「手動」として選択します。
[プロキシエントリ]セクションで、[HTTPS]をクリックし、[編集]をクリックして、プロキシホストとポートを追加します。ユーザー名とパスワードが必要な場合は、それも入力します。それは私のために働いた!
このHTTPエラー407の問題が選択したパッケージにのみ発生した場合、問題はプロキシ設定とインターネット接続にありません。 NATを介してPCをインターネットに公開しても、この問題に直面する可能性があります。通常、同時にブラウザで目的のパッケージをダウンロードできます。私が見つける唯一の解決策は、(プロジェクトではなく)プロファイルの.gradleフォルダーを削除することです。プロジェクトを同期した後、長い時間がかかりますが、すべてを復元します。