1.3. Red Hat build of Apache Camel for Quarkus を使用した最初のプロジェクトのビルド


1.3.1. 概要

code.quarkus.redhat.com を使用して、Quarkus Maven プロジェクトを生成できます。このプロジェクトは、アプリケーションで使用するエクステンションを自動的に追加および設定します。

このセクションでは、Red Hat build of Apache Camel for Quarkus を使用して Quarkus Maven プロジェクトを作成するプロセスを説明します。このプロセスには以下が含まれます。

  • code.quarkus.redhat.com を使用したスケルトンアプリケーションの作成
  • 簡単な Camel ルートの追加
  • アプリケーションコードの探索
  • 開発モードでのアプリケーションのコンパイル
  • アプリケーションのテスト

1.3.2. code.quarkus.redhat.com を使用したスケルトンアプリケーションの生成

code.quarkus.redhat.com で、プロジェクトのブートストラップと生成を行うことができます。

Red Hat build of Apache Camel for Quarkus エクステンションは、'Integration' という見出しの下にあります。

追加のエクステンションが必要な場合は、'search' フィールドを使用して見つけてください。

使用するコンポーネントエクステンションを選択し、'Generate your application' をクリックして基本的なスケルトンプロジェクトをダウンロードします。

プロジェクトを GitHub に直接プッシュすることもできます。

code.quarkus.redhat.com を使用して Quarkus Maven プロジェクトを生成する方法の詳細は、Red Hat build of Quarkus のスタートガイドcode.quarkus.redhat.com を使用した Quarkus Maven プロジェクトの作成 を参照してください。

手順

  1. code.quarkus.redhat.com Web サイトで、次のエクステンションを選択します。

    • camel-quarkus-rest
    • camel-quarkus-jackson
    • camel-quarkus-direct

      注記

      code.quarkus.redhat.com のアプリケーションをコンパイルしないでください (手順の最終ステップ)。代わりに、以下の 「開発モード」 セクションで説明されているコンパイルコマンドを使用してください。

  2. 直前の手順で生成されたプロジェクトファイルの展開先ディレクトリーに移動します。

    $ cd <directory_name>
    Copy to Clipboard Toggle word wrap

1.3.3. アプリケーションコードの探索

このアプリケーションには、<dependencyManagement> でインポートされた com.redhat.quarkus.platform:quarkus-camel-bom 内で管理されるコンパイル依存関係が 2 つあります。

pom.xml

<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>com.redhat.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>
    <!-- The latest 3.8.x version from https://maven.repository.redhat.com/ga/com/redhat/quarkus/platform/quarkus-bom -->
</quarkus.platform.version>

...

