@@ -119,7 +119,6 @@ public class CacheConfigImpl implements org.apache.maven.buildcache.xml.CacheCon
119119 private final Provider <MavenSession > providerSession ;
120120 private final RuntimeInformation rtInfo ;
121121 private final PluginParameterLoader parameterLoader ;
122- private final DefaultReconciliationLoader defaultReconciliationLoader ;
123122
124123 private volatile CacheState state ;
125124 private CacheConfig cacheConfig ;
@@ -132,7 +131,6 @@ public CacheConfigImpl(XmlService xmlService, Provider<MavenSession> providerSes
132131 this .providerSession = providerSession ;
133132 this .rtInfo = rtInfo ;
134133 this .parameterLoader = new PluginParameterLoader ();
135- this .defaultReconciliationLoader = new DefaultReconciliationLoader ();
136134 }
137135
138136 @ Nonnull
@@ -276,17 +274,16 @@ private GoalReconciliation findReconciliationConfig(MojoExecution mojoExecution)
276274 }
277275 }
278276
279- // Fall back to defaults if no explicit configuration found
280- List < GoalReconciliation > defaults = getDefaultReconciliationConfigs ( );
281- for ( GoalReconciliation config : defaults ) {
282- if ( isPluginMatch ( plugin , config ) && Strings . CS . equals ( goal , config . getGoal ())) {
283- // Validate default config against parameter definitions ( with version)
284- validateReconciliationConfig ( config , plugin );
285- return config ;
286- }
277+ // Auto-generate from parameter definitions (track all functional parameters)
278+ GoalReconciliation autoGenerated = generateReconciliationFromParameters ( plugin , goal );
279+ if ( autoGenerated != null ) {
280+ LOGGER . debug (
281+ "Auto-generated reconciliation config for {}:{} with {} functional parameters" ,
282+ plugin . getArtifactId (),
283+ goal ,
284+ autoGenerated . getReconciles () != null ? autoGenerated . getReconciles (). size () : 0 );
287285 }
288-
289- return null ;
286+ return autoGenerated ;
290287 }
291288
292289 /**
@@ -359,83 +356,57 @@ private void validateReconciliationConfig(GoalReconciliation config, Plugin plug
359356 }
360357
361358 /**
362- * Load default reconciliation configurations from XML.
363- * Defaults are loaded from classpath: default-reconciliation/defaults.xml
359+ * Auto-generates a reconciliation config by tracking all functional parameters
360+ * from the plugin parameter definition.
361+ * This provides automatic default tracking for any plugin with parameter definitions.
362+ *
363+ * @param plugin The plugin to generate config for
364+ * @param goal The goal name
365+ * @return Auto-generated config tracking all functional parameters, or null if no parameter definition exists
364366 */
365- private List <GoalReconciliation > getDefaultReconciliationConfigs () {
366- List <GoalReconciliation > defaults = defaultReconciliationLoader .loadDefaults ();
367+ private GoalReconciliation generateReconciliationFromParameters (Plugin plugin , String goal ) {
368+ String artifactId = plugin .getArtifactId ();
369+ String pluginVersion = plugin .getVersion ();
367370
368- // Validate all default configurations against parameter definitions
369- validateReconciliationConfigs (defaults );
371+ // Load parameter definition for this plugin
372+ PluginParameterDefinition pluginDef = parameterLoader .load (artifactId , pluginVersion );
373+ if (pluginDef == null ) {
374+ return null ;
375+ }
370376
371- return defaults ;
372- }
377+ // Get goal definition
378+ PluginParameterDefinition .GoalParameterDefinition goalDef = pluginDef .getGoal (goal );
379+ if (goalDef == null ) {
380+ return null ;
381+ }
373382
374- /**
375- * Validates reconciliation configs against plugin parameter definitions.
376- * Warns about unknown parameters that may indicate plugin changes or configuration errors.
377- */
378- private void validateReconciliationConfigs (List <GoalReconciliation > configs ) {
379- for (GoalReconciliation config : configs ) {
380- String artifactId = config .getArtifactId ();
381- String goal = config .getGoal ();
382-
383- // Load parameter definition for this plugin
384- PluginParameterDefinition pluginDef = parameterLoader .load (artifactId );
385-
386- if (pluginDef == null ) {
387- LOGGER .warn (
388- "No parameter definition found for plugin {}:{}. "
389- + "Cannot validate reconciliation configuration. "
390- + "Consider adding a parameter definition file to plugin-parameters/{}.xml" ,
391- artifactId ,
392- goal ,
393- artifactId );
394- continue ;
383+ // Collect all functional parameters
384+ List <TrackedProperty > functionalProperties = new ArrayList <>();
385+ for (PluginParameterDefinition .ParameterDefinition param : goalDef .getParameters ().values ()) {
386+ if (param .isFunctional ()) {
387+ TrackedProperty property = new TrackedProperty ();
388+ property .setPropertyName (param .getName ());
389+ functionalProperties .add (property );
395390 }
391+ }
396392
397- // Get goal definition
398- PluginParameterDefinition .GoalParameterDefinition goalDef = pluginDef .getGoal (goal );
399- if (goalDef == null ) {
400- LOGGER .warn (
401- "Goal '{}' not found in parameter definition for plugin {}. "
402- + "Cannot validate reconciliation configuration." ,
403- goal ,
404- artifactId );
405- continue ;
406- }
393+ // Only create config if there are functional parameters to track
394+ if (functionalProperties .isEmpty ()) {
395+ return null ;
396+ }
407397
408- // Validate each tracked property
409- List <TrackedProperty > properties = config .getReconciles ();
410- if (properties != null ) {
411- for (TrackedProperty property : properties ) {
412- String propertyName = property .getPropertyName ();
413-
414- if (!goalDef .hasParameter (propertyName )) {
415- LOGGER .error (
416- "Unknown parameter '{}' in default reconciliation config for {}:{}. "
417- + "This parameter is not defined in the plugin parameter definition. "
418- + "This may indicate a plugin version mismatch or renamed parameter. "
419- + "Please update the parameter definition or remove this property from reconciliation." ,
420- propertyName ,
421- artifactId ,
422- goal );
423- } else {
424- PluginParameterDefinition .ParameterDefinition paramDef =
425- goalDef .getParameter (propertyName );
426- if (paramDef .isBehavioral ()) {
427- LOGGER .warn (
428- "Parameter '{}' in reconciliation config for {}:{} is categorized as BEHAVIORAL. "
429- + "Behavioral parameters typically should not affect cache invalidation. "
430- + "Consider removing this parameter from reconciliation if it doesn't affect build output." ,
431- propertyName ,
432- artifactId ,
433- goal );
434- }
435- }
436- }
437- }
398+ // Create auto-generated reconciliation config
399+ GoalReconciliation config = new GoalReconciliation ();
400+ config .setArtifactId (artifactId );
401+ if (plugin .getGroupId () != null ) {
402+ config .setGroupId (plugin .getGroupId ());
403+ }
404+ config .setGoal (goal );
405+ for (TrackedProperty property : functionalProperties ) {
406+ config .addReconcile (property );
438407 }
408+
409+ return config ;
439410 }
440411
441412 @ Nonnull
0 commit comments