Contributor guide

Prerequisites

  • git

  • docker for the native mode, see Building a native executable section of the Quarkus documentation.

  • Java 8

  • Maven 3.5.3+ (unless you use the Maven Wrapper, a.k.a. mvnw available in the source tree).

How to build

Checkout the code

git clone https://github.com/apache/camel-quarkus.git
cd camel-quarkus

A fast build without tests:

mvn clean install -DskipTests

A build with integration tests in the JVM mode only:

mvn clean install

A build with integration tests in both the JVM mode and the native mode:

mvn clean install -Dnative

Create a new extension

  1. You should know how to build.

  2. Go through the Quarkus extension author’s guide to get an idea what is expecting you.

  3. Make sure that nobody else works on the same extension already by searching through the GitHub issues.

  4. Let others know that you work on the given extension by either creating a new issue or asking to assign an existing one to you.

  5. Scaffold the necessary Maven modules using quarkus-maven-plugin. As an example let’s add a new extension for supporting an imaginary Camel component foo:

    cd camel-quarkus
    cd extensions
    mvn quarkus:create-extension groovy:execute@scaffold-integration-test -N \
        -Dquarkus.artifactIdBase=foo \
        -Dquarkus.nameBase="Foo"

    where:

    • foo is the unique part of the new extension’s artifactId without the camel-quarkus- prefix

    • Foo is the unique part of the artifact name without the `Camel Quarkus :: ` prefix

      The artifactId and artifact name prefixes and suffixes are added automatically by the plugin.

      The above sequence of commands does the following:

    • It creates three new Maven modules under the extensions directory: camel-quarkus-foo-parent, camel-quarkus-foo (a.k.a. the runtime module) and camel-quarkus-foo-deployment.

    • These three modules are linked where necessary:

      • camel-quarkus-foo-parent is added to the <modules> of camel-quarkus-extensions

      • camel-quarkus-foo is added to the <dependencyManagement> of the runtime BOM (Bill of Materials) poms/bom/pom.xml

      • camel-quarkus-foo-deployment is added to the <dependencyManagement> of the deployment BOM (Bill of Materials) poms/bom-deployment/pom.xml

    • It creates a basic FooProcessor class in the deployment module.

    • It also creates a stub of an integration test module under integration-tests/foo.

      A compilation performed immediately after generating the modules should pass flawlessly but running the tests will fail because the test project needs to get finished.

      The nameBase parameter of the mojo is optional. If you do not specify it on the command line, the plugin will derive it from artifactIdBase by replacing dashes with spaces and uppercasing each token. So you may consider omitting explicit nameBase in some cases.
  6. Complete the extension by adding dependencies to the runtime module. You probably want to add a dependency on on the given Camel component - in our case org.apache.camel:camel-foo.

  7. Complete the integration test module under integration-tests/foo. Make sure you test both the consumer and the producer of the component (if the component supports both). Make sure the tests are passing both in the JVM mode (mvn test) and in the native mode (mvn verify -Dnative).

  8. In case of problems, consult the Quarkus extension author’s guide, ask for help in the given GitHub issue or via Camel Quarkus chat.

Good luck!