1.7. Camel Spring Boot にパッチを適用する


新しい patch-maven-plugin メカニズムを使用すると、Red Hat Camel Spring Boot アプリケーションにパッチを適用できます。このメカニズムを使用すると、さまざまな Red Hat アプリケーション BOMS によって提供される個々のバージョン (camel-spring-boot-bom など) を変更できます。

patch-maven-plugin の目的は、Camel on Spring Boot BOM にリストされている依存関係のバージョンをアプリケーションに適用するパッチメタデータで指定されているバージョンに更新することです。

patch-maven-plugin は次の操作を実行します。

  • 現在の Red Hat アプリケーション BOM に関連するパッチメタデータを取得します。
  • BOM からインポートされた <dependencyManagement> にバージョンの変更を適用します。

patch-maven-plugin がメタデータを取得したら、プラグインが宣言されたプロジェクトの管理された依存関係および直接の依存関係すべてに対して繰り返し処理を行い、CVE/patch メタデータを使用して、一致する依存関係バージョンを置き換えます。バージョンが置き換えられたら、Maven ビルドが続行され、標準の Maven プロジェクトのステージに進みます。

手順

以下の手順では、アプリケーションにパッチを適用する方法を説明します。

  1. patch-maven-plugin をプロジェクトの pom.xml ファイルに追加します。patch-maven-plugin のバージョンは、Spring Boot BOM の Camel のバージョンと同じである必要があります。

    <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>
    Copy to Clipboard Toggle word wrap
  2. mvn clean applymvn validate、または mvn dependency:tree コマンドのいずれかを実行すると、プラグインはプロジェクトモジュールを検索して、モジュールが Red Hat Camel Spring Boot BOM を使用しているかどうかを確認します。サポートされている BOM は次のとおりです。

    • com.redhat.camel.springboot.platform:camel- spring -boot-bom: Camel Spring Boot BOM 用
  3. プラグインは、上記の 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
    
    =================================================
    Copy to Clipboard Toggle word wrap
  4. 正しい 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.20.1.redhat-00043/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] Done in 938ms
    
    =================================================
    Copy to Clipboard Toggle word wrap
  5. 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.20.1.redhat-00041</release>
          <versions>
            <version>3.20.1.redhat-00041</version>
          </versions>
          <lastUpdated>20230322103858</lastUpdated>
        </versioning>
      </metadata>
      Copy to Clipboard Toggle word wrap

  6. patch-maven-plugin は、メタデータを解析して、現在のプロジェクトに適用するバージョンを選択します。このアクションは特定のバージョンの Spring Boot BOM で Camel を使用する Maven プロジェクトのみで可能です。バージョン範囲以降に一致するメタデータのみが適用され、最新バージョンのメタデータのみが取得されます。
  7. patch-maven-plugin は、前の手順で見つかった groupIdartifactId、および 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
    Copy to Clipboard Toggle word wrap
  8. メタデータがリモートリポジトリー、ローカルリポジトリー、または 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.20,3.21)" />
        <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>
    Copy to Clipboard Toggle word wrap
  9. 最後に、現在のプロジェクトの管理された依存関係に繰り返し処理が行われるときに、パッチメタデータに指定された修正リストが参照されます。一致するこれらの依存関係 (および管理された依存関係) は、固定バージョンに変更されます。以下に例を示します。

    $ 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.20.1.redhat-00043/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
    
    =================================================
    Copy to Clipboard Toggle word wrap

パッチのスキップ

特定のパッチをプロジェクトに適用したくない場合、patch-maven-pluginskip オプションを提供します。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>
Copy to Clipboard Toggle word wrap
  • または、以下のように 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
...
Copy to Clipboard Toggle word wrap

上記の出力にあるように、patch-maven-plugin は呼び出されず、パッチはアプリケーションに適用されません。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat