1. 序章

このチュートリアルでは、プロキシの背後で動作するようにMavenを構成します。これは、インターネットに直接接続しない環境での一般的な状況です。

この例では、プロキシはマシン「proxy.baeldung.com」で実行されており、ポート「80」でHTTP経由でプロキシリクエストをリッスンします。 また、internal.baeldung.comのいくつかの内部サイトを使用します。これらのサイトでは、プロキシを経由する必要はありません。

2. プロキシ構成

まず、資格情報なしで基本的なプロキシ構成をセットアップしましょう

Mavenを編集しましょう settings.xml 通常私たちの’で見つかりました /.m2′ ディレクトリ。 まだ存在しない場合は、グローバル設定からコピーできます。 / conf ‘ ディレクトリ。

そして今、作成しましょう内部のエントリセクション:

<proxies>
   <proxy>
        <host>proxy.baeldung.com</host>
        <port>80</port>
    </proxy>
</proxies>

プロキシを経由する必要のないローカルサイトも使用しているので、で指定しましょう ‘|’を使用するローカルホストで区切られたリスト:

<nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>

3. クレデンシャルの追加

プロキシが保護されていない場合、必要なのはそれだけです。 ただし、私たちのものはそうなので、プロキシ定義に私たちの資格情報を追加しましょう

<username>baeldung</username>
<password>changeme</password>

必要がない場合はユーザー名/パスワードエントリを追加しません-空のエントリであっても-プロキシが必要としないときにそれらを存在させると、リクエストが拒否される可能性があります。

最小限の認証済み構成は次のようになります。

<proxies>
   <proxy>
        <host>proxy.baeldung.com</host>
        <port>80</port>
        <username>baeldung</username>
        <password>changeme</password>
        <nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
    </proxy>
</proxies>

ここで、 mvn コマンドを実行すると、プロキシを経由して、目的のサイトに接続します。

3.1. オプションのエントリ

プロキシを切り替える必要がある場合に備えて、参照しやすいように、「BaeldungProxy_Authenticated」のオプションのidを指定しましょう。

<id>BaeldungProxy_Authenticated</id>

これで、別のプロキシがある場合、別のプロキシ定義を追加できますが、アクティブにできるのは1つだけです。 デフォルトでは、Mavenは最初に検出したアクティブなプロキシ定義を使用します

プロキシ定義はデフォルトでアクティブであり、暗黙の定義を取得します。

<active>true</active>

別のプロキシをアクティブにしたい場合は、次のように設定して元のエントリを非アクティブにします。 falseに:

<active>false</active>

プロキシのプロトコルに対するMavenのデフォルト値はHTTPであり、これはほとんどの場合に適しています。 プロキシが別のプロトコルを使用している場合は、ここで宣言し、httpをプロキシに必要なプロトコルに置き換えます。

<protocol>http</protocol>

これはプロキシが使用するプロトコルであることに注意してください。リクエストのプロトコル(ftp://、http://、https://)はこれとは無関係です。

そしてこれが私たちの拡張プロキシ定義がどのように見えるかであり、オプションの要素を含みます:

<proxies>
   <proxy>
        <id>BaeldungProxy_Authenticated</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>proxy.baeldung.com</host>
        <port>80</port>
        <username>baeldung</username>
        <password>changeme</password>
        <nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
    </proxy>
</proxies>

これで、基本的なプロキシエントリは終わりですが、十分に安全ですか?

4. 構成の保護

ここで、同僚の1人がプロキシ構成を送信することを望んでいるとします。

パスワードをプレーンテキストで送信することにあまり熱心ではないので、Mavenがパスワードの暗号化をいかに簡単にするかを見てみましょう

4.1. マスターパスワードの作成

まず、「te!st!ma$ter」というマスターパスワードを選択しましょう。

次に、マスターパスワードを暗号化して、実行時にプロンプトで入力します。

mvn --encrypt-master-password
Master Password:

Enterキーを押すと、暗号化されたパスワードが中括弧で囲まれているのがわかります。

{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}

4.2. パスワード生成のトラブルシューティング

Master Password:プロンプトの代わりに{}が表示された場合(これはbashを使用している場合に発生する可能性があります)、コマンドラインでパスワードを指定する必要があります。

パスワードを引用符で囲んで、「!」などの特殊文字を確認しましょう。 望ましくない影響はありません。

したがって、bashを使用している場合は、一重引用符を使用しましょう。

mvn --encrypt-master-password 'te!st!ma$ter'

または、Windowsコマンドプロンプトを使用する場合は、二重引用符を使用します。

mvn --encrypt-master-password "te!st!ma$ter"

現在、生成されたマスターパスワードに中括弧が含まれている場合があります。この例のように、「UD」の後に中括弧「}」が付いています。

