1. 概要

Mavenを使用している間、プロジェクト固有の構成のほとんどをpom.xmlに保持します。

Mavenは、設定ファイル settings.xml、を提供します。これにより、使用するローカルリポジトリとリモートリポジトリを指定できます。 また、クレデンシャルなど、ソースコードに不要な設定を保存するためにも使用できます。

このチュートリアルでは、settings.xmlの使用方法を学習します。 プロキシ、ミラーリング、およびプロファイルについて見ていきます。 また、プロジェクトに適用される現在の設定を決定する方法についても説明します。

2. 構成

settings.xml ファイルは、Mavenインストールを構成します。 pom.xml ファイルに似ていますが、グローバルに、またはユーザーごとに定義されます。

settings.xmlファイルで構成できる要素を調べてみましょう。 settings.xmlファイルのメインのsettings要素には、9つの可能な事前定義された子要素を含めることができます。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository/>
    <interactiveMode/>
    <offline/>
    <pluginGroups/>
    <servers/>
    <mirrors/>
    <proxies/>
    <profiles/>
    <activeProfiles/>
</settings>

2.1. 単純な値

一部の最上位構成要素には、単純な値が含まれています。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>${user.home}/.m2/repository</localRepository>
    <interactiveMode>true</interactiveMode>
    <offline>false</offline>
</settings>

localRepository 要素は、システムのローカルリポジトリのパスを指します。 ローカルリポジトリは、プロジェクトからのすべての依存関係がキャッシュされる場所です。 デフォルトでは、ユーザーのホームディレクトリを使用します。 ただし、ログインしているすべてのユーザーが共通のローカルリポジトリからビルドできるように変更することもできます。

InteractiveMode フラグは、Mavenが入力を求めるユーザーと対話できるようにするかどうかを定義します。 このフラグのデフォルトはtrueです。

offset フラグは、ビルドシステムがオフラインモードで動作するかどうかを決定します。 これはデフォルトでfalseです。 ただし、ビルドサーバーがリモートリポジトリに接続できない場合は、trueに切り替えることができます。

2.2. プラグイングループ

pluginGroups 要素には、groupIdを指定する子要素のリストが含まれています。 groupId は、特定のMavenアーティファクトを作成した組織の一意の識別子です。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <pluginGroups>
        <pluginGroup>org.apache.tomcat.maven</pluginGroup>
    </pluginGroups>
</settings>

コマンドラインでgroupIdが提供されていないプラグインが使用されている場合、Mavenはプラグイングループのリストを検索します。 リストには、デフォルトでグループorg.apache.maven.pluginsおよびorg.codehaus.mojoが含まれています。

上で定義したsettings.xmlファイルを使用すると、切り捨てられたTomcatプラグインコマンドを実行できます。

mvn tomcat7:help
mvn tomcat7:deploy
mvn tomcat7:run

2.3. プロキシ

MavenのHTTPリクエストの一部またはすべてにプロキシを設定できます。 プロキシ要素は子プロキシ要素のリストを許可しますが、一度にアクティブにできるプロキシは1つだけです

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <proxies>
        <proxy>
            <id>baeldung-proxy</id>
            <active>true</active>
            <protocol>http</protocol>
            <host>baeldung.proxy.com</host>
            <port>8080</port>
            <username>demo-user</username>
            <password>dummy-password</password>
            <nonProxyHosts>*.baeldung.com|*.apache.org</nonProxyHosts>
        </proxy>
    </proxies>
</settings>

active フラグを使用して、現在アクティブなプロキシを定義します。 次に、 nonProxyHosts 要素を使用して、プロキシされないホストを指定します。 使用される区切り文字は、特定のプロキシサーバーによって異なります。 最も一般的な区切り文字はパイプとコンマです。

2.4. ミラー

リポジトリはプロジェクト内で宣言できますpom.xml。これは、 プロジェクトコードを共有する開発者が、箱から出して適切なリポジトリ設定を取得することを意味します。

特定のリポジトリの代替ミラーを定義したい場合にミラーを使用できます。 これは、pom.xmlの内容を上書きします。

たとえば、すべてのリポジトリリクエストをミラーリングすることで、Mavenに単一のリポジトリを使用させることができます。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <mirrors>
        <mirror>
            <id>internal-baeldung-repository</id>
            <name>Baeldung Internal Repo</name>
            <url>https://baeldung.com/repo/maven2/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
</settings>

特定のリポジトリに対してミラーを1つだけ定義すると、Mavenが最初の一致を選択します。 通常、はCDNを介して世界中に配布されている公式リポジトリを使用する必要があります。

2.5. サーバー

