{"id":47252137,"url":"https://github.com/bsels/semantic-version-maven-plugin","last_synced_at":"2026-04-01T21:56:04.009Z","repository":{"id":333702712,"uuid":"1127267181","full_name":"bsels/semantic-version-maven-plugin","owner":"bsels","description":"A Maven plugin that automates semantic versioning with markdown‑based changelog management. Provides two standalone goals: create generates interactive version spec files; update applies those specs, bumps project versions, and merges CHANGELOG entries.","archived":false,"fork":false,"pushed_at":"2026-03-21T15:03:35.000Z","size":178,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-22T05:34:51.212Z","etag":null,"topics":["changelog","changelog-generator","java","markdown","maven","maven-plugin","maven-pom","plugin","semantic-versioning","versioning","versioning-plugin"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bsels.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-03T14:33:47.000Z","updated_at":"2026-03-21T15:03:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bsels/semantic-version-maven-plugin","commit_stats":null,"previous_names":["bsels/semantic-version-maven-plugin"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/bsels/semantic-version-maven-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsels%2Fsemantic-version-maven-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsels%2Fsemantic-version-maven-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsels%2Fsemantic-version-maven-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsels%2Fsemantic-version-maven-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bsels","download_url":"https://codeload.github.com/bsels/semantic-version-maven-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsels%2Fsemantic-version-maven-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["changelog","changelog-generator","java","markdown","maven","maven-plugin","maven-pom","plugin","semantic-versioning","versioning","versioning-plugin"],"created_at":"2026-03-14T15:59:17.715Z","updated_at":"2026-04-01T21:56:03.997Z","avatar_url":"https://github.com/bsels.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# semantic-version-maven-plugin\n\n[![Latest version](https://img.shields.io/github/v/release/bsels/semantic-version-maven-plugin?color=blue\u0026label=GitHub+Tag\u0026logo=GitHub)](https://github.com/bsels/semantic-version-maven-plugin/releases)\n[![Maven Central Version](https://img.shields.io/maven-central/v/io.github.bsels/semantic-version-maven-plugin?color=blue\u0026label=Maven+Central\u0026logo=apachemaven)](https://search.maven.org/artifact/io.github.bsels/semantic-version-maven-plugin)\n\n[![Push create release](https://github.com/bsels/semantic-version-maven-plugin/actions/workflows/push-release.yaml/badge.svg)](https://github.com/bsels/semantic-version-maven-plugin/actions/workflows/push-release.yaml)\n[![Release Build](https://github.com/bsels/semantic-version-maven-plugin/actions/workflows/release-build.yaml/badge.svg?event=release)](https://github.com/bsels/semantic-version-maven-plugin/actions/workflows/release-build.yaml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n![Java Version 17](https://img.shields.io/badge/Java_Version-17-purple?logo=data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMHB4IiB3aWR0aD0iMjAwcHgiIHZlcnNpb249IjEuMSIgaWQ9IkNhcGFfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDUwMi42MzIgNTAyLjYzMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZmlsbD0iIzAwMDAwMCI+PGcgaWQ9IlNWR1JlcG9fYmdDYXJyaWVyIiBzdHJva2Utd2hpdGVpZHRoPSIwIj48L2c+PGcgaWQ9IlNWR1JlcG9fdHJhY2VyQ2FycmllciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48L2c+PGcgaWQ9IlNWR1JlcG9faWNvbkNhcnJpZXIiPiA8Zz4gPGc+IDxwYXRoIHN0eWxlPSJmaWxsOndoaXRlOyIgZD0iTTI0MC44NjQsMjY5Ljg5NGMwLDAtMjguMDItNTMuOTkyLTI2Ljk4NS05My40NDVjMC43NTUtMjguMTkzLDY0LjMyNC01Ni4wNjIsODkuMjgxLTk2LjUyOSBDMzI4LjA3NCwzOS40MzEsMzAwLjA1NCwwLDMwMC4wNTQsMHM2LjIzNCwyOS4wNzctMTAuMzc2LDU5LjE0N2MtMTYuNjA5LDMwLjExMy03Ny45MTQsNDcuNzc5LTEwMS43NDksOTkuNjc5IFMyNDAuODY0LDI2OS44OTQsMjQwLjg2NCwyNjkuODk0eiI+PC9wYXRoPiA8cGF0aCBzdHlsZT0iZmlsbDp3aGl0ZTsiIGQ9Ik0zNDUuNzQxLDEwNS44NjljMCwwLTk1LjQ5NCwzNi4zNDctOTUuNDk0LDc3Ljg0OWMwLDQxLjU0NSwyNS45MjgsNTUuMDI3LDMwLjExMyw2OC41MDkgYzQuMTQyLDEzLjUyNS03LjI2OSwzNi4zNDctNy4yNjksMzYuMzQ3czM3LjM2MS0yNS45NSwzMS4xMDUtNTYuMDYyYy02LjIzNC0zMC4xMTMtMzUuMjktMzkuNDc1LTE4LjY1OS02OS41NDQgQzI5Ni42NDYsMTQyLjc5OSwzNDUuNzQxLDEwNS44NjksMzQ1Ljc0MSwxMDUuODY5eiI+PC9wYXRoPiA8cGF0aCBzdHlsZT0iZmlsbDp3aGl0ZTsiIGQ9Ik0yMzAuNTEsMzI0Ljc0OGM4OC4yNDYtMy4xNDksMTIwLjQzLTMwLjk5NywxMjAuNDMtMzAuOTk3IGMtNTcuMDc2LDE1LjU1My0yMDguNjU0LDE0LjUzOS0yMDkuNzExLDMuMTI4Yy0xLjAxNC0xMS40MTEsNDYuNzAxLTIwLjc3Myw0Ni43MDEtMjAuNzczcy03NC43MjEsMC04MC45NTUsMTguNjggQzEwMC43NCwzMTMuNDY3LDE0Mi4zMjgsMzI3LjgzMywyMzAuNTEsMzI0Ljc0OHoiPjwvcGF0aD4gPHBhdGggc3R5bGU9ImZpbGw6d2hpdGU7IiBkPSJNMzU4LjE4NywzNjguNDk0YzAsMCw4Ni4zNjktMTguNDIxLDc3LjgyNy02NS4zMzhjLTEwLjM1NC01Ny4xMTktNzAuNTgtMjQuOTM2LTcwLjU4LTI0LjkzNiBzNDIuNjAyLDAsNDYuNzIyLDI1LjkyOEM0MTYuMzIsMzMwLjA5OCwzNTguMTg3LDM2OC40OTQsMzU4LjE4NywzNjguNDk0eiI+PC9wYXRoPiA8cGF0aCBzdHlsZT0iZmlsbDp3aGl0ZTsiIGQ9Ik0zMTUuNjI4LDM0My42MDFjMCwwLTIxLjc2NSw1LjcxNi01NC4wMTMsOS4zNGMtNDMuMjI4LDQuODUzLTk1LjQ5NCwxLjAxNC05OS42NTctNi4yNTYgYy00LjA5OC03LjI2OSw3LjI2OS0xMS40MTEsNy4yNjktMTEuNDExYy01MS45MjEsMTIuNDY4LTIzLjUxMiwzNC4yMzMsMzcuMzM5LDM4LjQxOGM1Mi4xNTgsMy41NTksMTI5Ljc5MS0xNS41NzQsMTI5Ljc5MS0xNS41NzQgTDMxNS42MjgsMzQzLjYwMXoiPjwvcGF0aD4gPHBhdGggc3R5bGU9ImZpbGw6d2hpdGU7IiBkPSJNMTgxLjczOCwzODguOTQzYzAsMC0yMy41NTUsMC42NjktMjQuOTM2LDEzLjEzN2MtMS4zNTksMTIuMzgyLDE0LjQ5NiwyMy41MTIsNzIuNjUsMjYuOTY0IGM1OC4xMzMsMy40NTEsOTguOTg4LTE1Ljg5OCw5OC45ODgtMTUuODk4bC0yNi4yOTUtMTUuOTYyYzAsMC0xNi42MzEsMy40OTQtNDIuMjM2LDYuOTQ2IGMtMjUuNjI2LDMuNDczLTc4LjE3My0yLjc4My04MC4yNDMtNy41OTNDMTc3LjU1MywzOTEuNjgyLDE4MS43MzgsMzg4Ljk0MywxODEuNzM4LDM4OC45NDN6Ij48L3BhdGg+IDxwYXRoIHN0eWxlPSJmaWxsOndoaXRlOyIgZD0iTTQwNy45OTQsNDQ1LjAwNWM4Ljk5NS05LjcwNy0yLjc4My0xNy4zMjEtMi43ODMtMTcuMzIxczQuMTQyLDQuODUzLTEuMzM3LDEwLjM3NiBjLTUuNTQ0LDUuNTIyLTU2LjA4NCwxOS4zNDktMTM3LjA2MSwyMy41MTJjLTgwLjk1NSw0LjE2My0xNjguODU2LTcuNjE1LTE3MS42MzktMTcuOTkgYy0yLjY5Ni0xMC4zNzYsNDUuMDE4LTE4LjY1OSw0NS4wMTgtMTguNjU5Yy01LjUyMiwwLjY5LTcxLjk2LDIuMDcxLTc0LjA3NCwyMC4wODJjLTIuMDcxLDE3Ljk2OCwyOS4wNTYsMzIuNTA3LDE1My42NywzMi41MDcgQzM0NC4zMzksNDc3LjQ5MSwzOTkuMDQyLDQ1NC42NDcsNDA3Ljk5NCw0NDUuMDA1eiI+PC9wYXRoPiA8cGF0aCBzdHlsZT0iZmlsbDp3aGl0ZTsiIGQ9Ik0zNTkuNTY4LDQ4NS44MTdjLTU0LjY4MiwxMS4wNDQtMjIwLjczNCw0LjA3Ny0yMjAuNzM0LDQuMDc3czEwNy45MTksMjUuNjI2LDIzMS4xMDksNC4xODUgYzU4Ljg4OC0xMC4yNjgsNjIuMzE4LTM4Ljc2Myw2Mi4zMTgtMzguNzYzUzQxNC4yNSw0NzQuNzA4LDM1OS41NjgsNDg1LjgxN3oiPjwvcGF0aD4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA\u003cZz4gPC9nPiA8Zz4gPC9nPiA8Zz4gPC9nPiA8L2c+IDwvZz48L3N2Zz4=)\n\nA Maven plugin for automated semantic versioning with Markdown-based changelog management.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Goals](#goals)\n    - [create](#create)\n    - [update](#update)\n    - [verify](#verify)\n    - [graph](#graph)\n- [Configuration Properties](#configuration-properties)\n- [Examples](#examples)\n- [License](#license)\n\n## Overview\n\nThe Semantic Version Maven Plugin automates version management using semantic versioning principles (MAJOR.MINOR.PATCH).\nIt integrates changelog management through Markdown files, enabling you to:\n\n- Create version bump specifications with Markdown changelog entries\n- Automatically update POM file versions based on semantic versioning rules\n- Maintain synchronized changelog files across single and multi-module Maven projects\n- Support multiple versioning strategies for different project structures\n\n## Requirements\n\n- **Java**: 17 or higher\n- **Maven**: 3.9.12 or higher\n\n## Installation\n\nAdd the plugin to your `pom.xml`:\n\n```xml\n\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003eio.github.bsels\u003c/groupId\u003e\n            \u003cartifactId\u003esemantic-version-maven-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e1.3.2\u003c/version\u003e\n        \u003c/plugin\u003e\n    \u003c/plugins\u003e\n\u003c/build\u003e\n```\n\n## Goals\n\n### create\n\n**Full name**: `io.github.bsels:semantic-version-maven-plugin:create`\n\n**Description**: Creates a version Markdown file that specifies which projects should receive which type of semantic\nversion bump (PATCH, MINOR, or MAJOR). The goal provides an interactive interface to select projects and their version\nbump types, and allows you to write changelog entries either inline or via an external editor.\n\n**Phase**: Not bound to any lifecycle phase (standalone goal)\n\n#### Configuration Properties\n\n| Property                           | Type                 | Default                                                           | Description                                                                                                                                                                                                                         |\n|------------------------------------|----------------------|-------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.modus`                 | `Modus`              | `PROJECT_VERSION`                                                 | Versioning strategy:\u003cbr/\u003e• `PROJECT_VERSION`: All projects in multi-module builds\u003cbr/\u003e• `REVISION_PROPERTY`: Only current project using the `revision` property\u003cbr/\u003e• `PROJECT_VERSION_ONLY_LEAFS`: Only leaf projects (no modules) |\n| `versioning.identifier`            | `ArtifactIdentifier` | `GROUP_ID_AND_ARTIFACT_ID`                                        | Artifact key format in version Markdown files:\u003cbr/\u003e• `GROUP_ID_AND_ARTIFACT_ID`: use `groupId:artifactId` keys (default)\u003cbr/\u003e• `ONLY_ARTIFACT_ID`: use artifactId only when all modules share the same groupId                      |\n| `versioning.directory`             | `Path`               | `.versioning`                                                     | Directory for storing version Markdown files                                                                                                                                                                                        |\n| `versioning.dryRun`                | `boolean`            | `false`                                                           | Preview changes without writing files                                                                                                                                                                                               |\n| `versioning.backup`                | `boolean`            | `false`                                                           | Create backup of files before modification                                                                                                                                                                                          |\n| `versioning.commit.message.create` | `String`             | `Created version Markdown file for {numberOfProjects} project(s)` | Commit message template for version Markdown file creation. Use `{numberOfProjects}` placeholder for project count                                                                                                                  |\n| `versioning.git`                   | `Git`                | `NO_GIT`                                                          | Defines the git operation mode:\u003cbr/\u003e• `NO_GIT`: no git operations will be performed\u003cbr/\u003e• `STASH`: added changed files to the git stash\u003cbr/\u003e• `COMMIT`: commit all changed files with the configured commit message                 |\n\n#### Example Usage\n\n**Basic usage** (interactive mode):\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:create\n```\n\n**With custom versioning directory**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:create \\\n  -Dversioning.directory=.versions\n```\n\n**Dry-run to preview**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:create \\\n  -Dversioning.dryRun=true\n```\n\n**Multi-module project (leaf projects only)**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:create \\\n  -Dversioning.modus=PROJECT_VERSION_ONLY_LEAFS\n```\n\n---\n\n### update\n\n**Full name**: `io.github.bsels:semantic-version-maven-plugin:update`\n\n**Description**: Updates POM file versions and CHANGELOG.md files based on version Markdown files created by the\n`create` goal. The goal reads version bump specifications from Markdown files, applies semantic versioning to project\nversions, updates dependencies in multi-module projects, and merges changelog entries into CHANGELOG.md files.\n\n**Phase**: Not bound to any lifecycle phase (standalone goal)\n\n#### Configuration Properties\n\n| Property                             | Type                 | Default                                                   | Description                                                                                                                                                                                                                                                                          |\n|--------------------------------------|----------------------|-----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.bump`                    | `VersionBump`        | `FILE_BASED`                                              | Version bump strategy:\u003cbr/\u003e• `FILE_BASED`: Use version Markdown files from `.versioning` directory\u003cbr/\u003e• `MAJOR`: Apply MAJOR version bump to all projects\u003cbr/\u003e• `MINOR`: Apply MINOR version bump to all projects\u003cbr/\u003e• `PATCH`: Apply PATCH version bump to all projects           |\n| `versioning.modus`                   | `Modus`              | `PROJECT_VERSION`                                         | Versioning strategy:\u003cbr/\u003e• `PROJECT_VERSION`: All projects in multi-module builds\u003cbr/\u003e• `REVISION_PROPERTY`: Only current project using the `revision` property\u003cbr/\u003e• `PROJECT_VERSION_ONLY_LEAFS`: Only leaf projects (no modules)                                                  |\n| `versioning.identifier`              | `ArtifactIdentifier` | `GROUP_ID_AND_ARTIFACT_ID`                                | Artifact key format in version Markdown files:\u003cbr/\u003e• `GROUP_ID_AND_ARTIFACT_ID`: use `groupId:artifactId` keys (default)\u003cbr/\u003e• `ONLY_ARTIFACT_ID`: use artifactId only when all modules share the same groupId                                                                       |\n| `versioning.directory`               | `Path`               | `.versioning`                                             | Directory containing version Markdown files                                                                                                                                                                                                                                          |\n| `versioning.dryRun`                  | `boolean`            | `false`                                                   | Preview changes without writing files                                                                                                                                                                                                                                                |\n| `versioning.backup`                  | `boolean`            | `false`                                                   | Create backup of POM and CHANGELOG files before modification                                                                                                                                                                                                                         |\n| `versioning.commit.message.update`   | `String`             | `Updated {numberOfProjects} project version(s) [skip ci]` | Commit message template for version updates. Use `{numberOfProjects}` placeholder for project count                                                                                                                                                                                  |\n| `versioning.dependency.bump.message` | `String`             | `Project version bumped as result of dependency bumps`    | Changelog entry text used when a project version is bumped because of dependency updates                                                                                                                                                                                             |\n| `versioning.update.scripts`          | `String`             | `-`                                                       | Script paths to execute per updated module, separated by the OS path separator. Each script runs in the module directory with `CURRENT_VERSION`, `NEW_VERSION`, `DRY_RUN` (`true` or `false`), `GIT_STASH` (`true` or `false`), `EXECUTION_DATE` (yyyy-MM-dd) environment variables. |\n| `versioning.version.header`          | `String`             | `{version} - {date#yyyy-MM-dd}`                           | Header format for version Markdown files. Supports `{version}` and `{date#yyyy-MM-dd}` placeholders; date uses a `DateTimeFormatter` pattern.                                                                                                                                        |\n| `versioning.changelog.header`        | `String`             | `Changelog`                                               | Header label for the changelog title (H1)                                                                                                                                                                                                                                            |\n| `versioning.major.header`            | `String`             | `Major`                                                   | Header label for major changes in the changelog                                                                                                                                                                                                                                      |\n| `versioning.minor.header`            | `String`             | `Minor`                                                   | Header label for minor changes in the changelog                                                                                                                                                                                                                                      |\n| `versioning.patch.header`            | `String`             | `Patch`                                                   | Header label for patch changes in the changelog                                                                                                                                                                                                                                      |\n| `versioning.other.header`            | `String`             | `Other`                                                   | Header label for non-semantic changes in the changelog                                                                                                                                                                                                                               |\n| `versioning.git`                     | `Git`                | `NO_GIT`                                                  | Defines the git operation mode:\u003cbr/\u003e• `NO_GIT`: no git operations will be performed\u003cbr/\u003e• `STASH`: added changed files to the git stash\u003cbr/\u003e• `COMMIT`: commit all changed files with the configured commit message                                                                  |\n\n#### Example Usage\n\n**Basic usage** (file-based versioning):\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update\n```\n\n**Force MAJOR version bump** (override version files):\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.bump=MAJOR\n```\n\n**Force MINOR version bump**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.bump=MINOR\n```\n\n**Force PATCH version bump**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.bump=PATCH\n```\n\n**Dry-run to preview changes**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.dryRun=true\n```\n\n**With backup files**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.backup=true\n```\n\n**Custom versioning directory**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.directory=.versions\n```\n\n**Custom version file header**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.version.header='Release {version} ({date#yyyy-MM-dd})'\n```\n\n**Multi-module project with revision property**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update \\\n  -Dversioning.modus=REVISION_PROPERTY\n```\n\n---\n\n### verify\n\n**Full name**: `io.github.bsels:semantic-version-maven-plugin:verify`\n\n**Description**: Verifies that version Markdown files are consistent with the project scope. The goal reads version\nMarkdown files, validates that all referenced artifacts exist in scope, enforces the selected verification mode, and\noptionally requires consistent version bumps across all projects. When `versioning.git` is not `NO_GIT`, it runs\n`git status` before verification. This goal does not write files; `versioning.dryRun` and `versioning.backup` have no\neffect.\n\n**Phase**: Not bound to any lifecycle phase (standalone goal)\n\n#### Configuration Properties\n\n| Property                             | Type                 | Default                    | Description                                                                                                                                                                                                                                                                                     |\n|--------------------------------------|----------------------|----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.verification.mode`       | `VerificationMode`   | `ALL_PROJECTS`             | Verification scope:\u003cbr/\u003e• `NONE`: skip verification\u003cbr/\u003e• `AT_LEAST_ONE_PROJECT`: require at least one version-marked project\u003cbr/\u003e• `DEPENDENT_PROJECTS`: require all dependent projects to be version-marked\u003cbr/\u003e• `ALL_PROJECTS`: all projects in scope must be version-marked                |\n| `versioning.verification.consistent` | `boolean`            | `false`                    | When `true`, all version-marked projects must share the same version bump type                                                                                                                                                                                                                  |\n| `versioning.modus`                   | `Modus`              | `PROJECT_VERSION`          | Project scope for verification:\u003cbr/\u003e• `PROJECT_VERSION`: all projects in multi-module builds\u003cbr/\u003e• `REVISION_PROPERTY`: only current project using the `revision` property\u003cbr/\u003e• `PROJECT_VERSION_ONLY_LEAFS`: only leaf projects (no modules)                                                  |\n| `versioning.identifier`              | `ArtifactIdentifier` | `GROUP_ID_AND_ARTIFACT_ID` | Artifact key format in version Markdown files:\u003cbr/\u003e• `GROUP_ID_AND_ARTIFACT_ID`: use `groupId:artifactId` keys (default)\u003cbr/\u003e• `ONLY_ARTIFACT_ID`: use artifactId only when all modules share the same groupId                                                                                  |\n| `versioning.directory`               | `Path`               | `.versioning`              | Directory containing version Markdown files                                                                                                                                                                                                                                                     |\n| `versioning.git`                     | `Git`                | `NO_GIT`                   | Git mode. Any value other than `NO_GIT` triggers a `git status` check before verification. Supported modes:\u003cbr/\u003e• `NO_GIT`: no git operations will be performed\u003cbr/\u003e• `STASH`: added changed files to the git stash\u003cbr/\u003e• `COMMIT`: commit all changed files with the configured commit message |\n\n#### Example Usage\n\n**Basic verification**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:verify\n```\n\n**Verify dependent projects and require consistent bumps**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:verify \\\n  -Dversioning.verification.mode=DEPENDENT_PROJECTS \\\n  -Dversioning.verification.consistent=true\n```\n\n---\n\n### graph\n\n**Full name**: `io.github.bsels:semantic-version-maven-plugin:graph`\n\n**Description**: Generates a JSON representation of the dependency graph for Maven projects within the current execution\nscope. It identifies internal dependencies between projects and can output the graph either to the console or to a\nspecified file. The output includes transitive dependencies sorted in build order (topological order).\n\n**Phase**: Not bound to any lifecycle phase (standalone goal)\n\n#### Configuration Properties\n\n| Property                   | Type          | Default               | Description                                                                                                                                                                                                                                 |\n|----------------------------|---------------|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.graphOutput`   | `GraphOutput` | `ARTIFACT_AND_FOLDER` | Specifies the graph output format:\u003cbr/\u003e• `ARTIFACT_ONLY`: Only Maven artifact identifiers\u003cbr/\u003e• `FOLDER_ONLY`: Only project folder paths\u003cbr/\u003e• `ARTIFACT_AND_FOLDER`: Both artifact identifiers and folder paths                            |\n| `versioning.outputFile`    | `Path`        | `-`                   | Path to the output file. If not specified, the graph is printed to the console.                                                                                                                                                             |\n| `versioning.relativePaths` | `boolean`     | `true`                | When `true`, project folder paths are resolved relative to the execution root; otherwise, absolute paths are used.                                                                                                                          |\n| `versioning.modus`         | `Modus`       | `PROJECT_VERSION`     | Project scope for the graph:\u003cbr/\u003e• `PROJECT_VERSION`: All projects in multi-module builds\u003cbr/\u003e• `REVISION_PROPERTY`: Only current project using the `revision` property\u003cbr/\u003e• `PROJECT_VERSION_ONLY_LEAFS`: Only leaf projects (no modules) |\n\n#### Output Format Description\n\nThe generated JSON is a map where each key is a project's artifact identifier (`groupId:artifactId`), and the value is a\nlist of its internal dependencies.\n\n**ARTIFACT_ONLY**:\n\n```json\n{\n  \"io.github.bsels:parent\": [],\n  \"io.github.bsels:child\": [\n    \"io.github.bsels:parent\"\n  ]\n}\n```\n\n**FOLDER_ONLY**:\n\n```json\n{\n  \"io.github.bsels:parent\": [],\n  \"io.github.bsels:child\": [\n    \".\"\n  ]\n}\n```\n\n**ARTIFACT_AND_FOLDER**:\n\n```json\n{\n  \"io.github.bsels:parent\": [],\n  \"io.github.bsels:child\": [\n    {\n      \"artifact\": {\n        \"groupId\": \"io.github.bsels\",\n        \"artifactId\": \"parent\"\n      },\n      \"folder\": \".\"\n    }\n  ]\n}\n```\n\n#### Example Usage\n\n**Basic usage** (print to console):\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:graph\n```\n\n**Write to file with absolute paths**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:graph \\\n  -Dversioning.outputFile=graph.json \\\n  -Dversioning.relativePaths=false\n```\n\n**Artifact-only output**:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:graph \\\n  -Dversioning.graphOutput=ARTIFACT_ONLY\n```\n\n## Configuration Properties\n\n### Common Properties\n\nThese properties apply to `create`, `update`, and `verify` goals. The `verify` goal does not use\n`versioning.dryRun` or `versioning.backup`:\n\n| Property                | Type                 | Default                    | Description                                                                                                                                                                                                                                                                                       |\n|-------------------------|----------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.modus`      | `Modus`              | `PROJECT_VERSION`          | Defines versioning strategy for project structure:\u003cbr/\u003e• `PROJECT_VERSION`: Process all projects in topological order\u003cbr/\u003e• `REVISION_PROPERTY`: Process only the current project using the `revision` property\u003cbr/\u003e• `PROJECT_VERSION_ONLY_LEAFS`: Process only leaf projects (no child modules) |\n| `versioning.identifier` | `ArtifactIdentifier` | `GROUP_ID_AND_ARTIFACT_ID` | Artifact key format in version Markdown files:\u003cbr/\u003e• `GROUP_ID_AND_ARTIFACT_ID`: use `groupId:artifactId` keys (default)\u003cbr/\u003e• `ONLY_ARTIFACT_ID`: use artifactId only when all modules share the same groupId                                                                                    |\n| `versioning.directory`  | `Path`               | `.versioning`              | Directory path for version Markdown files (absolute or relative to project root)                                                                                                                                                                                                                  |\n| `versioning.dryRun`     | `boolean`            | `false`                    | When `true`, performs all operations without writing files (logs output instead)                                                                                                                                                                                                                  |\n| `versioning.backup`     | `boolean`            | `false`                    | When `true`, creates `.bak` backup files before modifying POM and CHANGELOG files                                                                                                                                                                                                                 |\n| `versioning.git`        | `Git`                | `NO_GIT`                   | Defines the git operation mode:\u003cbr/\u003e• `NO_GIT`: no git operations will be performed\u003cbr/\u003e• `STASH`: added changed files to the git stash\u003cbr/\u003e• `COMMIT`: commit all changed files with the configured commit message                                                                               |\n\n### create-Specific Properties\n\n| Property                           | Type     | Default                                                           | Description                                                                                                                               |\n|------------------------------------|----------|-------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.commit.message.create` | `String` | `Created version Markdown file for {numberOfProjects} project(s)` | Commit message template used when creating version Markdown files. The `{numberOfProjects}` placeholder is replaced with the actual count |\n\n### update-Specific Properties\n\n| Property                             | Type          | Default                                                   | Description                                                                                                                                                                                                                                                                                                                                    |\n|--------------------------------------|---------------|-----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.bump`                    | `VersionBump` | `FILE_BASED`                                              | Determines version increment strategy:\u003cbr/\u003e• `FILE_BASED`: Read version bumps from Markdown files in `.versioning` directory\u003cbr/\u003e• `MAJOR`: Force MAJOR version increment (X.0.0) for all projects\u003cbr/\u003e• `MINOR`: Force MINOR version increment (0.X.0) for all projects\u003cbr/\u003e• `PATCH`: Force PATCH version increment (0.0.X) for all projects |\n| `versioning.commit.message.update`   | `String`      | `Updated {numberOfProjects} project version(s) [skip ci]` | Commit message template used when updating project versions. The `{numberOfProjects}` placeholder is replaced with the actual count                                                                                                                                                                                                            |\n| `versioning.dependency.bump.message` | `String`      | `Project version bumped as result of dependency bumps`    | Changelog entry text used when a project version is bumped because of dependency updates                                                                                                                                                                                                                                                       |\n| `versioning.update.scripts`          | `String`      | `-`                                                       | Script paths to execute per updated module, separated by the OS path separator. Each script runs in the module directory with `CURRENT_VERSION`, `NEW_VERSION`, `DRY_RUN` (`true` or `false`), `GIT_STASH` (`true` or `false`), `EXECUTION_DATE` (yyyy-MM-dd) environment variables.                                                           |\n| `versioning.version.header`          | `String`      | `{version} - {date#yyyy-MM-dd}`                           | Header format for version Markdown files. Supports `{version}` and `{date#yyyy-MM-dd}` placeholders; date uses a `DateTimeFormatter` pattern.                                                                                                                                                                                                  |\n| `versioning.changelog.header`        | `String`      | `Changelog`                                               | Header label for the changelog title (H1)                                                                                                                                                                                                                                                                                                      |\n| `versioning.major.header`            | `String`      | `Major`                                                   | Header label for major changes in the changelog                                                                                                                                                                                                                                                                                                |\n| `versioning.minor.header`            | `String`      | `Minor`                                                   | Header label for minor changes in the changelog                                                                                                                                                                                                                                                                                                |\n| `versioning.patch.header`            | `String`      | `Patch`                                                   | Header label for patch changes in the changelog                                                                                                                                                                                                                                                                                                |\n| `versioning.other.header`            | `String`      | `Other`                                                   | Header label for non-semantic changes in the changelog                                                                                                                                                                                                                                                                                         |\n\n### verify-Specific Properties\n\n| Property                             | Type               | Default        | Description                                                                                                                                                                                                                                                                      |\n|--------------------------------------|--------------------|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.verification.mode`       | `VerificationMode` | `ALL_PROJECTS` | Verification scope:\u003cbr/\u003e• `NONE`: skip verification\u003cbr/\u003e• `AT_LEAST_ONE_PROJECT`: require at least one version-marked project\u003cbr/\u003e• `DEPENDENT_PROJECTS`: require all dependent projects to be version-marked\u003cbr/\u003e• `ALL_PROJECTS`: all projects in scope must be version-marked |\n| `versioning.verification.consistent` | `boolean`          | `false`        | When `true`, all version-marked projects must share the same version bump type                                                                                                                                                                                                   |\n\n### graph-Specific Properties\n\n| Property                   | Type          | Default               | Description                                                                                                                                                                        |\n|----------------------------|---------------|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `versioning.graphOutput`   | `GraphOutput` | `ARTIFACT_AND_FOLDER` | Specifies the graph output format:\u003cbr/\u003e• `ARTIFACT_ONLY`: Only artifact identifiers\u003cbr/\u003e• `FOLDER_ONLY`: Only folder paths\u003cbr/\u003e• `ARTIFACT_AND_FOLDER`: Artifacts and folder paths |\n| `versioning.outputFile`    | `Path`        | `-`                   | Path to the output file. If not specified, output is printed to the console.                                                                                                       |\n| `versioning.relativePaths` | `boolean`     | `true`                | When `true`, project paths are relative to execution root; otherwise, absolute.                                                                                                    |\n\n## Examples\n\n### Example 1: Single Project Workflow\n\n1. **Create version specification**:\n   ```bash\n   mvn io.github.bsels:semantic-version-maven-plugin:create\n   ```\n    - Select MINOR version bump\n    - Enter changelog: \"Added new user authentication feature\"\n\n2. **Preview changes**:\n   ```bash\n   mvn io.github.bsels:semantic-version-maven-plugin:update -Dversioning.dryRun=true\n   ```\n\n3. **Apply version update**:\n   ```bash\n   mvn io.github.bsels:semantic-version-maven-plugin:update\n   ```\n\n### Example 2: Multi-Module Project Workflow\n\n1. **Create version specifications for multiple modules**:\n   ```bash\n   mvn io.github.bsels:semantic-version-maven-plugin:create\n   ```\n    - Select `module-api` → MAJOR (breaking changes)\n    - Select `module-core` → MINOR (new features)\n    - Enter changelog for each module\n\n2. **Update with backups**:\n   ```bash\n   mvn io.github.bsels:semantic-version-maven-plugin:update -Dversioning.backup=true\n   ```\n\n### Example 3: Emergency Patch Release\n\nSkip version file creation and force PATCH bump:\n\n```bash\nmvn io.github.bsels:semantic-version-maven-plugin:update -Dversioning.bump=PATCH\n```\n\n### Example 4: POM Configuration\n\nConfigure the plugin directly in `pom.xml`:\n\n```xml\n\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003eio.github.bsels\u003c/groupId\u003e\n            \u003cartifactId\u003esemantic-version-maven-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e1.3.2\u003c/version\u003e\n            \u003cconfiguration\u003e\n                \u003cmodus\u003ePROJECT_VERSION\u003c/modus\u003e\n                \u003cversionDirectory\u003e.versioning\u003c/versionDirectory\u003e\n                \u003cdryRun\u003efalse\u003c/dryRun\u003e\n                \u003cbackupFiles\u003etrue\u003c/backupFiles\u003e\n                \u003cversionBump\u003eFILE_BASED\u003c/versionBump\u003e\n            \u003c/configuration\u003e\n        \u003c/plugin\u003e\n    \u003c/plugins\u003e\n\u003c/build\u003e\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsels%2Fsemantic-version-maven-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbsels%2Fsemantic-version-maven-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsels%2Fsemantic-version-maven-plugin/lists"}