{"id":15338163,"url":"https://github.com/khmarbaise/incremental-module-builder","last_synced_at":"2026-02-21T22:03:15.072Z","repository":{"id":45144653,"uuid":"65081228","full_name":"khmarbaise/incremental-module-builder","owner":"khmarbaise","description":"Incremental Module Builder","archived":false,"fork":false,"pushed_at":"2023-12-26T18:32:21.000Z","size":517,"stargazers_count":41,"open_issues_count":23,"forks_count":10,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-28T11:39:51.709Z","etag":null,"topics":["java","maven","maven-extension"],"latest_commit_sha":null,"homepage":"https://khmarbaise.github.io/incremental-module-builder/","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/khmarbaise.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-08-06T12:18:50.000Z","updated_at":"2024-09-29T10:12:50.000Z","dependencies_parsed_at":"2023-11-26T15:33:37.977Z","dependency_job_id":null,"html_url":"https://github.com/khmarbaise/incremental-module-builder","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khmarbaise%2Fincremental-module-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khmarbaise%2Fincremental-module-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khmarbaise%2Fincremental-module-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khmarbaise%2Fincremental-module-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/khmarbaise","download_url":"https://codeload.github.com/khmarbaise/incremental-module-builder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248980612,"owners_count":21193135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["java","maven","maven-extension"],"created_at":"2024-10-01T10:24:26.958Z","updated_at":"2026-02-21T22:03:10.026Z","avatar_url":"https://github.com/khmarbaise.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Maven Incremental Module Builder\n\n[![Build Status](https://cloud.drone.io/api/badges/khmarbaise/incremental-module-builder/status.svg)](https://cloud.drone.io/khmarbaise/incremental-module-builder)\n[![Maven Central](https://img.shields.io/maven-central/v/com.soebes.maven.extensions/incremental-module-builder.svg?label=Maven%20Central)](http://search.maven.org/#search%7Cga%7C1%7Ccom.soebes.maven.extensions)\n[![Apache License, Version 2.0, January 2004](https://img.shields.io/github/license/khmarbaise/incremental-module-builder.svg?label=License)](http://www.apache.org/licenses/)\n\nIf you are working with larger builds sometimes it is worth to think\nto build only parts of the whole reactor. So it would be nice\nto only build those modules which have been changed. This\ncan be controled by using the `--projects` option on command line.\n\nThe problem here is that you need to identify those modules which\nhave been changed manually which can become cumbersome.\n\nThis extension will handle this automatically.\n\nStatus\n------\n\n * Currently in PoC state.\n * Code needs improvements.\n * Need to write more tests / integration tests.\n\nPrerequisites\n-------------\n\n * Maven 3.8.8+\n * Java 8\n\nHow to Configure?\n-----------------\n\n\nIf you like to use this extension you have to\ndefine the following in your `.mvn/extensions.xml` file:\n\n``` xml\n\u003cextensions xmlns=\"http://maven.apache.org/EXTENSIONS/1.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd\"\u003e\n  \u003cextension\u003e\n    \u003cgroupId\u003ecom.soebes.maven.extensions\u003c/groupId\u003e\n    \u003cartifactId\u003eincremental-module-builder\u003c/artifactId\u003e\n    \u003cversion\u003e0.10.0-SNAPSHOT\u003c/version\u003e\n  \u003c/extension\u003e\n\u003c/extensions\u003e\n```\n\nHow to use it?\n--------------\n\nThe first step is to do a `mvn install` from the root of your whole reactor.\n\nAfterwards you can simply call Maven via `mvn -b incremental package` which will\nprint out things like this:\n\nThe following will show how it looks like if you have not changed anything:\n\n```\n~/ws-git/supose (master)$ mvn -b incremental package\n[INFO] Scanning for projects...\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO]\n[INFO] Subversion Repository Search Engine\n[INFO] SupoSE :: Test\n[INFO] SupoSE :: Filter\n[INFO] SupoSE :: Filter : Filter Model\n[INFO] SupoSE :: Filter : Filter\n[INFO] SupoSE :: Core\n[INFO] SupoSE :: CLI\n[INFO] SupoSE :: WAR\n[INFO] SupoSE :: Integration Test\n[INFO] SupoSE :: Users Guide\n[INFO] SupoSE :: Assembly\n[INFO]  ------------------------------------\n[INFO]  Maven Incremental Module Builder\n[INFO]  ------------------------------------\n[INFO] Executing: /bin/sh -c cd '/Users/kama/ws-git/supose' \u0026\u0026 'git' 'rev-parse' '--show-toplevel'\n[INFO] Working directory: /Users/kama/ws-git/supose\n[INFO] Executing: /bin/sh -c cd '/Users/kama/ws-git/supose' \u0026\u0026 'git' 'status' '--porcelain' '.'\n[INFO] Working directory: /Users/kama/ws-git/supose\n[INFO]  Nothing has been changed.\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO]\n[INFO] Subversion Repository Search Engine ................ SKIPPED\n[INFO] SupoSE :: Test ..................................... SKIPPED\n[INFO] SupoSE :: Filter ................................... SKIPPED\n[INFO] SupoSE :: Filter : Filter Model .................... SKIPPED\n[INFO] SupoSE :: Filter : Filter .......................... SKIPPED\n[INFO] SupoSE :: Core ..................................... SKIPPED\n[INFO] SupoSE :: CLI ...................................... SKIPPED\n[INFO] SupoSE :: WAR ...................................... SKIPPED\n[INFO] SupoSE :: Integration Test ......................... SKIPPED\n[INFO] SupoSE :: Users Guide .............................. SKIPPED\n[INFO] SupoSE :: Assembly ................................. SKIPPED\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 0.277 s\n[INFO] Finished at: 2016-08-06T13:29:47+02:00\n[INFO] Final Memory: 13M/245M\n[INFO] ------------------------------------------------------------------------\n```\n\nNow you have changed some files in your modules so a `git status` \n(Using Subversion will work as well) will look like this:\n\n```\n~/ws-git/supose (master *)$ git st\nOn branch master\nYour branch is ahead of 'origin/master' by 2 commits.\n  (use \"git push\" to publish your local commits)\nChanges not staged for commit:\n  (use \"git add \u003cfile\u003e...\" to update what will be committed)\n  (use \"git checkout -- \u003cfile\u003e...\" to discard changes in working directory)\n\n\tmodified:   supose-assembly/pom.xml\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n```\n\nWhich means in consequence you only need to build the single\nmodule `supose-assembly`. You can call Maven manually like this:\n\n```\nmvn -pl supose-assembly -amd package\n```\n\nUsing this extension you don't need to think about which modules have been\nchanged and change every time you call Maven the command line.\nThis extension will automatically identify the changed modules and will run the build\naccordingly. You can simply do it like this:\n\n```\n~/ws-git/supose (master *)$ mvn -b incremental package\n[INFO] Scanning for projects...\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO]\n[INFO] Subversion Repository Search Engine\n[INFO] SupoSE :: Test\n[INFO] SupoSE :: Filter\n[INFO] SupoSE :: Filter : Filter Model\n[INFO] SupoSE :: Filter : Filter\n[INFO] SupoSE :: Core\n[INFO] SupoSE :: CLI\n[INFO] SupoSE :: WAR\n[INFO] SupoSE :: Integration Test\n[INFO] SupoSE :: Users Guide\n[INFO] SupoSE :: Assembly\n[INFO]  ------------------------------------\n[INFO]  Maven Incremental Module Builder\n[INFO]  ------------------------------------\n[INFO] Executing: /bin/sh -c cd '/Users/kama/ws-git/supose' \u0026\u0026 'git' 'rev-parse' '--show-toplevel'\n[INFO] Working directory: /Users/kama/ws-git/supose\n[INFO] Executing: /bin/sh -c cd '/Users/kama/ws-git/supose' \u0026\u0026 'git' 'status' '--porcelain' '.'\n[INFO] Working directory: /Users/kama/ws-git/supose\n[INFO]  scmFile: supose-assembly/pom.xml modified\n[INFO] Changed Project: com.soebes.supose:supose-assembly:pom:0.7.1-SNAPSHOT\n[INFO] Calculated Reactor Order:\n[INFO]  SupoSE :: Assembly\n[INFO] Project: com.soebes.supose:supose-assembly:pom:0.7.1-SNAPSHOT\n[INFO]\n[INFO] ------------------------------------------------------------------------\n[INFO] Building SupoSE :: Assembly 0.7.1-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO]\n[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-maven) @ supose-assembly ---\n[INFO]\n[INFO] --- buildnumber-maven-plugin:1.4:create (default) @ supose-assembly ---\n[INFO] Executing: /bin/sh -c cd '/Users/kama/ws-git/supose/supose-assembly' \u0026\u0026 'git' 'rev-parse' '--verify' 'HEAD'\n[INFO] Working directory: /Users/kama/ws-git/supose/supose-assembly\n[INFO] Storing buildNumber: 2cf6fbf37dbd3a0922ebd607a5b0504e76a0fd76 at timestamp: 1470483260527\n[INFO] Storing buildScmBranch: master\n[INFO]\n[INFO] --- maven-site-plugin:3.5.1:attach-descriptor (attach-descriptor) @ supose-assembly ---\n[INFO]\n[INFO] --- appassembler-maven-plugin:1.10:assemble (default) @ supose-assembly ---\n[INFO]\n[INFO] --- maven-assembly-plugin:2.6:single (default) @ supose-assembly ---\n[INFO] Reading assembly descriptor: src/main/assembly/bin.xml\n[INFO] Reading assembly descriptor: src/main/assembly/bin-unix.xml\n[INFO] Reading assembly descriptor: src/main/assembly/src.xml\n[INFO] Building zip: /Users/kama/ws-git/supose/supose-assembly/target/supose-assembly-0.7.1-SNAPSHOT-bin.zip\n[INFO] Building tar: /Users/kama/ws-git/supose/supose-assembly/target/supose-assembly-0.7.1-SNAPSHOT-bin-unix.tar.gz\n[INFO] Building tar: /Users/kama/ws-git/supose/supose-assembly/target/supose-assembly-0.7.1-SNAPSHOT-src.tar.gz\n[INFO] Building zip: /Users/kama/ws-git/supose/supose-assembly/target/supose-assembly-0.7.1-SNAPSHOT-src.zip\n[INFO] Starting building\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 4.159 s\n[INFO] Finished at: 2016-08-06T13:34:23+02:00\n[INFO] Final Memory: 29M/450M\n[INFO] ------------------------------------------------------------------------\n```\n\nIf you like to make your Maven call more convenient you can configure this into\nthe `.mvn/maven.config` like this ([see Release Notes][release-notes]):\n\n```\n-b incremental\n```\nSo now you can call Maven simply via `mvn package`. If you want to run the usual build\nsimply this can be achieved by using the following command line:\n\n```\nmvn -b multithreaded package\n```\nThe `multithreaded` defines the default builder. This means you have turned off\nthe incremental module builder.\n\nToDo\n----\n\n * Better error handling\n * Better checks for prerequisites.\n * Checking if artifacts have been installed in local cache before?\n * Identify edge cases where it does not work?\n\n \n[release-notes]: http://maven.apache.org/docs/3.3.1/release-notes.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhmarbaise%2Fincremental-module-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkhmarbaise%2Fincremental-module-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhmarbaise%2Fincremental-module-builder/lists"}