Системное свойство http.proxyHost имеет значение null - PullRequest
1 голос
/ 16 декабря 2011

Пожалуйста, помогите мне выяснить причину следующего поведения.

У меня есть два приложения, работающих в контейнере Tomcat: мое приложение и Hudson (v2.2.0).Tomcat запускается с параметрами -Dhttp.proxyHost=proxy -Dhttp.proxyPost=8080, поэтому мое приложение использует прокси для доступа к внешним веб-сервисам.

Я обнаружил следующее очень странное поведение Хадсона, выполняющего сборку maven: В какой-то момент времени (непосредственно перед запуском maven) системное свойство http.proxyHost имеет значение null,Возможно, я следую неправильному следу, потому что мое приложение (которое развернуто на том же Tomcat) аварийно завершает работу, поскольку оно не может открыть соединение, и я думаю, что это два относительно.

Я установил пользовательский ProxySelector сообщить о сбое прокси.Похоже, что http.proxyHost сбрасывается непосредственно перед тем, как maven начинает разрешать зависимости:

15.12 10:13:35 DEBUG [org.CustomProxySelector] Using proxy DIRECT for URL http://repo.internal/nexus/content/groups/development/org/parent/1.0.0-SNAPSHOT/maven-metadata.xml.sha1. Proxy settings: http.proxyHost=null, ftp.proxyHost=proxy
java.lang.Exception
        at org.CustomProxySelector.select(CustomProxySelector.java:42)
        at org.CustomProxySelector.select(CustomProxySelector.java:38)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:906)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
        at org.apache.maven.wagon.providers.http.LightweightHttpWagon.fillInputData(LightweightHttpWagon.java:115)
        at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
        at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
        at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$GetTask.verifyChecksum(WagonRepositoryConnector.java:708)
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:625)
        at org.sonatype.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:64)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
15.12 10:13:35 INFO  [hudson.maven.MavenModuleSetBuild] using maven 3 3.0.3
15.12 10:16:10 INFO  [hudson.model.Run] common-ops #87 main build action completed: SUCCESS

Я могу ошибаться в том, что на самом деле происходит: Maven должен работать в отдельной JVM, но как CustomProxySelector , который я устанавливаю в статическую переменную JVM в моем проекте, виден из Maven JVM?Если «родительская» JVM и «разветвленная» JVM совместно используют один и тот же корневой загрузчик классов, возможно, они также разделяют системные свойства.Это означает, что если сборка Maven (даже временная) устанавливает http.proxyHost на ноль, и мой процесс открывает URL-адрес, как в этот раз, он завершится неудачей.

Мой вопрос: если приведенное выше поведение являетсяошибка в Гудзоне / Maven?Какой может быть обходной путь (кроме тривиального запуска 2 серверов Tomcat).

...