Skip to content

Support for freezing rules #72

@tduchateau-pro

Description

@tduchateau-pro

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 :

  • bug
  • request
  • question regarding the documentation

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

  • Version used:

    • com.societegenerale.commons:arch-unit-gradle-plugin:2.9.5
    • com.societegenerale.commons:arch-unit-build-plugin-core:2.9.5
  • OS and version: MacOS Ventura (13.5.1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions