java - para - project property gradle
ConfiguraciĆ³n de proxy de Gradle (13)
Basado en la respuesta de SourceSimian; esto funcionó en las cuentas de usuario de dominio de Windows. Tenga en cuenta que el nombre de usuario no tiene dominio incluido,
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
Necesito acceso web desde Gradle a través de un servidor proxy para usar la integración de Gradle / Artifactory para Jenkins. Para reducir las posibles causas de problemas, agrego manualmente el complemento Artifactory en build.gradle y lo ejecuto desde la línea de comandos:
apply {
apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}
Siguiendo this descripción, especifiqué lo siguiente en .gradle / gradle.properties en mi directorio principal:
systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de//username
systemProp.http.proxyPassword=xxx
Con la configuración de proxy anterior (que también se sabe que funciona), falla:
11: 33: 17.699 [ERROR] [org.gradle.BuildExceptionReporter] Causado por: java.io.IOException: El servidor devolvió el código de respuesta HTTP: 407 para URL: http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle
Tengo dos servidores proxy para elegir, uno siempre responde con 407
(se requiere autenticación proxy ) y el otro con 502
( puerta de enlace incorrecta ), así que, obviamente, se usan las opciones proxyHost y proxyPort.
Como el nombre de usuario (basado en un usuario de Active Directory) contiene una barra invertida, probé //
y /
, pero ninguno funcionó. El usuario especificado es diferente del usuario que está conectado a la máquina y a Active Directory. Las credenciales de este usuario no son válidas para el proxy, por lo que debo poder especificar un usuario diferente.
Establecer las mismas opciones en la GUI de Jenkins o Artifactory funcionó.
Cree un archivo llamado gradle.properties
dentro de la carpeta del proyecto donde está presente el archivo build.gradle
. Agregue la siguiente entrada
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
Si está utilizando DNS para proxy, agréguelo como systemProp.https.proxyHost=www.proxysite.com
Para IP simplemente especifique la IP sin http://
o https://
Consulte el docs.gradle.org/current/userguide/… para obtener más información y configurar el proxy a nivel mundial.
En caso de que trate de configurar el proxy desde el estudio de Android Apariencia y comportamiento => Configuración del sistema => HTTP Proxy. Pero el proxy no funcionó, así que no hago clic en ningún proxy.
Si marca NO PROXY no eliminará la configuración del proxy de gradle.properties (Global). Debes eliminarlo manualmente.
Así que elimino todas las propiedades comenzando con systemProp por ejemplo - systemProp.http.nonProxyHosts = *. Local, localhost
En mi build.gradle
tengo la siguiente tarea, que usa la configuración usual de proxy de linux, HTTP_PROXY
y HTTPS_PROXY
, desde el env del shell:
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
Este es mi gradle.properties, tenga en cuenta la porción de HTTPS
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
Hay 2 formas de usar Gradle detrás de un proxy:
Agregar argumentos en línea de comando
(De la publicación de Guillaume Berche)
Agregue estos argumentos en su comando gradle:
-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port
o estos argumentos si está usando https:
-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port
Agregue líneas en el archivo de configuración gradle
en gradle.properties
agrega las siguientes líneas:
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
(Para la ubicación del archivo gradle.properties
, consulte la documentación oficial https://docs.gradle.org/current/userguide/build_environment.html
Para mí, trabaja agregando esta configuración en el archivo gradle.properties del proyecto, donde el archivo build.gradle es:
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
Donde: proxyUrl es la url del servidor proxy ( http: // ..... )
proxyPort es el puerto (generalmente 8080)
USER es mi usuario de dominio
CONTRASEÑA, mi contraseña
En este caso, el proxy para http y https es el mismo
Pruebe lo siguiente:
gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword
Refinamiento sobre la respuesta de Daniel:
Configuración Proxy HTTP solamente
gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128
Configuración Proxy solo HTTPS
gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129
Configuración de proxy HTTP y HTTPS
gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129
funcionó para mí (con grade.properties en homedir o projet dir, build aún estaba fallando). Gracias por señalar el problema en gradle que dio esta solución.
Si está detrás del proxy y usa eclipse, vaya a Window Menu --> Preferences --> General --> Network Connections
. Seleccione los proveedores activos como ''Manual''.
En la sección de entradas de Proxy, haga clic en HTTPS, haga clic en Editar y agregue el puerto y host del proxy. Si el nombre de usuario y la contraseña son obligatorios, délos también. ¡Funcionó para mí!
Si este problema con el error HTTP 407 sucedió solo con los paquetes seleccionados, entonces el problema no está en la configuración del proxy y la conexión a Internet. Incluso puede exponer su PC a Internet a través de NAT y todavía se enfrentará a este problema. Normalmente, al mismo tiempo, puede descargar los paquetes deseados en el navegador. La única solución que encuentro es eliminar la carpeta .gradle en su perfil (no en el proyecto). Después de sincronizar el proyecto, tomará mucho tiempo pero restaurará todo.
Una actualización de la de y que establece dinámicamente el nombre de usuario y la contraseña si están configurados en las propiedades del sistema.
A continuación, se establece el nombre de usuario y la contraseña si se proporcionan o simplemente se agrega el host y el puerto si no se establece ningún nombre de usuario y contraseña.
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())
}
}
}
Usando un programa Java "Request a URL" muy simple, pude replicar el problema.
http.proxyUser
y http.proxyPassword
parecen ser opciones no estándar, aunque populares, ya que no se describen en la página de referencia de Java vinculada desde el tutorial de Gradle ; a pesar de que el manual de Gradle los menciona.
Parece que los programas Java que desean admitir la autenticación por proxy deben hacerlo manualmente (y pude hacerlo usando el código en la página vinculada).
Envié este problema (y una solución) al rastreador de problemas de Gradle . El problema planteado GRADLE-1556 se resolvió en 1.0-milestone-8 (Feb 2012)