blob: a1a6e571a485df29832abc72c1e15ec3b8d62426 [file] [log] [blame]
[[contributor-guide]]
= Contributor guide
[[prerequisites]]
== Prerequisites
* `git`
* `docker` for the native mode, see https://quarkus.io/guides/building-native-image-guide[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]]
== How to build
Checkout the code
[source,shell]
----
git clone https://github.com/apache/camel-quarkus.git
cd camel-quarkus
----
A fast build without tests:
[source,shell]
----
mvn clean install -DskipTests
----
A build with integration tests in the JVM mode only:
[source,shell]
----
mvn clean install
----
A build with integration tests in both the JVM mode and the native mode:
[source,shell]
----
mvn clean install -Dnative
----
== Create a new extension
1. You should know link:#how-to-build[how to build].
2. Go through the https://quarkus.io/guides/extension-authors-guide[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
https://github.com/apache/camel-quarkus/issues[GitHub issues].
4. Let others know that you work on the given extension by either creating a
https://github.com/apache/camel-quarkus/issues/new[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`:
+
[source,shell]
----
cd camel-quarkus
cd extensions
mvn quarkus:create-extension -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.
+
TIP: 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 https://quarkus.io/guides/extension-authors-guide[Quarkus extension author's guide],
ask for help in the given GitHub issue or via https://gitter.im/apache/camel-quarkus[Camel Quarkus chat].
Good luck!