{"id":42235603,"url":"https://github.com/pretsadev/scm-version-maven-extension","last_synced_at":"2026-01-27T03:30:41.689Z","repository":{"id":291397496,"uuid":"977190444","full_name":"pretsadev/scm-version-maven-extension","owner":"pretsadev","description":"Maven 4 extension to manage project version from scm","archived":false,"fork":false,"pushed_at":"2025-08-09T17:40:24.000Z","size":41,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-09T18:26:15.923Z","etag":null,"topics":["git","java","maven","maven-4","project","project-version","revision","scm","scm-version","version"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pretsadev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-03T16:19:39.000Z","updated_at":"2025-08-09T17:39:00.000Z","dependencies_parsed_at":"2025-05-04T12:19:12.837Z","dependency_job_id":"471495b0-c9a4-4122-a763-55ce3a5aca7d","html_url":"https://github.com/pretsadev/scm-version-maven-extension","commit_stats":null,"previous_names":["pretsadev/scm-version-maven-extension"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/pretsadev/scm-version-maven-extension","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pretsadev%2Fscm-version-maven-extension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pretsadev%2Fscm-version-maven-extension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pretsadev%2Fscm-version-maven-extension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pretsadev%2Fscm-version-maven-extension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pretsadev","download_url":"https://codeload.github.com/pretsadev/scm-version-maven-extension/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pretsadev%2Fscm-version-maven-extension/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28799333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T01:07:07.743Z","status":"online","status_checked_at":"2026-01-27T02:00:07.755Z","response_time":168,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["git","java","maven","maven-4","project","project-version","revision","scm","scm-version","version"],"created_at":"2026-01-27T03:30:41.183Z","updated_at":"2026-01-27T03:30:41.675Z","avatar_url":"https://github.com/pretsadev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SCM Version Maven Extension\nA maven 4 extension to manage the project version from SCM (GIT) in a simple way\n\n[![Maven Central Version](https://img.shields.io/maven-central/v/dev.pretsa/scm-version-maven-extension?logo=apache%20maven\u0026link=https%3A%2F%2Fsearch.maven.org%2F%23search%7Cga%7C1%7Cg%3Adev.pretsa%20AND%20a%3Ascm-version-maven-extension)](https://central.sonatype.com/artifact/dev.pretsa/scm-version-maven-extension)\n[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/pretsadev/scm-version-maven-extension/snapshot.yml?logo=Github)](https://github.com/pretsadev/scm-version-maven-extension/actions/workflows/snapshot.yml)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=pretsadev_scm-version-maven-extension\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=pretsadev_scm-version-maven-extension)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=pretsadev_scm-version-maven-extension\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=pretsadev_scm-version-maven-extension)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=pretsadev_scm-version-maven-extension\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=pretsadev_scm-version-maven-extension)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=pretsadev_scm-version-maven-extension\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=pretsadev_scm-version-maven-extension)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=pretsadev_scm-version-maven-extension\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=pretsadev_scm-version-maven-extension)\n\n\n\n# What is it for?\n- Tracking the project version from SCM (GIT) instead of explicitly being written in POMs.\n- `scm-version-maven-extension` does only one thing, compute the version and set it to `scm.version` property.\n- `scm-version-maven-extension` is intended to be simple if it does not meet your requirements please check these awesome projects\n  - [Maveniverse Nisse](https://github.com/maveniverse/nisse)\n  - [jgitver-maven-plugin](https://github.com/jgitver/jgitver-maven-plugin)\n  - [maven-git-versioning-extension](https://github.com/qoomon/maven-git-versioning-extension)\n  - [ci-friendly-flatten-maven-plugin](https://github.com/outbrain-inc/ci-friendly-flatten-maven-plugin)\n\n\u003e [!IMPORTANT]  \n\u003e `scm-version-maven-extension` **only** resolves and sets the version during maven execution, it does not create new scm tags locally or remotely\n\n\u003e [!TIP]\n\u003e [JReleaser](https://jreleaser.org) is an excellent tool to create scm tags and manage releases\n\n# Setup\n\n\u003e [!IMPORTANT]  \n\u003e This extension only works with Maven 4\n\n```mermaid\nsequenceDiagram\n    autonumber\n    actor User\n    User-\u003e\u003e.mvn/extensions.xml: Add `scm-version-maven-extension`\n    User-\u003e\u003epom.xml: Set version as `scm.version` property\n    User-\u003e\u003e+Maven: Use maven as usual\n    Maven--\u003e\u003e+scm-version-maven-extension: Loads extension\n    scm-version-maven-extension--\u003e\u003e-Maven: Compute version from Git and populate `scm.version` property\n    Maven-\u003e\u003e-User: Version is present\n```\n\n1. `scm-version-maven-extension` is a core extension, to be used it must be registered by adding it into `.mvn/extensions.xml` file\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cextensions\u003e\n    \u003cextension\u003e\n        \u003cgroupId\u003edev.pretsa\u003c/groupId\u003e\n        \u003cartifactId\u003escm-version-maven-extension\u003c/artifactId\u003e\n        \u003cversion\u003eVERSION\u003c/version\u003e\n    \u003c/extension\u003e\n\u003c/extensions\u003e\n```\n\n2. Project version must be set to `scm.version` on POM\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.1.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.1.0 http://maven.apache.org/xsd/maven-4.1.0.xsd\"\u003e\n    \u003cmodelVersion\u003e4.1.0\u003c/modelVersion\u003e\n\n    \u003cgroupId\u003ecom.example\u003c/groupId\u003e\n    \u003cartifactId\u003emy-app\u003c/artifactId\u003e\n    \u003cversion\u003e${scm.version}\u003c/version\u003e\n\n\u003c/project\u003e\n```\n\n3. Use maven as usual, `scm-version-maven-extension` will resolve `scm.version` property to the desired version on each run\n```\n[INFO] scm-version-maven-extension loaded\n[INFO] scm.version property computed to [1.2.4-SNAPSHOT] as the [NEXT PATCH SNAPSHOT]\n```\n\n4. Debug level logging can be enabled to get more information by passing `-Dmaven.logger.log.dev.pretsa=debug` to maven\n```\n[INFO] scm-version-maven-extension loaded\n[DEBUG] Working directory is /project/path\n[DEBUG] No user defined property for version type, value set to NEXT\n[DEBUG] No user defined property for next version component, value set to PATCH\n[DEBUG] No user defined property for version qualifier, value set to SNAPSHOT\n[INFO] scm.version property computed to [1.2.4-SNAPSHOT] as the [NEXT PATCH SNAPSHOT]\n```\n\n# Configurations\n\nTo keep it simple `scm-version-maven-extension` assumes that\n- The project version is in [Semantic Version](https://semver.org/) style (MAJOR.MINOR.PATCH) .e.g. `1.2.3`\n- The project version has only two variants\n  - RELEASE which has no suffix e.g. `1.2.3`\n  - SNAPSHOT which has `-SNAPSHOT` suffix e.g. `1.2.3-SNAPSHOT`\n- `scm-version-maven-extension` works with both annotated and lightweight Git tags\n\n## `scm-version-maven-extension` has three main options that can be combined to get the desired behavior\n\n### 1. Version type: This tells `scm-version-maven-extension` what version to compute\n\u003e [!NOTE]  \n\u003e Defaults to `NEXT` if no option is supplied\n\n| Version type | Activate with | Description           |\n|--------------|---------------|-----------------------|\n| CURRENT      | scm.current   | The *current* version |\n| NEXT         | scm.next      | The *next* version    |\n\n\n### 2. Next version component: When the version type is NEXT, this tell `scm-version-maven-extension` what version component to increment\n\u003e [!NOTE]  \n\u003e Defaults to `PATCH` if no option is supplied\n\n| Version type | Activate with | Description                                 |\n|--------------|---------------|---------------------------------------------|\n| PATCH        | scm.patch     | The patch component e.g. `1.2.3` -\u003e `1.2.4` |\n| MINOR        | scm.minor     | The minor component e.g. `1.2.3` -\u003e `1.3.0` |\n| MAJOR        | scm.major     | The major component e.g. `1.2.3` -\u003e `2.0.0` |\n\n\n### 3. Version qualifier (variant): This tells `scm-version-maven-extension` what variant to compute\n\u003e [!NOTE]  \n\u003e Defaults to `SNAPSHOT` if no option is supplied\n\n| Version type | Activate with | Description                                                              |\n|--------------|---------------|--------------------------------------------------------------------------|\n| RELEASE      | scm.release   | Will compute the version without any suffix e.g. `1.2.3`                 |\n| SNAPSHOT     | scm.snapshot  | Will compute the version adding `-SNAPSHOT` suffix e.g. `1.2.3-SNAPSHOT` |\n\n## Shorthand options\n\u003e [!TIP]  \n\u003e Shorthand options are available for easier usage\n\n| Shorthand option        | Equivalent options                  |\n|-------------------------|-------------------------------------|\n| scm.next.patch.release  | scm.next + scm.patch + scm.release  |\n| scm.next.minor.release  | scm.next + scm.minor + scm.release  |\n| scm.next.major.release  | scm.next + scm.major + scm.release  |\n| scm.next.patch.snapshot | scm.next + scm.patch + scm.snapshot |\n| scm.next.minor.snapshot | scm.next + scm.minor + scm.snapshot |\n| scm.next.major.snapshot | scm.next + scm.major + scm.snapshot |\n\n## Example\nWith that in mind, having a Git repository with the illustrated structure.\n```mermaid\ngitGraph\n    commit id: \"C1\"\n    commit id: \"C2\" tag: \"1.2.3\"\n    commit id: \"C3\"\n    commit id: \"C4\"\n```\n\n- Current release version will compute the version to `1.2.3`\n```\nmvn verify -Dscm.current -Dscm.release\n```\n- Current snapshot version will compute the version to `1.2.3-SNAPSHOT`\n```\nmvn verify -Dscm.current -Dscm.snapshot\n```\n- Next patch snapshot version will compute the version to `1.2.4-SNAPSHOT` \n```\nmvn verify -Dscm.next -Dscm.patch -Dscm.snapshot\n``` \n- Next patch snapshot version (shorthand) will compute the version to `1.2.4-SNAPSHOT`\n```\nmvn verify -Dscm.next.patch.snapshot\n``` \n- Next patch release version will compute the version to `1.2.4`\n```\nmvn verify -Dscm.next.patch.release\n``` \n- Next patch release version (shorthand) will compute the version to `1.2.4`\n```\nmvn verify -Dscm.next.patch.release\n``` \n- Next minor release version will compute the version to `1.3.0`\n```\nmvn verify -Dscm.next -Dscm.minor -Dscm.release\n``` \n- Next minor release version (shorthand) will compute the version to `1.3.0`\n```\nmvn verify -Dscm.next.minor.release\n```\n\n# Common warnings\n\n\u003e [!NOTE]\n\u003e When `scm-version-maven-extension` is not able to load the current project version from scm, a default version of `0.0.0` is assumed and a warning is logged.\n\n\n\n- Project path is not a valid git repository\n```\n[WARNING] Error loading tag at /project/path: One of setGitDir or setWorkTree must be called.\n```\n\n- Project repository does not have any commits yet\n```\n[WARNING] Error loading tag at /project/path: Ref HEAD cannot be resolved\n```\n\n- Project git repository does not contain any tags matching a semantic version pattern\n```\n[WARNING] Error loading tag at /project/path: No git tag matching supported glob [*[0-9]*.[0-9]*.[0-9]*]\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpretsadev%2Fscm-version-maven-extension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpretsadev%2Fscm-version-maven-extension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpretsadev%2Fscm-version-maven-extension/lists"}