<dependency>
    <groupId>${quarkus.platform.group-id}</groupId>
    <artifactId>${quarkus.platform.artifact-id}</artifactId>
    <version>${quarkus.platform.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>${quarkus.platform.group-id}</groupId>
    <artifactId>quarkus-camel-bom</artifactId>
    <version>${quarkus.platform.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
Copy to Clipboard Toggle word wrap

注記

BOM 依存関係管理の詳細は、Red Hat build of Apache Camel for Quarkus を使用したアプリケーションの開発 を参照してください。

アプリケーションは、src/main/resources/application.properties 内で定義されたプロパティーで設定できます。たとえば、camel.context.name を設定できます。

1.3.4. 簡単な Camel ルートの追加

注記

この例では、camel-quarkus-examples リポジトリーの簡単な例を使用します。これは、2 つの単純なクラス Fruit.javaLegume.java、およびルート定義 Routes.java で構成されています。

手順

  1. src/main/java/org/acme/ サブフォルダーに Fruit.java という名前のファイルを作成します。
  2. 以下のコードスニペットのようにクラスを追加します。

    Fruit.java

    package org.acme.rest.json;
    
    import java.util.Objects;
    
    import io.quarkus.runtime.annotations.RegisterForReflection;
    
    /**
     * A REST entity representing a fruit.
     */
    @RegisterForReflection // Lets Quarkus register this class for reflection during the native build
    public class Fruit {
        private String name;
        private String description;
    
        public Fruit() {
        }
    
        public Fruit(String name, String description) {
            this.name = name;
            this.description = description;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (!(obj instanceof Fruit)) {
                return false;
            }
    
            Fruit other = (Fruit) obj;
    
            return Objects.equals(other.name, this.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(this.name);
        }
    }
    Copy to Clipboard Toggle word wrap

  3. src/main/java/org/acme/ サブフォルダーに Legume.java という名前のファイルを作成します。
  4. 以下のコードスニペットのようにクラスを追加します。

    Legume.java

    package org.acme.rest.json;
    
    import java.util.Objects;
    
    import io.quarkus.runtime.annotations.RegisterForReflection;
    
    /**
     * A REST entity representing a legume.
     */
    @RegisterForReflection // Lets Quarkus register this class for reflection during the native build
    public class Legume {
        private String name;
        private String description;
    
        public Legume() {
        }
    
        public Legume(String name, String description) {
            this.name = name;
            this.description = description;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (!(obj instanceof Legume)) {
                return false;
            }
    
            Legume other = (Legume) obj;
    
            return Objects.equals(other.name, this.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(this.name);
        }
    }
    Copy to Clipboard Toggle word wrap

  5. src/main/java/org/acme/ サブフォルダーに Routes.java という名前のファイルを作成します。
  6. 以下のコードスニペットのように Camel Rest ルートを追加します。

    Routes.java

    package org.acme.rest.json;
    
    import java.util.Collections;
    import java.util.LinkedHashSet;
    import java.util.Set;
    
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.model.rest.RestBindingMode;
    
    /**
     * Camel route definitions.
     */
    public class Routes extends RouteBuilder {
        private final Set<Fruit> fruits = Collections.synchronizedSet(new LinkedHashSet<>());
        private final Set<Legume> legumes = Collections.synchronizedSet(new LinkedHashSet<>());
    
        public Routes() {
    
            /* Let's add some initial fruits */
            this.fruits.add(new Fruit("Apple", "Winter fruit"));
            this.fruits.add(new Fruit("Pineapple", "Tropical fruit"));
    
            /* Let's add some initial legumes */
            this.legumes.add(new Legume("Carrot", "Root vegetable, usually orange"));
            this.legumes.add(new Legume("Zucchini", "Summer squash"));
        }
    
        @Override
        public void configure() throws Exception {
    
            restConfiguration().bindingMode(RestBindingMode.json);
    
            rest("/fruits")
                    .get()
                    .to("direct:getFruits")
    
                    .post()
                    .type(Fruit.class)
                    .to("direct:addFruit");
    
            rest("/legumes")
                    .get()
                    .to("direct:getLegumes");
    
            from("direct:getFruits")
                    .setBody().constant(fruits);
    
            from("direct:addFruit")
                    .process().body(Fruit.class, fruits::add)
                    .setBody().constant(fruits);
    
            from("direct:getLegumes")
                    .setBody().constant(legumes);
        }
    }
    Copy to Clipboard Toggle word wrap

    この例の詳細は、camel-quarkus-examples リポジトリー を参照してください。

1.3.5. 開発モード

$ mvn clean compile quarkus:dev
Copy to Clipboard Toggle word wrap

このコマンドでは、プロジェクトのコンパイル、アプリケーションの起動、Quarkus ツールでのワークスペースの変更監視などを行います。プロジェクトに加えた変更は、実行中のアプリケーションに自動的に反映されます。

ブラウザーでアプリケーションを確認できます。(たとえば、rest-json サンプルアプリケーションの場合は、http://localhost:8080/fruits にアクセスします。)

アプリケーションコードを変更する場合 (例: 'Apple' を 'Orange' に変更)、アプリケーションは自動的に更新されます。適用された変更を確認するには、ブラウザーを更新してください。

開発モードの詳細は、Quarkus のドキュメントの 開発モード のセクションを参照してください。

1.3.6. テスト

1.3.6.1. JVM モード

JVM モードで作成した Camel Rest ルートをテストするには、以下のようにテストクラスを追加します。

手順

  1. src/test/java/org/acme/ サブフォルダーに RoutesTest.java という名前のファイルを作成します。
  2. 以下のコードスニペットのように RoutesTest クラスを追加します。

    RoutesTest.java

    package org.acme.rest.json;
    
    import io.quarkus.test.junit.QuarkusTest;
    import org.junit.jupiter.api.Test;
    
    import static io.restassured.RestAssured.given;
    import static org.hamcrest.CoreMatchers.is;
    import static org.hamcrest.Matchers.containsInAnyOrder;
    
    /**
     * JVM mode tests.
     */
    @QuarkusTest
    public class RestJsonTest {
    
        @Test
        public void fruits() {
    
            /* Assert the initial fruits are there */
            given()
                    .when().get("/fruits")
                    .then()
                    .statusCode(200)
                    .body(
                            "$.size()", is(2),
                            "name", containsInAnyOrder("Apple", "Pineapple"),
                            "description", containsInAnyOrder("Winter fruit", "Tropical fruit"));
    
            /* Add a new fruit */
            given()
                    .body("{\"name\": \"Pear\", \"description\": \"Winter fruit\"}")
                    .header("Content-Type", "application/json")
                    .when()
                    .post("/fruits")
                    .then()
                    .statusCode(200)
                    .body(
                            "$.size()", is(3),
                            "name", containsInAnyOrder("Apple", "Pineapple", "Pear"),
                            "description", containsInAnyOrder("Winter fruit", "Tropical fruit", "Winter fruit"));
        }
    
        @Test
        public void legumes() {
            given()
                    .when().get("/legumes")
                    .then()
                    .statusCode(200)
                    .body("$.size()", is(2),
                            "name", containsInAnyOrder("Carrot", "Zucchini"),
                            "description", containsInAnyOrder("Root vegetable, usually orange", "Summer squash"));
        }
    
    }
    Copy to Clipboard Toggle word wrap

JVM モードテストは、Maven の test フェーズで maven-surefire-plugin によって実行されます。

$ mvn clean test
Copy to Clipboard Toggle word wrap

1.3.6.2. ネイティブモード

ネイティブモードで作成した Camel Rest ルートをテストするには、以下のようにテストクラスを追加します。

手順

  1. src/test/java/org/acme/ サブフォルダーに NativeRoutesIT.java という名前のファイルを作成します。
  2. 以下のコードスニペットのように NativeRoutesIT クラスを追加します。

    NativeRoutesIT.java

    package org.acme;
    
    import io.quarkus.test.junit.NativeImageTest;
    
    @NativeImageTest
    public class NativeRoutesIT extends RoutesTest {
    
        // Execute the same tests but in native mode.
    }
    Copy to Clipboard Toggle word wrap

    ネイティブモードテストは、verify フェーズで maven-failsafe-plugin を使用して検証されます。

  3. native プロパティーを渡して、テストを実行するプロファイルをアクティベートします。

    $ mvn clean verify -Pnative
    Copy to Clipboard Toggle word wrap
ヒント

詳細と、CamelTestSupport スタイルのテストの使用方法は、Camel Quarkus 拡張機能のテスト を参照してください。

1.3.7. アプリケーションのパッケージ化と実行

1.3.7.1. JVM モード

手順

  1. mvn package を実行して、ストック JVM で実行するための thin jar を準備します。

    $ mvn clean package
    $ ls -lh target/quarkus-app
    ...
    -rw-r--r--. 1 user user 238K Oct 11 18:55  quarkus-run.jar
    ...
    Copy to Clipboard Toggle word wrap
    注記

    シン形式の jar にはアプリケーションコードのみが含まれます。実行するには、target/quarkus-app/lib の依存関係も必要です。

  2. 次のように jar を実行します。

    $ java -jar target/quarkus-app/quarkus-run.jar
    ...
    [io.quarkus] (main) Quarkus started in 1.163s. Listening on: http://[::]:8080
    Copy to Clipboard Toggle word wrap
注記

起動時間は約 1 秒です。

1.3.7.2. ネイティブモード

手順

ネイティブ実行可能ファイルを準備するには、次のようにします。

  1. コマンド mvn clean package -Pnative を実行します。

    $ mvn clean package -Pnative
    $ ls -lh target
    ...
    -rwxr-xr-x. 1 user user  46M Oct 11 18:57  code-with-quarkus-1.0.0-SNAPSHOT-runner
    ...
    Copy to Clipboard Toggle word wrap
    注記

    runner には .jar 拡張子がなく、x (実行可能) パーミッションが設定されています。これは次のように直接実行できます。

    $ ./target/*-runner
    ...
    [io.quarkus] (main) Quarkus started in 0.013s. Listening on: http://[::]:8080
    ...
    Copy to Clipboard Toggle word wrap

    アプリケーションは 13 ミリ秒で開始しました。

  2. ps -o rss,command -p $(pgrep code-with) コマンドでメモリー使用量を表示します。

    $ ps -o rss,command -p $(pgrep code-with)
      RSS COMMAND
    65852 ./target/code-with-quarkus-1.0.0-SNAPSHOT-runner
    Copy to Clipboard Toggle word wrap

    アプリケーションは 65 MB のメモリーを使用します。

ヒント

ネイティブ実行可能ファイルの準備に関する追加情報は、Quarkus アプリケーションのネイティブ実行可能ファイルへのコンパイル ガイドの ネイティブ実行可能ファイルの作成 を参照してください。

ヒント

Quarkus Native executable guide には、コンテナーイメージを作成する手順 などの詳細情報が記載されています。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る