diff --git a/build.gradle b/build.gradle
index aba92c2..2351b90 100644
--- a/build.gradle
+++ b/build.gradle
@@ -97,31 +97,34 @@
     // Exclude everything under the directory that git should be ignoring via .gitignore or that isn't checked in. These
     // restrict us only to files that are checked in or are staged.
     def repo = Grgit.open(currentDir: project.getRootDir())
-    excludes = new ArrayList<String>(repo.clean(ignore: false, directories: true, dryRun: true))
-    // And some of the files that we have checked in should also be excluded from this check
-    excludes.addAll([
-      '.*\\.asc',
-      '\\w+/out/.*',
-      'eth-reference-tests/**',
-      'build',
-      '.*/build/**',
-      '.editorconfig',
-      '.idea/**',
-      'gradlew.bat',
-      'gradlew',
-      'io/src/test/resources/org/apache/tuweni/io/file/**',
-      'toml/src/test/resources/**',
-      '.gitattributes',
-      'test1.txt',
-      'test2.txt',
-      'test3.yaml',
-      '.*\\.kotlin_module',
-      'example-v0.4.0.toml',
-      'hard_example.toml',
-      'toml-v0.5.0-spec-example.toml',
-      'test.txt',
-      'resourceresolver-test.jar'
-    ])
+    excludes = {
+      def list = new ArrayList<String>(repo.clean(ignore: false, directories: true, dryRun: true))
+      // And some of the files that we have checked in should also be excluded from this check
+      list.addAll([
+        '.*\\.asc',
+        '\\w+/out/.*',
+        'eth-reference-tests/**',
+        'build',
+        '.*/build/**',
+        '.editorconfig',
+        '.idea/**',
+        'gradlew.bat',
+        'gradlew',
+        'io/src/test/resources/org/apache/tuweni/io/file/**',
+        'toml/src/test/resources/**',
+        '.gitattributes',
+        'test1.txt',
+        'test2.txt',
+        'test3.yaml',
+        '.*\\.kotlin_module',
+        'example-v0.4.0.toml',
+        'hard_example.toml',
+        'toml-v0.5.0-spec-example.toml',
+        'test.txt',
+        'resourceresolver-test.jar'
+      ])
+      return list
+    }
   }
 }
 
diff --git a/gradle/rat.gradle b/gradle/rat.gradle
index 8679584..070797e 100644
--- a/gradle/rat.gradle
+++ b/gradle/rat.gradle
@@ -27,7 +27,7 @@
 
 class RatTask extends DefaultTask {
   @Input
-  List<String> excludes
+  Closure<List<String>> excludes
 
   def reportDir = project.file('build/rat')
   def stylesheet = project.file('gradle/resources/rat-output-to-html.xsl').getAbsolutePath()
@@ -35,6 +35,7 @@
   def htmlReport = new File(reportDir, 'rat-report.html')
 
   def generateXmlReport(File reportDir) {
+    def excludeList = excludes()
     def antBuilder = services.get(IsolatedAntBuilder)
     def ratClasspath = project.configurations.rat
     def projectPath = project.getRootDir().getAbsolutePath()
@@ -43,7 +44,7 @@
       ant.report(format: 'xml', reportFile: xmlReport) {
         fileset(dir: projectPath) {
           patternset {
-            excludes.each { exclude(name: it) }
+            excludeList.each { exclude(name: it) }
           }
         }
       }
