Gradle 프록시 구성


161

Jenkins에 Gradle / Artifactory 통합을 사용하려면 프록시 서버를 통해 Gradle에서 웹 액세스가 필요합니다. 문제의 가능한 원인을 줄이기 위해 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 : 서버에서 URL에 대한 HTTP 응답 코드 : 407을 리턴 함 : http://gradle.artifactoryonline.com/gradle/plugins/org/ jfrog / buildinfo / build-info-extractor-gradle / 1.0.1 / artifactoryplugin-1.0.1.gradle

선택할 수있는 두 개의 프록시 서버가 있으며 하나는 항상 407( 프록시 인증 필요 ), 다른 하나는 502( 불량 게이트웨이 )로 응답 하므로 proxyHost 및 proxyPort 옵션이 사용됩니다.

Active Directory 사용자를 기반으로하는 사용자 이름에 백 슬래시가 포함되어 있으므로 \\와를 모두 시도했지만 둘 다 시도 \하지 않았습니다. 지정된 사용자가 컴퓨터 및 Active Directory에 로그인 한 사용자와 다릅니다. 이 사용자의 자격 증명이 프록시에 유효하지 않으므로 다른 사용자를 지정할 수 있어야합니다.

Jenkins 또는 Artifactory의 GUI에서 동일한 옵션을 설정하면 효과가 있습니다.


1
동일한 문제가 발생하면 여기에 답변이 없습니다 (더 이상 사용되지 않거나 사용되지 않는 방법을 따르는 답변조차도). 그런 다음 https 프록시를 설정 해야 한다는 것을 깨달았습니다 : stackoverflow.com/a/27686730/1024839
hkoosha

이 URL을보다 완전하고 업데이트 된 (http 및 https로) 살펴보십시오
Guillaume 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 = 통과 -Dhttp.nonProxyHosts = host1.com | host2.com

나를 위해 일했습니다 ( gradle.propertieshomedir 또는 project dir에서 빌드가 여전히 실패했습니다). 이 해결 방법을 제공 한 gradle의 문제를 지적 해 주셔서 감사합니다. https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy 에서 참조 문서를 참조하십시오.

업데이트 이러한 속성을 넣을 수도 있습니다 gradle-wrapper.properties( https://stackoverflow.com/a/50492027/474034 참조 ).


4
cntlm을 사용할 때에도 도움이되었습니다
Łukasz 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

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나는 보통의 리눅스 프록시 설정을 사용하여 다음과 같은 작업을 가지고 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

1
Windows 7에서도 작동합니다! 이것이 정답입니다!

1
감사! 위의 프록시 암호가 필요하지 않은 구성에서 작동했습니다. 프록시 비밀번호를 사용하거나 사용하지 않도록 수정했습니다 (아래 참조)
Norbert

if (key in map.keySet ()) {
JustAnotherCoder

가장 좋은 답변입니다. 자바 생태계가 바로 이런 식으로 작동하기를 바랍니다
Avindra Goolcharan

26

나를 위해 build.gradle 파일이 프로젝트의 gradle.properties 파일 에이 구성을 추가하는 작업 :

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
이 질문이 언제 제기되었는지 고려하십시오. 내 대답에 문제의 I 링크는 1.0 이정표-8 ... Gradle을 향해 해결 표시되었다
다니엘 벡

2
이 질문은 내가 "Gradle을 프록시"를 검색하면, 팝업 첫 번째 일이었다 @Daniel ... 나는 답변을 미끄러 져 그 사람은 내 필요에 대한 분명한 하나
Betlista

22

사용하여 매우 간단한 "URL을 요청"자바 프로그램을, 나는이 문제를 복제 할 수 있었다.

http.proxyUser그리고 http.proxyPassword그들은 설명하지 않는 등, 옵션, 비표준 인기이기는 것 같다 Gradle을 튜토리얼에서 링크 된 자바 참조 페이지 ; Gradle 매뉴얼에 언급되어 있지만.

프록시 인증을 지원하려는 Java 프로그램은 수동 으로이 작업을 수행해야합니다 (링크 된 페이지의 코드를 사용 하여이 작업을 수행 할 수 있음).


이 문제 (및 수정 사항)를 Gradle 문제 추적기에 제출했습니다 . 제기 된 문제 GRADLE-1556이 1.0 마일스톤 -8에서 해결되었습니다 (2012 년 2 월)


연결된 블록이 초대 전용으로 나타납니다. 이 대안의 공개 예가 있습니까?
마이크 요키

@yock Gradle에 제출 한 문제의 첨부 파일을 보면 매우 비슷합니다.
Daniel Beck

19

c : \ Users \ 사용자 이름 \ .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

기본적으로 로컬 시스템과 파일 덤프에 대한 링크입니다. 답변을 자세히 설명하십시오.
Murray Foxcroft

superrrrrr tnx, u는 ur 글이 얼마나 유용한 지 몰랐지만 여전히 큰 감사를드립니다
Seyed Ali Roshan

@SeyedAliRoshan 인수로 proxyUser와 password를 어떻게 전달할 수 있습니까? 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을 사용하는 두 가지 방법이 있습니다.

명령 행에 인수 추가

(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

2

내 안드로이드 스튜디오에서 프록시를 설정하려고하면 Appearance & Behavior => System Settings => HTTP Proxy. 그러나 프록시가 작동하지 않아 프록시를 클릭하지 않습니다.

확인 프록시는 gradle.properties (글로벌)에서 프록시 설정을 제거하지 않습니다. 수동으로 제거해야합니다.

따라서 systemProp 로 시작하는 모든 속성을 제거합니다 ( 예 : systemProp.http.nonProxyHosts = *. local, localhost).


Mac에서 분명히 한 시간 동안 머리카락을 찢어 냈습니다.이 속성은 내에 자동으로 추가되었습니다 ~/.gradle/gradle.properties. 지적 해 주셔서 감사합니다.
EpicPandaForce

1

시스템 속성에 구성된 경우 사용자 이름과 비밀번호를 동적으로 설정하는 @sourcesimian@ kunal-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())
        }
    }
}

0

프록시를 사용하지 않고 일식을 사용하는 경우로 이동하십시오 Window Menu --> Preferences --> General --> Network Connections. 활성 공급자를 '수동'으로 선택하십시오.

프록시 항목 섹션에서 HTTPS를 클릭하고 편집을 클릭 한 후 프록시 호스트 및 포트를 추가하십시오. 사용자 이름과 비밀번호가 필요한 경우에도 입력하십시오. 그것은 나를 위해 일했다!


0

HTTP 오류 407의이 문제가 선택한 패키지에만 발생하면 프록시 설정 및 인터넷 연결에 문제가없는 것입니다. 심지어 NAT를 통해 PC를 인터넷에 노출시킬 수 있으며 여전히이 문제에 직면하게됩니다. 일반적으로 브라우저에서 원하는 패키지를 다운로드 할 수 있습니다. 내가 찾은 유일한 해결책 : 프로젝트가 아닌 프로필에서 .gradle 폴더를 삭제하십시오. 해당 프로젝트를 동기화 한 후에는 시간이 오래 걸리지 만 모든 것이 복원됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.