1.7. Camel Spring Boot にパッチを適用する
新しい patch-maven-plugin メカニズムを使用すると、Red Hat Camel Spring Boot アプリケーションにパッチを適用できます。このメカニズムを使用すると、異なる Red Hat アプリケーション BOM によって提供される個々のバージョン (camel-spring-boot-bom など) を変更できます。
patch-maven-plugin の目的は、Camel on Spring Boot BOM にリストされている依存関係のバージョンを、アプリケーションに適用するパッチのメタデータで指定されているバージョンに更新することです。
patch-maven-plugin は次の操作を実行します。
- 現在の Red Hat アプリケーション BOM に関連するパッチのメタデータを取得します。
- BOM からインポートされた <dependencyManagement> にバージョンの変更を適用します。
patch-maven-plugin は、メタデータを取得すると、プラグインが宣言されたプロジェクトの管理対象および直接の依存関係すべてに対して繰り返し処理を行い、CVE/パッチのメタデータを使用して、一致する依存関係バージョンを置き換えます。バージョンが置き換えられると、Maven ビルドが続行され、標準の Maven プロジェクトのステージに進みます。
手順
以下の手順では、アプリケーションにパッチを適用する方法を説明します。
patch-maven-pluginをプロジェクトのpom.xmlファイルに追加します。patch-maven-pluginのバージョンは、Camel on Spring Boot BOM のバージョンと同じである必要があります。<build> <plugins> <<plugin> <groupId>com.redhat.camel.springboot.platform</groupId> <artifactId>patch-maven-plugin</artifactId> <version>${camel-spring-boot-version}</version> <extensions>true</extensions> </plugin> </plugins> </build>mvn clean apply、mvn validate、またはmvn dependency:treeコマンドのいずれかを実行すると、プラグインはプロジェクトモジュールを検索して、モジュールが Red Hat Camel Spring Boot BOM を使用しているかどうかを確認します。サポートされている BOM は次のとおりです。-
com.redhat.camel.springboot.platform:camel- spring -boot-bom: Camel Spring Boot BOM 用
-
プラグインは、上記の BOM を検出できない場合、次のメッセージを表示します。
$ mvn clean install [INFO] Scanning for projects... [INFO] ========== Red Hat Maven patching ========== [INFO] [PATCH] No project in the reactor uses Camel on Spring Boot product BOM. Skipping patch processing. [INFO] [PATCH] Done in 7ms =================================================正しい BOM が使用されている場合、パッチのメタデータが検出されますが、パッチは検出されません。
$ mvn clean install [INFO] Scanning for projects... [INFO] ========== Red Hat Maven patching ========== [INFO] [PATCH] Reading patch metadata and artifacts from 2 project repositories [INFO] [PATCH] - redhat-ga-repository: http://maven.repository.redhat.com/ga/ [INFO] [PATCH] - central: https://repo.maven.apache.org/maven2 Downloading from redhat-ga-repository: http://maven.repository.redhat.com/ga/com/redhat/camel/springboot/platform/redhat-camel-spring-boot-patch-metadata/maven-metadata.xml Downloading from central: https://repo.maven.apache.org/maven2/com/redhat/camel/springboot/platform/redhat-camel-spring-boot-patch-metadata/maven-metadata.xml [INFO] [PATCH] Resolved patch descriptor: /path/to/.m2/repository/com/redhat/camel/springboot/platform/redhat-camel-spring-boot-patch-metadata/3.18.3.redhat-00035/redhat-camel-spring-boot-patch-metadata-3.18.3.redhat-00035.xml [INFO] [PATCH] Patch metadata found for com.redhat.camel.springboot.platform/camel-spring-boot-bom/[3.18) [INFO] [PATCH] Done in 938ms =================================================patch-maven-pluginは、この Maven メタデータを取得しようとします。Camel Spring Boot BOM を含むプロジェクトの場合、
com.redhat.camel.springboot.platform:redhat-camel-spring-boot-patch-metadata/maven-metadata.xmlが解決されます。この XML データは、com.redhat.camel.springboot.platform:redhat-camel-spring-boot-patch-metadata:RELEASE座標を持つアーティファクトのメタデータです。Maven によって生成されたメタデータの例
<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>com.redhat.camel.springboot.platform</groupId> <artifactId>redhat-camel-spring-boot-patch-metadata</artifactId> <versioning> <release>3.18.3.redhat-00035</release> <versions> <version>3.18.3.redhat-00035</version> </versions> <lastUpdated>20230322103858</lastUpdated> </versioning> </metadata>
-
patch-maven-pluginは、メタデータを解析して、現在のプロジェクトに適用するバージョンを選択します。このアクションは特定のバージョンの Camel on Spring Boot BOM を使用する Maven プロジェクトのみで可能です。バージョン範囲以降に一致するメタデータのみが適用され、最新バージョンのメタデータのみが取得されます。 patch-maven-pluginは、前の手順で見つかったgroupId、artifactId、およびversionによって識別されるパッチのメタデータをダウンロードするためのリモート Maven リポジトリーのリストを収集します。これらの Maven リポジトリーは、アクティブなプロファイル内のプロジェクトの<repositories>要素にリストされ、またsettings.xmlファイルのリポジトリーにもリストされます。$ mvn clean install [INFO] Scanning for projects... [INFO] ========== Red Hat Maven patching ========== [INFO] [PATCH] Reading patch metadata and artifacts from 2 project repositories [INFO] [PATCH] - MRRC-GA: https://maven.repository.redhat.com/ga [INFO] [PATCH] - central: https://repo.maven.apache.org/maven2メタデータは、リモートリポジトリー、ローカルリポジトリー、または ZIP ファイルから取得されたものであっても、
patch-maven-pluginによって分析されます。取得されたメタデータには CVE のリストが含まれており、CVE ごとに、影響を受ける Maven アーティファクト (glob パターンとバージョン範囲で指定) のリストと、指定の CVE に対する修正を含むバージョンが記載されています。以下に例を示します。<?xml version="1.0" encoding="UTF-8" ?> <<metadata xmlns="urn:redhat:patch-metadata:1"> <product-bom groupId="com.redhat.camel.springboot.platform" artifactId="camel-spring-boot-bom" versions="[3.18)" /> <cves> </cves> <fixes> <fix id="HF0-1" description="logback-classic (Example) - Version Bump"> <affects groupId="ch.qos.logback" artifactId="logback-classic" versions="[1.0,1.3.0)" fix="1.3.0" /> </fix> </fixes> </metadata>最後に、現在のプロジェクトに含まれるすべての管理対象の依存関係に繰り返し処理を行うときに、パッチのメタデータで指定された修正のリストが参照されます。これらの依存関係のうち一致するもの (および管理対象の依存関係) が、固定バージョンに変更されます。以下に例を示します。
$ mvn dependency:tree [INFO] Scanning for projects... [INFO] ========== Red Hat Maven patching ========== [INFO] [PATCH] Reading patch metadata and artifacts from 3 project repositories [INFO] [PATCH] - redhat-ga-repository: http://maven.repository.redhat.com/ga/ [INFO] [PATCH] - local: file:///path/to/.m2/repository [INFO] [PATCH] - central: https://repo.maven.apache.org/maven2 [INFO] [PATCH] Resolved patch descriptor:/path/to/.m2/repository/com/redhat/camel/springboot/platform/redhat-camel-spring-boot-patch-metadata/3.18.3.redhat-00035/redhat-camel-spring-boot-patch-metadata-3.20.1.redhat-00043.xml [INFO] [PATCH] Patch metadata found for com.redhat.camel.springboot.platform/camel-spring-boot-bom/[3.20,3.21) [INFO] [PATCH] - patch contains 1 patch fix [INFO] [PATCH] Processing managed dependencies to apply patch fixes... [INFO] [PATCH] - HF0-1: logback-classic (Example) - Version Bump [INFO] [PATCH] Applying change ch.qos.logback/logback-classic/[1.0,1.3.0) -> 1.3.0 [INFO] [PATCH] Project com.test:yaml-routes [INFO] [PATCH] - managed dependency: ch.qos.logback/logback-classic/1.2.11 -> 1.3.0 [INFO] [PATCH] Done in 39ms =================================================
パッチのスキップ
特定のパッチをプロジェクトに適用する必要がない場合、patch-maven-plugin には skip オプションが用意されています。patch-maven-plugin をプロジェクトの pom.xml ファイルにすでに追加しており、バージョンを変更する必要がない場合は、次のいずれかの方法を使用してパッチをスキップできます。
-
以下のように、プロジェクトの
pom.xmlファイルに skip オプションを追加します。
<build>
<plugins>
<plugin>
<groupId>com.redhat.camel.springboot.platform</groupId>
<artifactId>patch-maven-plugin</artifactId>
<version>${camel-spring-boot-version}</version>
<extensions>true</extensions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
-
または、以下のように
mvnコマンドの実行時に-DskipPatchオプションを使用します。
$ mvn clean install -DskipPatch
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------------< com.example:test-csb >-------------------------
[INFO] Building A Camel Spring Boot Route 1.0-SNAPSHOT
...
上記の出力にあるように、patch-maven-plugin は呼び出されず、パッチはアプリケーションに適用されません。