The reference material used to influence decisions for this projects structure are available here:
- Create an Aggregate Maven Project
- POM Best Practices
- Using Aggregate and Parent POMs
- Aggregator vs Parent
The following principles will be adopted:
- A separate parent and aggregator POM will exist at the top-level (or any other grouping for e.g. the services folder) to support independent module versioning.
- Build Tools will have their own configuration module, per the Apache recommendations
- Profiles will be used to allow building of nested modules e.g. -Pservices, -Pcve
- Quarkus Services will be modules below the service directory
- common modules will be created for both service and non-service (generic) code
- To ensure that beans in a dependency get scanned when building a Quarkus service, jandex is used
- service application.properties includes a property quarkus.native.additional-build-args=-H:ResourceConfigurationFiles=resources-config.json to get the native build to load extra resources defined in resources-config.json
- includes pmd / checkstyle / cve checks plugins
- provides a generic endpoint /version (in services/common) for all services - info populated from git stats, as proof of CDI bean loading from a dependency
- provide a multi-stage Dockerfile for building native images