web-dev-qa-db-ja.com

Mavenのsettings.xmlでHTTPとHTTPSの両方のプロキシサーバーを構成する方法

プロキシサーバーの背後でMaven 3.1.1を使用しています。同じプロキシがHTTPHTTPSの両方のトラフィックを処理します。

settings.xmlを使用して両方のプロトコルを使用するようにMavenに指示することはできません。最初に定義されたアクティブなプロキシが使用され、後続の「アクティブな」プロキシ定義は無視されるため、アクティブなプロキシは1つしか持てないように思えます。これは私のsettings.xmlです:

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <Host>192.168.1.2</Host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
    <proxy>
        <id>myhttpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <Host>192.168.1.2</Host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

Mavenのsettings.xmlHTTPHTTPSの両方にプロキシを設定することは可能ですか? Javaシステムプロパティを次のようなMaven呼び出しに渡すことでこれを回避できることを認識しています。

-Dhttps.proxyHost=192.168.1.2 -Dhttps.proxyPort=3128

しかし、これはsettings.xml内から可能でなければなりませんか?

MNG-2305MNG-4394 などのMavenのバグは、この問題の解決を示唆していますが、私は確信していません。

または、Mavenをポイントできるローカルで実行できる「プロキシプロキシ」がありますか? 「プロキシプロキシ」は、それに応じてhttp/httpsをルーティングします。それでも、Mavenが両方のタイプのトラフィックを誘導するには、settings.xmlで2つのアクティブなプロキシ定義を定義する必要があります。

32
Stephen Hartley

Settings.xmlのMavenプロキシはhttpとhttpsの両方に使用されるため、1つのプロキシサーバーを定義するだけで、両方に使用されます。次のように、1つのproxyタグのみを残してください。

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <Host>192.168.1.2</Host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

上記のプロトコルは、プロキシされたリクエストではなく、プロキシサーバーのプロトコルです。

36

それなしで動作する余分な...<id>httpsproxy</id>...エントリ(@KrzysztofKrasońが述べたように)そしてそれとともに(質問者が述べたように)。私たちにとっての問題は、 Eclipse->Maven->User Settings->[x] Update Settings 明らかにまったく機能しておらず、特定のことをテストするにはEclipse->Maven->[x] Download repository index updates on startupをチェックする必要があります(例:Maven Repositories View->Global Repositories->central->Update Index)。そして何よりも:

Eclipseはsettings.xml更新ごとに再起動する必要があります!:-/

バグかリロード/キャッシュの問題だと思います。私たちはそれをうまくテストしました

  • ケプラー(4.3)およびネオン(4.6)
  • およびそれらの組み込みMavenバージョン(3.2.1/3.3.9)および外部3.3.3
  • http://およびhttps:// URL
2

Eclipse Mavenを使用した私のテストでは、settings.xmlprotocolRL要求のプロトコルではなく、プロキシサーバーのプロトコルを参照していることが示されています。 =。また、Mavenはリストされている最初のアクティブなプロキシサーバーのみを使用し、残りは無視することも示しています。

私の証拠は次のとおりです。

1。 ドキュメント は次のように述べています

active:このプロキシがアクティブな場合はtrue。これは、一連のプロキシを宣言するのに役立ちますが、一度にアクティブにできるのは1つだけです。

protocol、ホスト、ポート:protocol:// Host:port of the proxy、個別の要素に分かれています。」

2。 ソースコード はさらに明確です:

    /**
     * Get the protocol of the proxy server.
     * @return the protocol of the proxy server
     */
    public String getProtocol()
    {
        return protocol;
    }

。実世界のテスト(Eclipse Mavenを使用):

a。 1番目のプロキシは偽のftp、2番目は実際のhttp、3番目は実際のhttpsです。結果:失敗。

プロトコルがURLリクエスト用である場合、Mavenは実際のhttp/httpsプロキシを検索し、完全に正常に機能します。代わりに、「ftp」であるにもかかわらず、最初のプロキシを使用し、失敗しました。

    <proxies>
        <proxy>
            <id>bogus_ftp</id>
            <active>true</active>
            <protocol>ftp</protocol>
            <port>123</port>
            <Host>bogus.proxy.com</Host>
        </proxy>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
        <proxy>
            <id>real_https</id>
            <active>true</active>
            <protocol>https</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
    </proxies>

b。 1番目のプロキシは実際のhttpで、2番目のプロキシは偽のhttpsです。結果:成功。

これは、最初のプロキシのみを使用したことを示しています。そうでなければ、httpsリクエストに2番目のプロキシを使用し、偽のプロキシサーバーにヒットして失敗します。

    <proxies>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
        <proxy>
            <id>bogus_https</id>
            <active>true</active>
            <protocol>https</protocol>
            <port>123</port>
            <Host>bogus.proxy.com</Host>
        </proxy>
    </proxies>

c。両方ともhttpですが、1番目のプロキシは偽で、2番目のプロキシは本物です。結果:失敗。

これは、同じプロトコルであっても、Mavenが複数のプロキシを使用しないことを示しています。それ以外の場合、2番目の実際のプロキシを試して成功します。

    <proxies>
        <proxy>
            <id>bogus_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>bogus.proxy.com</Host>
        </proxy>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
    </proxies>
1
wisbucky

Mavenバージョンの更新に関する問題を解決しました。つまり、組み込みEclipse Mavenバージョンを使用せず、外部バージョン3.3.9を使用しました。

0
AnselmM