1

请帮助我找出以下行为的原因。

我在 Tomcat 容器中运行了两个应用程序:我的应用程序和 Hudson (v2.2.0)。Tomcat 以-Dhttp.proxyHost=proxy -Dhttp.proxyPost=8080选项启动,以便我的应用程序使用代理访问外部 Web 服务。

我检测到 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 服务器的琐碎之外)。

4

0 回答 0