1.3. Camel Extensions for Quarkus を使用した最初のプロジェクトのビルド


1.3.1. 概要

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

本セクションでは、以下を含む Camel Extensions for Quarkus を使用して Quarkus Maven プロジェクトを作成するプロセスについて説明します。

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

1.3.2. スケルトンアプリケーションの生成

プロジェクトのブートストラップおよび生成は、code.quarkus.redhat.com から可能です。Camel Extensions for Quarkus 拡張機能は、見出し Integration の下にあります。

'search' フィールドを使用して、必要なエクステンションを見つけます。

使用するコンポーネントエクステンションを選択し、Generate your application ボタンをクリックして基本的なスケルトンプロジェクトをダウンロードします。また、プロジェクトを直接 GitHub にプッシュするオプションもあります。

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

手順

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

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

      注記

      本書の一部としてこのタスクを実行するため、上記の手順の最終ステップに記載されているアプリケーションをコンパイルしないでください。

  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 2.2.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 依存関係管理の詳細は、Camel Extensions for Quarkus を使用したアプリケーションの開発 を参照してください。

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

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

手順

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

    Routes.java

    package org.acme;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Objects;
    import java.util.concurrent.CopyOnWriteArrayList;
    
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.model.rest.RestBindingMode;
    
    import io.quarkus.runtime.annotations.RegisterForReflection;
    
    public class Routes extends RouteBuilder {
        private final List<Fruit> fruits = new CopyOnWriteArrayList<>(Arrays.asList(new Fruit("Apple")));
    
        @Override
        public void configure() throws Exception {
            restConfiguration().bindingMode(RestBindingMode.json);
    
            rest("/fruits")
                    .get()
                    .route()
                    .setBody(e -> fruits)
                    .endRest()
    
                    .post()
                    .type(Fruit.class)
                    .route()
                    .process().body(Fruit.class, (Fruit f) -> fruits.add(f))
                    .endRest();
    
        }
    
        @RegisterForReflection // Let Quarkus register this class for reflection during the native build
        public static class Fruit {
            private String name;
    
            public Fruit() {
            }
    
            public Fruit(String name) {
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            @Override
            public int hashCode() {
                return Objects.hash(name);
            }
    
            @Override
            public boolean equals(Object obj) {
                if (this == obj)
                    return true;
                if (obj == null)
                    return false;
                if (getClass() != obj.getClass())
                    return false;
                Fruit other = (Fruit) obj;
                return Objects.equals(name, other.name);
            }
    
        }
    
    }
    Copy to Clipboard Toggle word wrap

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;
    
    import io.quarkus.test.junit.QuarkusTest;
    import org.junit.jupiter.api.Test;
    
    import static io.restassured.RestAssured.given;
    import org.hamcrest.Matchers;
    
    @QuarkusTest
    public class RoutesTest {
    
        @Test
        public void testFruitsEndpoint() {
    
            /* Assert the initial fruit is there */
            given()
                    .when().get("/fruits")
                    .then()
                    .statusCode(200)
                    .body(
                            "$.size()", Matchers.is(1),
                            "name", Matchers.contains("Orange"));
    
            /* Add a new fruit */
            given()
                    .body("{\"name\": \"Pear\"}")
                    .header("Content-Type", "application/json")
                    .when()
                    .post("/fruits")
                    .then()
                    .statusCode(200);
    
            /* Assert that pear was added */
            given()
                    .when().get("/fruits")
                    .then()
                    .statusCode(200)
                    .body(
                            "$.size()", Matchers.is(2),
                            "name", Matchers.contains("Orange", "Pear"));
        }
    
    }
    Copy to Clipboard Toggle word wrap

JVM モードテストは、Maven フェーズで 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 を使用して検証されます。ネイティブ プロパティーを指定して、テストを実行するプロファイルをアクティベートします。

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

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

1.3.7.1. JVM モード

mvn パッケージ は、ストック JVM で実行するためにシン形式の 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

これは、以下のように実行できます。

$ 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

起動時間の周りに 2 回目に着目することに注意してください。

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

1.3.7.2. ネイティブモード

注記

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

ネイティブ実行可能ファイルを作成するには、以下のコマンドを実行します。

$ 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

上記の一覧の ランナー には .jar 拡張がなく、x (実行可能) パーミッションが設定されていることに注意してください。そのため、以下を直接実行できます。

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

アプリケーションはたった 13 ミリ秒以内に起動していることに注意してください。メモリーを効率的に処理する方法を確認するには、以下のコマンドを入力します。

$ 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 ネイティブの実行可能ガイド には、コンテナーイメージを作成する手順 などの詳細情報が記載されています。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat