The Git-Flow Maven Plugin supports various Git workflows, including GitFlow and GitHub Flow. This plugin runs Git and Maven commands from the command line.
I stumbled upon a weird bug where the hotfix-finish goal is failing under special circumstances.
The project is a Multi Maven Project (has a Parent POM and Module POMs).
A completely new dependency was added to the develop branch between the last release and the upcoming hotfix release.
The concrete error is that the build fails with 'dependencies.dependency.version' for <dependency> is missing. However, the version is set properly (only in the dependency in the Parent POM).
The exact location where this is failing is after merging the hotfix branch into the master branch, creating the tag, checking out the develop branch und updating the version. After the version update, it will be attempted to update the value of project.build.outputTimestamp. Here the error occurrs (I was able to verify this by setting updateOutputTimestamp to false, then the build succeeded).
My guess is that some kind of race condition in combination with a version clash happens. The dependency is available in the develop branch (e.g. 1.0.1-SNAPSHOT). On the hotfix branch (e.g. 1.0.1), this dependency is not available (yet). When updating the version of the develop branch to the hotfix version, there are now two different states of the same version, one with and one without the dependency. And somehow Maven thinks that the version is missing (since it's only defined in the Parent POM).
I was able to reproduce this in two different projects with two different dependencies, only having the Multi Maven Project and the newly added dependency in common.
Steps to reproduce:
Having a Multi Maven Project with a develop and a master branch (a simple project with one module should be enough).
Ensure the develop branch is on a different version than the master branch (e.g. 1.0.1-SNAPSHOT for develop and 1.0.0 for master).
Add a new dependency to the project.
Add the dependency with a version to the dependencyManagement block of the Parent POM.
Add the dependency without the version to the dependencies block of the Module POM.
Logs
```
$ git symbolic-ref refs/heads/$CI_COMMIT_REF_NAME refs/remotes/origin/$CI_COMMIT_REF_NAME
$ mvn -B gitflow:hotfix-finish -DhotfixBranch=$CI_COMMIT_BRANCH
681 [INFO] Error stacktraces are turned on.
714 [INFO] Scanning for projects...
763 [INFO] ------------------------------------------------------------------------
763 [INFO] Reactor Build Order:
763 [INFO]
764 [INFO] [pom]
764 [INFO] [jar]
764 [INFO] [jar]
764 [INFO] [jar]
764 [INFO] [pom]
12971 [INFO]
12971 [INFO] --------< : >---------
12971 [INFO] Building 8.0.1 [1/5]
12971 [INFO] from pom.xml
12971 [INFO] --------------------------------[ pom ]---------------------------------
12978 [INFO]
12979 [INFO] --- gitflow:1.21.0:hotfix-finish (default-cli) @ ---
29255 [INFO] Checking for uncommitted changes.
29276 [INFO] Fetching remote from 'origin'.
"origin/hotfix/8.0.1"
29617 [INFO] Comparing local branch 'hotfix/8.0.1' with remote 'origin/hotfix/8.0.1'.
0 0
29626 [INFO] Fetching remote from 'origin'.
"origin/develop"
29923 [INFO] Local branch 'develop' doesn't exist. Trying check it out from 'origin'.
29923 [INFO] Creating a new branch 'develop' from 'origin/develop' and checking it out.
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
29932 [WARNING] Previous HEAD position was d6d5c71 Update versions for hotfix
Switched to a new branch 'develop'
29932 [INFO] Fetching remote from 'origin'.
"origin/master"
30227 [INFO] Local branch 'master' doesn't exist. Trying check it out from 'origin'.
30227 [INFO] Creating a new branch 'master' from 'origin/master' and checking it out.
Branch 'master' set up to track remote branch 'master' from 'origin'.
30233 [WARNING] Switched to a new branch 'master'
30233 [INFO] Fetching remote from 'origin'.
30512 [INFO] Checking out 'hotfix/8.0.1' branch.
30517 [WARNING] Switched to branch 'hotfix/8.0.1'
30525 [INFO] Checking out 'master' branch.
Your branch is up to date with 'origin/master'.
30531 [WARNING] Switched to branch 'master'
30531 [INFO] Merging (--no-ff) 'hotfix/8.0.1' branch.
Merge made by the 'ort' strategy.
/pom.xml | 2 +-
/pom.xml | 2 +-
pom.xml | 2 +-
/pom.xml | 2 +-
/pom.xml | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
30546 [INFO] Creating '8.0.1' tag.
30554 [INFO] Checking out 'develop' branch.
Your branch is up to date with 'origin/develop'.
30559 [WARNING] Switched to branch 'develop'
30565 [INFO] Updating version(s) to '8.0.1'.
636 [INFO] Error stacktraces are turned on.
668 [INFO] Scanning for projects...
716 [INFO] ------------------------------------------------------------------------
716 [INFO] Reactor Build Order:
716 [INFO]
717 [INFO] [pom]
717 [INFO] [jar]
717 [INFO] [jar]
717 [INFO] [jar]
717 [INFO] [pom]
2573 [INFO]
2573 [INFO] --------< : >---------
2573 [INFO] Building 8.0.1-SNAPSHOT [1/5]
2573 [INFO] from pom.xml
2573 [INFO] --------------------------------[ pom ]---------------------------------
2577 [INFO]
2578 [INFO] --- versions:2.16.0:set (default-cli) @ ---
25958 [INFO] Searching for local aggregator root...
25958 [INFO] Local aggregation root: /builds/
25961 [INFO] Processing change of ::8.0.1-SNAPSHOT -> 8.0.1
25993 [INFO] Processing :
25994 [INFO] Updating project :
25994 [INFO] from version 8.0.1-SNAPSHOT to 8.0.1
26013 [INFO]
26015 [INFO] Processing :
26015 [INFO] Updating parent :
26015 [INFO] from version 8.0.1-SNAPSHOT to 8.0.1
26017 [INFO]
26018 [INFO] Processing :
26018 [INFO] Updating parent :
26018 [INFO] from version 8.0.1-SNAPSHOT to 8.0.1
26020 [INFO]
26021 [INFO] Processing :
26021 [INFO] Updating parent :
26021 [INFO] from version 8.0.1-SNAPSHOT to 8.0.1
26023 [INFO]
26023 [INFO] Processing :
26023 [INFO] Updating parent :
26023 [INFO] from version 8.0.1-SNAPSHOT to 8.0.1
26025 [INFO]
26026 [INFO] ------------------------------------------------------------------------
26026 [INFO] Reactor Summary for 8.0.1-SNAPSHOT:
26026 [INFO]
26026 [INFO] ....................................... SUCCESS [ 23.452 s]
26026 [INFO] ............................................. SKIPPED
26026 [INFO] .......................................... SKIPPED
26026 [INFO] .......................................... SKIPPED
26026 [INFO] ........................................... SKIPPED
26026 [INFO] ------------------------------------------------------------------------
26026 [INFO] BUILD SUCCESS
26026 [INFO] ------------------------------------------------------------------------
26026 [INFO] Total time: 25.372 s
26026 [INFO] Finished at: 2024-10-04T08:03:16Z
26026 [INFO] ------------------------------------------------------------------------
56759 [INFO] ------------------------------------------------------------------------
56759 [INFO] Reactor Summary for 8.0.1:
56759 [INFO]
56759 [INFO] ....................................... FAILURE [ 43.788 s]
56759 [INFO] ............................................. SKIPPED
56759 [INFO] .......................................... SKIPPED
56759 [INFO] .......................................... SKIPPED
56759 [INFO] ........................................... SKIPPED
56759 [INFO] ------------------------------------------------------------------------
56759 [INFO] BUILD FAILURE
56759 [INFO] ------------------------------------------------------------------------
56760 [INFO] Total time: 56.060 s
56760 [INFO] Finished at: 2024-10-04T08:03:16Z
56760 [INFO] ------------------------------------------------------------------------
56760 [ERROR] Failed to execute goal com.amashchenko.maven.plugin:gitflow-maven-plugin:1.21.0:hotfix-finish (default-cli) on project : hotfix-finish: Error re-loading project info: Some problems were encountered while processing the POMs:
56760 [ERROR] [ERROR] 'dependencies.dependency.version' for :jar is missing. @ line 30, column 21
56760 [ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.amashchenko.maven.plugin:gitflow-maven-plugin:1.21.0:hotfix-finish (default-cli) on project : hotfix-finish
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:347)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:260)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:568)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoFailureException: hotfix-finish
at com.amashchenko.maven.plugin.gitflow.GitFlowHotfixFinishMojo.execute (GitFlowHotfixFinishMojo.java:386)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:260)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:568)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoFailureException: Error re-loading project info
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.reloadProjects (AbstractGitFlowMojo.java:375)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.reloadProject (AbstractGitFlowMojo.java:388)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.getCurrentProjectOutputTimestamp (AbstractGitFlowMojo.java:350)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.mvnSetVersions (AbstractGitFlowMojo.java:1190)
at com.amashchenko.maven.plugin.gitflow.GitFlowHotfixFinishMojo.execute (GitFlowHotfixFinishMojo.java:307)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:260)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:568)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for :jar is missing. @ line 30, column 21
at org.apache.maven.project.DefaultProjectBuilder.build (DefaultProjectBuilder.java:388)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.reloadProjects (AbstractGitFlowMojo.java:364)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.reloadProject (AbstractGitFlowMojo.java:388)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.getCurrentProjectOutputTimestamp (AbstractGitFlowMojo.java:350)
at com.amashchenko.maven.plugin.gitflow.AbstractGitFlowMojo.mvnSetVersions (AbstractGitFlowMojo.java:1190)
at com.amashchenko.maven.plugin.gitflow.GitFlowHotfixFinishMojo.execute (GitFlowHotfixFinishMojo.java:307)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:260)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:568)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
56763 [ERROR]
56763 [ERROR] Re-run Maven using the -X switch to enable full debug logging.
56763 [ERROR]
56763 [ERROR] For more information about the errors and possible solutions, please read the following articles:
56763 [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1
```
Hello.
I stumbled upon a weird bug where the
hotfix-finish
goal is failing under special circumstances.The concrete error is that the build fails with
'dependencies.dependency.version' for <dependency> is missing
. However, the version is set properly (only in the dependency in the Parent POM).The exact location where this is failing is after merging the hotfix branch into the master branch, creating the tag, checking out the develop branch und updating the version. After the version update, it will be attempted to update the value of
project.build.outputTimestamp
. Here the error occurrs (I was able to verify this by settingupdateOutputTimestamp
to false, then the build succeeded).My guess is that some kind of race condition in combination with a version clash happens. The dependency is available in the develop branch (e.g.
1.0.1-SNAPSHOT
). On the hotfix branch (e.g.1.0.1
), this dependency is not available (yet). When updating the version of the develop branch to the hotfix version, there are now two different states of the same version, one with and one without the dependency. And somehow Maven thinks that the version is missing (since it's only defined in the Parent POM).I was able to reproduce this in two different projects with two different dependencies, only having the Multi Maven Project and the newly added dependency in common.
Steps to reproduce:
1.0.1-SNAPSHOT
for develop and1.0.0
for master).dependencyManagement
block of the Parent POM.dependencies
block of the Module POM.My plugin configuration:
Commands executed:
mvn -B gitflow:hotfix-start -DhotfixVersion=$RELEASE_VERSION
mvn -B gitflow:hotfix-finish -DhotfixBranch=$CI_COMMIT_BRANCH
Logs:
Logs
``` $ git symbolic-ref refs/heads/$CI_COMMIT_REF_NAME refs/remotes/origin/$CI_COMMIT_REF_NAME $ mvn -B gitflow:hotfix-finish -DhotfixBranch=$CI_COMMIT_BRANCH 681 [INFO] Error stacktraces are turned on. 714 [INFO] Scanning for projects... 763 [INFO] ------------------------------------------------------------------------ 763 [INFO] Reactor Build Order: 763 [INFO] 764 [INFO]I hope I provided all needed information.
Kind regards,
Daniel