プロジェクトpom.xmlでリポジトリを定義することをお勧めします。 ただし、 pom.xml を使用して、資格情報などのセキュリティ設定をソースコードリポジトリに配置しないでください。 代わりに、settings.xmlファイルこの安全な情報を定義します。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <servers>
        <server>
            <id>internal-baeldung-repository</id>
            <username>demo-user</username>
            <password>dummy-password</password>
            <privateKey>${user.home}/.ssh/bael_key</privateKey>
            <passphrase>dummy-passphrase</passphrase>
            <filePermissions>664</filePermissions>
            <directoryPermissions>775</directoryPermissions>
            <configuration></configuration>
        </server>
    </servers>
</settings>

settings.xml内のサーバーのIDは、pom.xmlに記載されているリポジトリのID要素と一致する必要があることに注意してください。 。 XMLを使用すると、プレースホルダーを使用して環境変数からクレデンシャルを取得することもできます。

3. プロファイル

プロファイル要素を使用すると、ID子要素によって区別される複数のプロファイル子要素を作成できます。 settings.xmlprofile要素は、pom.xmlで使用可能な同じ要素の切り捨てられたバージョンです。

4つの子要素のみを含めることができます。 アクティベーション リポジトリ pluginRepositories、プロパティ。 これらの要素は、特定のプロジェクトではなく、ビルドシステム全体を構成します。

settings.xml のアクティブなプロファイルの値は、pom.xmlまたはprofiles.xmlファイルの同等のプロファイル値を上書きすることに注意してください。 プロファイルはIDと一致します。

3.1. アクティベーション

プロファイルを使用して、特定の状況でのみ特定の値を変更できます。 Activation 要素を使用して、これらの状況を指定できます。 したがって、プロファイルのアクティブ化は、指定されたすべての基準が満たされたときに発生します

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <profiles>
        <profile>
            <id>baeldung-test</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <jdk>1.8</jdk>
                <os>
                    <name>Windows 10</name>
                    <family>Windows</family>
                    <arch>amd64</arch>
                    <version>10.0</version>
                </os>
                <property>
                    <name>mavenVersion</name>
                    <value>3.0.7</value>
                </property>
                <file>
                    <exists>${basedir}/activation-file.properties</exists>
                    <missing>${basedir}/deactivation-file.properties</missing>
                </file>
            </activation>
        </profile>
    </profiles>
</settings>

可能なアクティベーターは4つあり、すべてを指定する必要はありません。

  • jdk:は、指定されたJDKバージョンに基づいてアクティブ化されます(範囲はサポートされています)
  • os:はオペレーティングシステムのプロパティに基づいてアクティブ化します
  • プロパティ: Mavenが特定のプロパティ値を検出した場合、プロファイルをアクティブ化します
  • ファイル:は、指定されたファイル名が存在するか欠落している場合にプロファイルをアクティブ化します

どのプロファイルが特定のビルドをアクティブ化するかを確認するために、Mavenヘルププラグインを使用できます。

mvn help:active-profiles

出力には、特定のプロジェクトで現在アクティブなプロファイルが表示されます。

[INFO] --- maven-help-plugin:3.2.0:active-profiles (default-cli) @ core-java-streams-3 ---
[INFO]
Active Profiles for Project 'com.baeldung.core-java-modules:core-java-streams-3:jar:0.1.0-SNAPSHOT':
The following profiles are active:
 - baeldung-test (source: com.baeldung.core-java-modules:core-java-streams-3:0.1.0-SNAPSHOT)

3.2. プロパティ

Mavenプロパティは、特定の値の名前付きプレースホルダーと考えることができます。 値は、${property_name}表記を使用してpom.xmlファイル内でアクセスできます。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <profiles>
        <profile>
            <id>baeldung-test</id>
            <properties>
                <user.project.folder>${user.home}/baeldung-tutorials</user.project.folder>
            </properties>
        </profile>
    </profiles>
</settings>

pom.xml ファイルでは、次の4種類のプロパティを使用できます。

  • env プレフィックスを使用するプロパティは、${env。PATH}などの環境変数値を返します。
  • プロジェクトプレフィックスを使用するプロパティは、[X118X]${project.version}などのpom.xml要素で設定されたプロパティ値を返します。
  • 設定プレフィックスを使用するプロパティは、${settings.localRepository}。などのsettings.xmlから対応する要素の値を返します。
  • $ {java.home}。など、JavaのSystem.getPropertiesメソッドを介して利用可能なすべてのプロパティを直接参照する場合があります。
  • ${junit.version}。などのプレフィックスなしのproperties要素内に設定されたプロパティを使用できます。

3.3. リポジトリ

