Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,22 @@ name: CI
on:
push:
branches: [develop]
paths-ignore:
- '**.md'
- 'docs/**'
- 'tutorials/**'
- 'examples/**/README.md'
- 'LICENSE'
- '.gitignore'
pull_request:
branches: [develop, main]
paths-ignore:
- '**.md'
- 'docs/**'
- 'tutorials/**'
- 'examples/**/README.md'
- 'LICENSE'
- '.gitignore'
workflow_dispatch:
inputs:
triggered-by:
Expand Down
168 changes: 97 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,106 +1,132 @@
# Firefly Framework - Parent POM

[![CI](https://github.com/fireflyframework/fireflyframework-parent/actions/workflows/ci.yml/badge.svg)](https://github.com/fireflyframework/fireflyframework-parent/actions/workflows/ci.yml)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
[![Java](https://img.shields.io/badge/Java-21%2B-orange.svg)](https://openjdk.org)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.x-green.svg)](https://spring.io/projects/spring-boot)

The parent POM for all Firefly Framework modules. It centralizes dependency management, plugin configuration, and build conventions so that individual modules inherit a consistent, production-ready baseline without duplicating configuration.
> Parent POM for the Firefly Framework providing centralized dependency management, plugin configuration, and build standards for all framework modules.

## Purpose
---

When a Firefly Framework module (or a downstream application) declares `fireflyframework-parent` as its parent, it inherits:
## Table of Contents

- **Dependency version alignment** across Spring Boot, Spring Cloud, database drivers, serialization libraries, resilience utilities, and testing frameworks.
- **Plugin configuration** for compilation, testing, packaging, source/javadoc generation, and OpenAPI code generation.
- **Annotation processor wiring** for Lombok, MapStruct, and Spring Boot Configuration Processor.
- **Consistent compiler settings** targeting Java 25 (default, Java 21+ compatible) with `-parameters` for reflection-friendly bytecode.
- **Java 21 backward compatibility** via `-Pjava21` Maven profile.
- [Overview](#overview)
- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Configuration](#configuration)
- [Documentation](#documentation)
- [Contributing](#contributing)
- [License](#license)

## Managed Versions
## Overview

### Runtime
The Firefly Framework Parent POM serves as the foundational build configuration for all Firefly Framework modules. It centralizes dependency version management, plugin configurations, and build standards to ensure consistency across the entire framework ecosystem.

| Dependency | Version |
|---|---|
| Spring Boot | 3.5.10 |
| Spring Cloud | 2025.0.1 |
| Java | 25 (default, 21+ compatible) |
| SpringDoc OpenAPI | 2.8.15 |
| Resilience4j | 2.3.0 |
| MapStruct | 1.6.3 |
| Lombok | 1.18.42 |
| Logstash Logback Encoder | 8.1 |
By inheriting from this parent POM, all Firefly modules automatically receive managed versions for Spring Boot 3.5.x, Spring Cloud 2025.0.x, database drivers, mapping libraries, testing frameworks, and build plugins. This eliminates version conflicts and simplifies dependency management across the framework.

### Database
The parent POM also configures annotation processors for Lombok, MapStruct, and Spring Boot Configuration Processor, along with Maven Enforcer rules requiring JDK 21+.

| Dependency | Version |
|---|---|
| PostgreSQL Driver | 42.7.8 |
| R2DBC PostgreSQL | 1.0.9.RELEASE |
| Flyway | 11.7.2 |
## Features

### Communication
- Centralized dependency management for Spring Boot 3.5.x and Spring Cloud 2025.0.x
- Managed versions for PostgreSQL, R2DBC, and Flyway database migrations (multi-database support)
- Pre-configured annotation processors (Lombok, MapStruct, Spring Boot Configuration Processor)
- OpenAPI Generator plugin configuration for server/client code generation from API specs
- Maven Enforcer plugin requiring JDK 21+
- Testcontainers BOM for integration testing
- Resilience4j BOM for fault tolerance patterns
- gRPC 1.79.x and Protobuf 4.x version management
- AWS SDK 2.x, Spring Cloud Azure, and Spring Cloud GCP dependency management
- SpringDoc OpenAPI for reactive API documentation
- Release profile with source and Javadoc JAR generation
- Java 21 backward compatibility via `-Pjava21` Maven profile

| Dependency | Version |
|---|---|
| gRPC | 1.79.0 |
| Protobuf | 4.33.5 |
| OpenAPI Generator | 7.19.0 |
| Swagger Annotations | 2.2.42 |
## Requirements

### Cloud Providers
- Java 21+
- Maven 3.9+

| Dependency | Version |
|---|---|
| AWS SDK | 2.41.24 |
| Spring Cloud AWS | 3.4.2 |
| Spring Cloud Azure | 5.24.1 |
| Spring Cloud GCP | 6.5.4 |
## Installation

### Testing

| Dependency | Version |
|---|---|
| Testcontainers | 1.21.4 |
| Surefire Plugin | 3.5.4 |
| Failsafe Plugin | 3.5.4 |

## Usage

### As a Parent POM (Recommended)

Declare `fireflyframework-parent` as the parent of your module or application:
Use this as a parent POM in your Firefly Framework module:

```xml
<parent>
<groupId>org.fireflyframework</groupId>
<artifactId>fireflyframework-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>26.01.01</version>
<relativePath/>
</parent>
```

This gives your project all managed dependency versions, plugin configurations, and annotation processor wiring out of the box.
## Quick Start

Create a new Firefly Framework module by referencing the parent POM:

### If You Already Have a Parent
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.fireflyframework</groupId>
<artifactId>fireflyframework-parent</artifactId>
<version>26.01.01</version>
<relativePath/>
</parent>

<artifactId>my-firefly-module</artifactId>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
</project>
```

If your project already has a different parent POM and cannot inherit from `fireflyframework-parent`, use the [fireflyframework-bom](https://github.com/fireflyframework/fireflyframework-bom) instead for dependency version management.
All dependency versions are inherited automatically from the parent POM.

## Plugin Configuration
## Configuration

The parent POM configures the following plugins in `pluginManagement`:
Key properties that can be overridden in child modules:

| Plugin | Purpose |
|---|---|
| `spring-boot-maven-plugin` | Packaging Spring Boot applications (excludes Lombok from fat JAR) |
| `maven-compiler-plugin` | Java 25 (default) compilation with Lombok + MapStruct + Spring Boot Configuration Processor |
| `maven-source-plugin` | Attaches source JARs to build artifacts |
| `maven-javadoc-plugin` | Generates and attaches Javadoc JARs |
| `maven-surefire-plugin` | Unit test execution |
| `maven-failsafe-plugin` | Integration test execution |
| `openapi-generator-maven-plugin` | Server/client code generation from OpenAPI specifications |
| `maven-deploy-plugin` | Artifact deployment to Maven repositories |
```xml
<properties>
<!-- Java version (default: 25) -->
<java.version>25</java.version>

## License
<!-- Base package for code generation -->
<base.package>org.fireflyframework</base.package>

<!-- OpenAPI generation settings -->
<openapi.skip.validate>false</openapi.skip.validate>
<openapi.use.tags>true</openapi.use.tags>
</properties>
```

Build with Java 21 compatibility:

```bash
mvn clean install -Pjava21
```

## Documentation

Apache License 2.0
No additional documentation available for this project.

## Contributing

Contributions are welcome. Please read the [CONTRIBUTING.md](CONTRIBUTING.md) guide for details on our code of conduct, development process, and how to submit pull requests.

## License

Copyright 2024-2026 Firefly Software Solutions Inc.

Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details.