-
git
-
GraalVM with
native-image
command installed andGRAALVM_HOME
environment variable set, see Building a native executable section of the Quarkus documentation. -
If your are on Linux,
docker
is sufficient for the native mode too. Use-Pnative,docker
instead of-Pnative
if you choose this option. -
Java 8
-
Maven 3.6.2+ (unless you use the Maven Wrapper, a.k.a.
mvnw
available in the source tree).
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 -Pnative
-
You should know how to build.
-
Go through the Quarkus extension author’s guide to get an idea what is expecting you.
-
Make sure that nobody else works on the same extension already by searching through the GitHub issues.
-
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.
-
Scaffold the necessary Maven modules using
quarkus-maven-plugin
. As an example let’s add a new extension for supporting an imaginary Camel componentfoo-abc
:$ cd camel-quarkus $ mvn cq:create -N -Dcq.artifactIdBase=foo-abc
where:
-
foo-abc
is the unique part of the new extension’sartifactId
without thecamel-quarkus-
prefixThe above sequence of commands does the following:
-
It creates three new Maven modules under the
extensions
directory:camel-quarkus-foo-abc-parent
,camel-quarkus-foo-abc
(a.k.a. the runtime module) andcamel-quarkus-foo-abc-deployment
. -
These three modules are linked where necessary:
-
camel-quarkus-foo-abc-parent
is added to the<modules>
ofcamel-quarkus-extensions
-
camel-quarkus-foo-abc
is added to the<dependencyManagement>
of the runtime BOM (Bill of Materials)poms/bom/pom.xml
-
camel-quarkus-foo-abc-deployment
is added to the<dependencyManagement>
of the deployment BOM (Bill of Materials)poms/bom-deployment/pom.xml
-
-
It creates a basic
FooAbcProcessor
class in the deployment module. -
It also creates a stub of an integration test module under
integration-tests/foo-abc
.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. You need to build
poms/bom
andpoms/bom-deployment
one time first.
-
-
Review the generated
extensions/foo-abc/runtime/src/main/resources/META-INF/quarkus-extension.yaml
file. If you see improper description or keyword, file a new Camel issue and ask to fix the metadata for the given Camel component. -
Review the dependencies in the generate runtime and deployment modules. In case the given library is supported by Quarkus, you may want to add a dependency on the corresponding Quarkus extension.
-
Complete the integration test module under
integration-tests/foo-abc
. 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 -Pnative
). -
In case of problems, consult the Quarkus extension author’s guide, ask for help in the given GitHub issue or via Camel Quarkus chat.
-
If the usage of your new extension differs from the usage of the given Camel component, please add an AsciiDoc page under
docs/modules/ROOT/pages/extensions
and document the differences and Quarkus specific configuration options there. For our imaginary Camel componentfoo-abc
the path of the page would bedocs/modules/ROOT/pages/extensions/foo-abc.adoc
. After completing the page, runmvn clean install -DskipTests
from the root of the source tree to add your extension to the autogenerated list of extensions. -
Before sending a pull request, please make sure you have run the following Maven command from the project root folder:
$ mvn process-resources -Pformat
The above command will perform the following tasks:
-
Add license headers to the new files
-
Re-generate the list of extensions and the Camel Quarkus Catalog
-
Sort elements in various POM files properly
Review the result visually.
-
-
Please squash your commits before sending a pull request.
Good luck!