请帮我找出以下行为的原因。
我有两个在Tomcat容器中运行的应用程序:我的应用程序和Hudson(v2.2.0)。 Tomcat以-Dhttp.proxyHost=proxy -Dhttp.proxyPost=8080
选项启动,以便我的应用程序使用代理来访问外部WebServices。
我已经检测到Hudson运行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中运行,但是我在项目中安装到JVM静态变量的 CustomProxySelector 是如何从Maven JVM中看到的?如果“父”JVM和“分叉”JVM共享相同的根类加载器,那么它们也可能共享系统属性。这意味着,如果Maven构建(甚至是临时)将 http.proxyHost 设置为null并且我的进程此时打开URL,则它将失败。
我的问题是:如果上述行为是Hudson / Maven中的错误?什么是解决方法(除了琐碎的运行2个Tomcat服务器)。