{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}

この場合、次のいずれかを実行できます。

  • mvn –encrypt-master-password コマンドを再度実行して、別のコマンドを生成します(中括弧なしで)
  • ‘{‘または}’の前にバックスラッシュを追加して、パスワードの中括弧をエスケープします

4.3. settings-security.xmlファイルの作成

次に、暗号化されたパスワードを、エスケープされた「\}」とともに、.m2ディレクトリのsettings-security.xmlファイルと呼ばれるファイルに入れましょう。

<settingsSecurity>
    <master>{QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}</master>
</settingsSecurity>

最後に、Mavenではmaster要素内にコメントを追加できます。

パスワード'{‘区切り文字の前にテキストを追加しましょう。Mavenがパスワードを見つけるために{または}を使用するため、コメントで{または}を使用しないように注意してください。

<master>We escaped the curly brace with '\' {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}</master>

4.4. リムーバブルドライブの使用

さらに安全である必要があり、マスターパスワードを別のデバイスに保存したいとします。

まず、 settings-security.xml ファイルをリムーバブルドライブ「R:」の構成ディレクトリに配置します。

R:\config\settings-security.xml

次に、.m2ディレクトリのsettings-security.xmlファイルを更新して、Mavenを実際のsettings-security.xmlにリダイレクトします。リムーバブルドライブ:

<settingsSecurity>
    <relocation>R:\config\settings-security.xml</relocation>
</settingsSecurity>

Mavenは、リムーバブルドライブ上の再配置要素で指定したファイルから暗号化されたマスターパスワードを読み取ります。

5. プロキシパスワードの暗号化

これでマスターパスワードが暗号化されたので、プロキシパスワードを暗号化できます。

次のコマンドを実行して、プロンプトでパスワード「 changeme」、を入力してみましょう。

mvn --encrypt-password
Password:

暗号化されたパスワードが表示されます:

{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}

最後のステップは、settings.xmlファイルのプロキシセクションを編集し、暗号化されたパスワードを入力することです。

<proxies>
   <proxy>
        <id>BaeldungProxy_Encrypted</id>
        <host>proxy.baeldung.com</host>
        <port>80</port>
        <username>baeldung</username>
        <password>{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}</password>
    </proxy>
</proxies>

これを保存すると、Mavenは、暗号化されたパスワードを使用して、プロキシ経由でインターネットに接続できるようになります。

6. システムプロパティの使用

設定ファイルを介してMavenを構成することをお勧めしますが、Javaシステムプロパティを介してプロキシ構成を宣言することもできます。

オペレーティングシステムにすでにプロキシが構成されている場合は、次のように設定できます。

-Djava.net.useSystemProxies=true

または、常に有効になるように、管理者権限がある場合は、これを /lib/net.properties ファイル。

ただし、Maven自体がこの設定を尊重する場合でも、すべてのプラグインが尊重するわけではないため、このメソッドを使用すると接続が失敗する可能性があることに注意してください。

有効にしている場合でも、http.proxyHostシステムプロパティにHTTPプロキシの詳細を設定することでオーバーライドできます。

-Dhttp.proxyHost=proxy.baeldung.com

プロキシはデフォルトのポート80でリッスンしていますが、ポート8080でリッスンしている場合は、http.proxyPortプロパティを構成します。

-Dhttp.proxyPort=8080

そしてプロキシを必要としない私たちのサイトのために

-Dhttp.nonLocalHosts="internal.baeldung.com|localhost|127.*|[::1]"

したがって、プロキシが10.10.0.100の場合、次を使用できます。

mvn compile -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost|127.0.0.1

もちろん、プロキシで認証が必要な場合追加します

-Dhttp.proxyUser=baeldung
-Dhttp.proxyPassword=changeme

また、これらの設定の一部をすべてのMaven呼び出しに適用したい場合は、MAVEN_OPTS環境変数でそれらを定義できます。

set MAVEN_OPTS= -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080

これで、「 mvn 」を実行するたびに、これらの設定が自動的に適用されます–終了するまで。

7. 結論

この記事では、クレデンシャルがある場合とない場合の両方でMavenプロキシを構成し、パスワードを暗号化しました。 マスターパスワードを外付けドライブに保存する方法と、システムプロパティを使用してプロキシを構成する方法についても説明しました。

これで、 settings.xml ファイルを同僚とプレーンテキストでパスワードを提供せずに共有し、彼らの暗号化方法を示すことができます。

いつものように、この記事の例はGitHubから入手できます。