リモートリポジトリには、Mavenがローカルリポジトリにデータを取り込むために使用するアーティファクトのコレクションが含まれています。 特定のアーティファクトには、異なるリモートリポジトリが必要になる場合があります。 Maven は、アクティブなプロファイルで有効になっているリポジトリを検索します。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <profiles>
        <profile>
            <id>adobe-public</id>
            <repositories>
	        <repository>
	            <id>adobe-public-releases</id>
	            <name>Adobe Public Repository</name>
	            <url>https://repo.adobe.com/nexus/content/groups/public</url>
	            <releases>
	                <enabled>true</enabled>
	                <updatePolicy>never</updatePolicy>
	            </releases>
	            <snapshots>
	                <enabled>false</enabled>
	            </snapshots>
	        </repository>
	    </repositories>
        </profile>
    </profiles>
</settings>

repository 要素を使用して、特定のリポジトリからのアーティファクトのリリースまたはスナップショットバージョンのみを有効にすることができます。

3.4. プラグインリポジトリ

Mavenアーティファクトには、依存関係とプラグインの2つの標準タイプがあります。 Mavenプラグインは特殊なタイプのアーティファクトであるため、プラグインリポジトリを他のプラグインから分離する場合があります

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <profiles>
        <profile>
            <id>adobe-public</id>
            <pluginRepositories>
               <pluginRepository>
                  <id>adobe-public-releases</id>
                  <name>Adobe Public Repository</name>
                  <url>https://repo.adobe.com/nexus/content/groups/public</url>
                  <releases>
                      <enabled>true</enabled>
                      <updatePolicy>never</updatePolicy>
                  </releases>
                  <snapshots>
                      <enabled>false</enabled>
                  </snapshots>
	        </pluginRepository>
	    </pluginRepositories>
        </profile>
    </profiles>
</settings>

特に、 pluginRepositories 要素の構造は、repository要素と非常によく似ています。

3.5. アクティブなプロファイル

activeProfiles 要素には、特定のプロファイルIDを参照する子要素が含まれています。 Mavenは、ここで参照されているすべてのプロファイルを自動的にアクティブ化します

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <activeProfiles>
        <activeProfile>baeldung-test</activeProfile>
        <activeProfile>adobe-public</activeProfile>
    </activeProfiles>
</settings>

この例では、 mvn のすべての呼び出しは、コマンドラインに -P baeldung-test、adobe-publicを追加したかのように実行されます。

4. 設定レベル

settings.xml ファイルは通常、次の2つの場所にあります。

  • Mavensホームディレクトリのグローバル設定: $ {maven.home} /conf/settings.xml
  • ユーザーのホームのユーザー設定: ${user.home}/。m2/settings.xml

両方のファイルが存在する場合、それらの内容がマージされます。 ユーザー設定からの構成が優先されます

4.1. ファイルの場所を決定する

グローバル設定とユーザー設定の場所を特定するために、デバッグフラグを使用してMavenを実行し、出力で「settings」を検索できます。

$ mvn -X clean | grep "settings"

[DEBUG] Reading global settings from C:\Program Files (x86)\Apache\apache-maven-3.6.3\bin\..\conf\settings.xml
[DEBUG] Reading user settings from C:\Users\Baeldung\.m2\settings.xml

4.2. 効果的な設定を決定する

Mavenヘルププラグインを使用して、グローバル設定とユーザー設定の組み合わせの内容を確認できます。

mvn help:effective-settings

これは、XML形式の設定について説明しています。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>C:\Users\Baeldung\.m2\repository</localRepository>
    <pluginGroups>
        <pluginGroup>org.apache.tomcat.maven</pluginGroup>
        <pluginGroup>org.apache.maven.plugins</pluginGroup>
        <pluginGroup>org.codehaus.mojo</pluginGroup>
    </pluginGroups>
</settings>

4.3. デフォルトの場所を上書きする

Mavenでは、コマンドラインを介してグローバル設定とユーザー設定の場所をオーバーライドすることもできます。

$ mvn clean --settings c:\user\user-settings.xml --global-settings c:\user\global-settings.xml

同じコマンドの短い–sバージョンを使用することもできます。

$ mvn clean --s c:\user\user-settings.xml --gs c:\user\global-settings.xml

5. 結論

この記事では、Mavenのsettings.xmlファイルで使用可能な構成について説明しました。

プロキシ、リポジトリ、プロファイルを構成する方法を学びました。 次に、グローバル設定ファイルとユーザー設定ファイルの違いと、どちらが使用されているかを判断する方法について説明しました。

最後に、使用する効果的な設定を決定し、デフォルトのファイルの場所を上書きすることを検討しました。