NGSS Maven Tiles Overview
The NextGen Shared Services (NGSS) Maven Tiles project contains a comprehensive collection of reusable Maven plugin configurations defined as Maven tiles, enabling standardized build practices across NGSS projects.
|
Deprecation and Retirement
Recommended actions for container tiles ( We recommend updating to the new "baseless" tiles introduced in version This alleviates a common complaint with maintaining the See Migrating to Baseless Image Tiles for more info. Recommended actions for all other tiles Continue to use the most recent releases of |
What are Maven Tiles?
Maven Tiles are Maven artifacts produced by the Maven Tiles Plugin that allow Maven POM fragments to be compositionally defined and reused. Each tile is simply a Maven POM XML fragment that gets programmatically included by the maven-tiles plugin at build-time, merging with the original Maven POM (including parent POMs).
This system dramatically reduces duplication among NGSS projects by defining common, recommended, and standard build configurations in reusable components. Instead of maintaining identical configurations across multiple projects or complex parent POM hierarchies, teams can selectively include only the tiles they need.
Key Benefits
-
DRY Principle: Eliminates duplication of common build configurations
-
Standardization: Ensures consistent NGSS conventions across all projects
-
Flexibility: Allows selective inclusion of specific functionality without inheriting unwanted configurations
-
Maintainability: Centralizes configuration updates in one location
-
Composability: Enables fine-grained control over build behavior through tile combinations
How NGSS Uses Maven Tiles
NGSS leverages Maven Tiles to define standard sets of Maven plugin configurations that provide an easy way to apply NGSS conventions for various Maven plugins throughout the ecosystem. The tiles cover several key areas:
Container Build Support
-
Docker Integration: Docker Maven Plugin configurations for containerization
-
Jib Support: Google Jib plugin configurations for efficient container builds
-
Base Image Standards: Standardized base images and container configurations
DevOps Integration
-
CI/CD Generation: Automated Jenkinsfile generation for build pipelines
-
Kubernetes Manifests: Automated generation of Kubernetes deployment artifacts
-
Helm Charts: Development tooling for Kubernetes deployments with dependencies
-
Documentation: Automated README and deployment documentation generation
Tile Categories
The NGSS tiles are organized into several categories. Click on each category for detailed documentation of all tiles in that category:
Base Configuration Tiles
-
base-docker-tile: Base container build configuration -
java-11-tile: Java 11 compilation and runtime configuration -
spring-properties-tile: Spring Framework specific properties
Testing and Coverage Tiles
-
failsafe-tile: Integration test execution -
surefire-tile: Unit test execution -
all-tests-with-coverage-tile: Complete testing solution -
JaCoCo coverage tiles (
jacoco-base-tile,jacoco-unit-tests-tile,jacoco-integration-tests-tile, etc.)
Container Build Tiles
-
docker-maven-plugin-tile/docker-maven-plugin-baseless-tile: Docker build support -
jib-maven-plugin-tile/jib-maven-plugin-baseless-tile: Efficient Jib builds -
web-docker-tile: Web application containers
Code Generation Tiles
-
openapi-client-generator-tile: API client generation -
openapi-java-service-generator-tile: Java service generation -
effective-metadata-generator-tile: Metadata processing -
deployment-readme-generator-tile: Documentation generation
Build Convention Tiles
-
ngss-service-build-conventions-tile: Language-agnostic build standards -
ngss-java-service-build-conventions-tile: Complete Java service conventions -
ngss-code-quality-standards-tile: Code quality enforcement
DevOps and Deployment Tiles
-
jenkinsfile-generator-tile: CI/CD pipeline generation -
kubernetes-generator-tile: Kubernetes manifest generation -
helm-tile: Local development and integration testing -
vv-automation-tile: V&V process automation
Usage Example
To use NGSS Maven Tiles in a project, configure the tiles-maven-plugin:
<project>
<build>
<plugins>
<plugin>
<groupId>io.repaint.maven</groupId>
<artifactId>tiles-maven-plugin</artifactId>
<version>${tiles-maven-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<tiles>
<tile>gov.va.mobile.tools.maven:helm-tile:${ngss-maven-tiles.version}</tile>
<tile>gov.va.mobile.tools.maven:docker-maven-plugin-tile:${ngss-maven-tiles.version}</tile>
<tile>gov.va.mobile.tools.maven:ngss-service-build-conventions-tile:${ngss-maven-tiles.version}</tile>
</tiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
Tile Operation
Maven Tiles work by dynamically inserting each tile into the Maven project model as new parent POMs in the order specified. This creates an inheritance hierarchy where later tiles can override or extend earlier configurations, providing powerful composition capabilities while maintaining Maven’s standard inheritance model.