From 906f039c8980ea0341503a7bf6ea5a5557d48993 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 25 May 2026 21:12:37 +0000 Subject: [PATCH 1/2] fix: use nullable Boolean for mojo params so lockfile config is not overridden by defaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Boolean parameters in AbstractLockfileMojo were declared as primitive `boolean` with a `defaultValue`, meaning Maven always bound a value (true or false) even when the user never set the parameter. This made it impossible for mergeConfigWithCliArgs to distinguish "explicitly set by user" from "just the default" — the default would silently override the stored lockfile config. Fix: change the five bool parameters used by mergeConfigWithCliArgs (includeMavenPlugins, allowValidationFailure, allowPomValidationFailure, allowEnvironmentalValidationFailure, includeEnvironment) from `boolean` to `Boolean` and remove their `defaultValue`. When null (not set), mergeConfigWithCliArgs now preserves the lockfile's stored value; when non-null (explicitly set via CLI or pom.xml), it overrides. getConfig() applies system defaults for the null case: includeMavenPlugins → true (plugins included by default) includeEnvironment → true Also updates Config's default no-arg constructor to reflect the new includeMavenPlugins default of true. https://claude.ai/code/session_01PeZS3ZNzvZQDFPUXAer6ur --- .../maven_lockfile/AbstractLockfileMojo.java | 80 +++++++++++-------- .../maven_lockfile/data/Config.java | 2 +- .../maven_lockfile/ValidateMojoTest.java | 2 +- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/AbstractLockfileMojo.java b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/AbstractLockfileMojo.java index 4f68e447f..a6f1c2d6a 100644 --- a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/AbstractLockfileMojo.java +++ b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/AbstractLockfileMojo.java @@ -43,20 +43,20 @@ public abstract class AbstractLockfileMojo extends AbstractMojo { @Component protected RepositorySystem repositorySystem; - @Parameter(property = "includeMavenPlugins", defaultValue = "false") - protected boolean includeMavenPlugins; + @Parameter(property = "includeMavenPlugins") + protected Boolean includeMavenPlugins; - @Parameter(property = "allowValidationFailure", defaultValue = "false") - protected boolean allowValidationFailure; + @Parameter(property = "allowValidationFailure") + protected Boolean allowValidationFailure; - @Parameter(property = "allowPomValidationFailure", defaultValue = "false") - protected boolean allowPomValidationFailure; + @Parameter(property = "allowPomValidationFailure") + protected Boolean allowPomValidationFailure; - @Parameter(property = "allowEnvironmentalValidationFailure", defaultValue = "false") - protected boolean allowEnvironmentalValidationFailure; + @Parameter(property = "allowEnvironmentalValidationFailure") + protected Boolean allowEnvironmentalValidationFailure; - @Parameter(property = "includeEnvironment", defaultValue = "true") - protected boolean includeEnvironment; + @Parameter(property = "includeEnvironment") + protected Boolean includeEnvironment; @Parameter(defaultValue = "${maven.version}") protected String mavenVersion; @@ -137,17 +137,24 @@ protected Config getConfig() { String chosenChecksumAlgorithm = Strings.isNullOrEmpty(checksumAlgorithm) ? "SHA-256" : checksumAlgorithm; ChecksumModes chosenChecksumMode = Strings.isNullOrEmpty(checksumMode) ? ChecksumModes.LOCAL : ChecksumModes.fromName(checksumMode); - Config.MavenPluginsInclusion mavenPluginsInclusion = - includeMavenPlugins ? Config.MavenPluginsInclusion.Include : Config.MavenPluginsInclusion.Exclude; - Config.OnValidationFailure onValidationFailure = - allowValidationFailure ? Config.OnValidationFailure.Warn : Config.OnValidationFailure.Error; - Config.OnPomValidationFailure onPomValidationFailure = - allowPomValidationFailure ? Config.OnPomValidationFailure.Warn : Config.OnPomValidationFailure.Error; - Config.OnEnvironmentalValidationFailure onEnvironmentalValidationFailure = allowEnvironmentalValidationFailure - ? Config.OnEnvironmentalValidationFailure.Warn - : Config.OnEnvironmentalValidationFailure.Error; - Config.EnvironmentInclusion environmentInclusion = - includeEnvironment ? Config.EnvironmentInclusion.Include : Config.EnvironmentInclusion.Exclude; + // includeMavenPlugins defaults to true when not explicitly set + Config.MavenPluginsInclusion mavenPluginsInclusion = Boolean.FALSE.equals(includeMavenPlugins) + ? Config.MavenPluginsInclusion.Exclude + : Config.MavenPluginsInclusion.Include; + Config.OnValidationFailure onValidationFailure = Boolean.TRUE.equals(allowValidationFailure) + ? Config.OnValidationFailure.Warn + : Config.OnValidationFailure.Error; + Config.OnPomValidationFailure onPomValidationFailure = Boolean.TRUE.equals(allowPomValidationFailure) + ? Config.OnPomValidationFailure.Warn + : Config.OnPomValidationFailure.Error; + Config.OnEnvironmentalValidationFailure onEnvironmentalValidationFailure = + Boolean.TRUE.equals(allowEnvironmentalValidationFailure) + ? Config.OnEnvironmentalValidationFailure.Warn + : Config.OnEnvironmentalValidationFailure.Error; + // includeEnvironment defaults to true when not explicitly set + Config.EnvironmentInclusion environmentInclusion = Boolean.FALSE.equals(includeEnvironment) + ? Config.EnvironmentInclusion.Exclude + : Config.EnvironmentInclusion.Include; Config.ReductionState reductionState = reduced ? Config.ReductionState.Reduced : Config.ReductionState.NonReduced; @@ -177,22 +184,27 @@ protected ProjectBuildingRequest newResolvePluginProjectBuildingRequest() throws /** * Returns a Config that starts from {@code base} (typically the stored lockfile config) and overrides - * only the fields for which a boolean flag was explicitly set to {@code true}. When a flag is - * {@code false} (the default), the stored value is preserved so that existing lockfile configs are - * not silently tightened by plugin defaults. + * only the fields that were explicitly set via CLI or pom.xml configuration (non-null). When a flag + * is null (not explicitly set), the stored value from the lockfile config is preserved. */ protected Config mergeConfigWithCliArgs(Config base) { - Config.MavenPluginsInclusion pluginsInclusion = - includeMavenPlugins ? Config.MavenPluginsInclusion.Include : base.getMavenPluginsInclusion(); - Config.OnValidationFailure onValidationFailure = - allowValidationFailure ? Config.OnValidationFailure.Warn : base.getOnValidationFailure(); - Config.OnPomValidationFailure onPomValidationFailure = - allowPomValidationFailure ? Config.OnPomValidationFailure.Warn : base.getOnPomValidationFailure(); - Config.OnEnvironmentalValidationFailure onEnvFailure = allowEnvironmentalValidationFailure - ? Config.OnEnvironmentalValidationFailure.Warn + Config.MavenPluginsInclusion pluginsInclusion = includeMavenPlugins != null + ? (includeMavenPlugins ? Config.MavenPluginsInclusion.Include : Config.MavenPluginsInclusion.Exclude) + : base.getMavenPluginsInclusion(); + Config.OnValidationFailure onValidationFailure = allowValidationFailure != null + ? (allowValidationFailure ? Config.OnValidationFailure.Warn : Config.OnValidationFailure.Error) + : base.getOnValidationFailure(); + Config.OnPomValidationFailure onPomValidationFailure = allowPomValidationFailure != null + ? (allowPomValidationFailure ? Config.OnPomValidationFailure.Warn : Config.OnPomValidationFailure.Error) + : base.getOnPomValidationFailure(); + Config.OnEnvironmentalValidationFailure onEnvFailure = allowEnvironmentalValidationFailure != null + ? (allowEnvironmentalValidationFailure + ? Config.OnEnvironmentalValidationFailure.Warn + : Config.OnEnvironmentalValidationFailure.Error) : base.getOnEnvironmentalValidationFailure(); - Config.EnvironmentInclusion environmentInclusion = - includeEnvironment ? Config.EnvironmentInclusion.Include : base.getEnvironmentInclusion(); + Config.EnvironmentInclusion environmentInclusion = includeEnvironment != null + ? (includeEnvironment ? Config.EnvironmentInclusion.Include : Config.EnvironmentInclusion.Exclude) + : base.getEnvironmentInclusion(); return new Config( pluginsInclusion, onValidationFailure, diff --git a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java index 182e6d4c2..889579b3c 100644 --- a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java +++ b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java @@ -38,7 +38,7 @@ public Config( } public Config() { - this.includeMavenPlugins = false; + this.includeMavenPlugins = true; this.allowValidationFailure = false; this.allowPomValidationFailure = false; this.allowEnvironmentalValidationFailure = false; diff --git a/maven_plugin/src/test/java/io/github/chains_project/maven_lockfile/ValidateMojoTest.java b/maven_plugin/src/test/java/io/github/chains_project/maven_lockfile/ValidateMojoTest.java index 5ed2e66c9..9e6a23f48 100644 --- a/maven_plugin/src/test/java/io/github/chains_project/maven_lockfile/ValidateMojoTest.java +++ b/maven_plugin/src/test/java/io/github/chains_project/maven_lockfile/ValidateMojoTest.java @@ -46,7 +46,7 @@ void cliArgOverridesStoredConfig() { @Test void storedConfigUsedWhenCliArgNotSet() { var m = mojo(); - assertThat(m.allowEnvironmentalValidationFailure).isFalse(); + assertThat(m.allowEnvironmentalValidationFailure).isNull(); Config merged = m.mergeConfigWithCliArgs(storedConfig()); assertThat(merged.getOnEnvironmentalValidationFailure()) From 8b2303566227d87305c8b5564235252e60420c58 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Tue, 26 May 2026 19:28:36 +0200 Subject: [PATCH 2/2] fix: revert Config() default includeMavenPlugins to false The default change belongs in PR #1576 (feat: include Maven plugins by default). This PR's scope is the nullable Boolean refactor for mergeConfigWithCliArgs. Co-Authored-By: Claude Sonnet 4.6 --- .../io/github/chains_project/maven_lockfile/data/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java index 889579b3c..182e6d4c2 100644 --- a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java +++ b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/data/Config.java @@ -38,7 +38,7 @@ public Config( } public Config() { - this.includeMavenPlugins = true; + this.includeMavenPlugins = false; this.allowValidationFailure = false; this.allowPomValidationFailure = false; this.allowEnvironmentalValidationFailure = false;