societe-generale / arch-unit-build-plugin-core

The core logic for Maven or Gradle ArchUnit plugin
Apache License 2.0
32 stars 19 forks source link

Support for freezing rules #72

Open tduchateau-pro opened 1 year ago

tduchateau-pro commented 1 year ago

Summary

A new configuration point for ConfigurableRules could be very useful to specify whether a rule is frozen or not. See https://www.archunit.org/userguide/html/000_Index.html#_freezing_arch_rules for reference documentation.

I'm particularly interested in this feature in the Gradle plugin, but this feature could totally benefit the Maven plugin as well, which is why I've created this request here.

Type of Issue

It is a :

Motivation

When it comes to implementing ArchUnit in existing projects, the Freezing rules feature is very useful for implementing an iterative approach.

As it is, I haven't found any workaround other than declaring each rule twice, once "normally", and once wrapping it with FreezingArchRule.freeze(rule). By doing this, it is then possible to decide in the plugin configuration whether to use the "normal" rule or the frozen rule. In the meantime, if anyone sees a better workaround, don't hesitate to share :-)

A new configuration point in ConfigurableRules seems to me more appropriate for deciding whether a rule is frozen or not. WDYT?

Current Behavior

archUnit {
   configurableRules=[
      configurableRule(
         "com.societegenerale.commons.plugin.rules.NoAutowiredFieldTest", 
         applyOn("com.package","main")
      ),
   ]
}

Expected Behavior

archUnit {
   configurableRules=[
      configurableRule(
         "com.societegenerale.commons.plugin.rules.NoAutowiredFieldTest", 
         applyOn("com.package","main"),
         true <== true for frozen, false otherwise, defaults to false
      ),
   ]
}

Your Environment

vincent-fuchs commented 11 months ago

have you seen https://github.com/societe-generale/arch-unit-maven-plugin#using-archunitproperties-file , which points to https://github.com/societe-generale/arch-unit-maven-plugin/issues/37#issuecomment-792115469 ?

I haven't looked at this recently, and I won't have time any time soon, but maybe that helps you ?