1

次の動作の理由を見つけるのを手伝ってください。

Tomcat コンテナで 2 つのアプリケーションを実行しています。私のアプリケーションと Hudson (v2.2.0) です。-Dhttp.proxyHost=proxy -Dhttp.proxyPost=8080アプリケーションがプロキシを使用して外部 Web サービスにアクセスできるように、Tomcat はオプション付きで開始されます。

Maven ビルドを実行している Hudson の次の非常に奇妙な動作を検出しました: ある時点 (maven が起動される直前) で、http.proxyHostシステム プロパティが null に設定されます。おそらく、私のアプリケーション (同じ Tomcat にデプロイされている) が接続を開くことができないためにクラッシュし、この 2 つが相対的であると考えているため、間違ったトレースをたどっています。

プロキシがリセットされたときにレポートするカスタムProxySelectorをインストールしました。Maven が依存関係の解決を開始する直前にhttp.proxyHostがリセットされているようです。

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