diff --git a/gradle/adhoc.gradle b/gradle/adhoc.gradle
index 8f05fb6..604279a 100644
--- a/gradle/adhoc.gradle
+++ b/gradle/adhoc.gradle
@@ -7,6 +7,7 @@
 }
 
 ext.grgitClass = org.ajoberstar.grgit.Grgit
+ext.modules = [:]
 
 ssh.settings {
     dryRun = project.hasProperty('dryRun')
@@ -74,33 +75,80 @@
     }
 }
 
-// useful when re-populating artifactory/jcentral from a partial build failure
-task populateFromCentral(dependsOn: assumesPropsSet) {
-    doLast {
-        def type1 = ['.pom', '.pom.asc']
-        def type2 = ['.jar', '.jar.asc', '.pom', '.pom.asc']
-        def type3 = ['.zip', '.zip.asc', '.pom', '.pom.asc']
-        def type4 = ['.jar', '.jar.asc', '.pom', '.pom.asc', '-grooid.jar', '-grooid.jar.asc']
-        def modules = [
-                'groovy': type4, 'groovy-all': type1,
-                'groovy-ant': type2, 'groovy-astbuilder': type2,
-                'groovy-binary': type3, 'groovy-bom': type1,
-                'groovy-bsf': type2, 'groovy-cli-commons': type2,
-                'groovy-cli-picocli': type2, 'groovy-console': type2,
-                'groovy-contracts': type2, 'groovy-datetime': type2,
-                'groovy-dateutil': type2, 'groovy-docgenerator': type2,
-                'groovy-ginq': type2, 'groovy-groovydoc': type2,
-                'groovy-groovysh': type2, 'groovy-jaxb': type2,
-                'groovy-jmx': type2, 'groovy-json': type2,
-                'groovy-jsr223': type2, 'groovy-macro': type2,
-                'groovy-macro-library': type2, 'groovy-nio': type2,
-                'groovy-servlet': type2, 'groovy-sql': type2,
-                'groovy-swing': type2, 'groovy-templates': type2,
-                'groovy-test': type4, 'groovy-test-junit5': type2,
-                'groovy-testng': type2, 'groovy-typecheckers': type2,
-                'groovy-xml': type2, 'groovy-yaml': type2
+task setupModules(dependsOn: assumesPropsSet) {
+    def type1 = ['.pom', '.pom.asc']
+    def type1b = ['.pom', '.pom.asc', '-sources.jar', '-sources.jar.asc', '-javadoc.jar', '-javadoc.jar.asc', '-groovydoc.jar', '-groovydoc.jar.asc']
+    def type2 = ['.jar', '.jar.asc', '.pom', '.pom.asc', '-sources.jar', '-sources.jar.asc', '-indy.jar', '-indy.jar.asc', '-javadoc.jar', '-javadoc.jar.asc', '-groovydoc.jar', '-groovydoc.jar.asc']
+    def type3 = ['.zip', '.zip.asc', '.pom', '.pom.asc']
+    def type4 = ['.jar', '.jar.asc', '.pom', '.pom.asc', '-grooid.jar', '-grooid.jar.asc', '-sources.jar', '-sources.jar.asc', '-indy.jar', '-indy.jar.asc', '-javadoc.jar', '-javadoc.jar.asc', '-groovydoc.jar', '-groovydoc.jar.asc']
+    modules = [
+            'groovy'            : type4, 'groovy-all': type1b,
+            'groovy-ant'        : type2,
+            'groovy-binary'     : type3, 'groovy-bom': type1,
+            'groovy-cli-commons': type2,
+            'groovy-cli-picocli': type2, 'groovy-console': type2,
+            'groovy-datetime'   : type2,
+            'groovy-dateutil'   : type2, 'groovy-docgenerator': type2,
+            'groovy-groovydoc'  : type2,
+            'groovy-groovysh'   : type2, 'groovy-jaxb': type2,
+            'groovy-jmx'        : type2,
+            'groovy-json'       : type2,
+            'groovy-jsr223'     : type2, 'groovy-macro': type2,
+            'groovy-nio'        : type2,
+            'groovy-servlet'    : type2, 'groovy-sql': type2,
+            'groovy-swing'      : type2, 'groovy-templates': type2,
+            'groovy-test'       : type4, 'groovy-test-junit5': type2,
+            'groovy-testng'     : type2,
+            'groovy-xml'        : type2
+    ]
+    if (relVersion[0] < '3') {
+        modules << ['groovy-json-direct': type2]
+    }
+    if (relVersion[0] < '4') {
+        modules << ['groovy-bsf': type2]
+    }
+    if (relVersion[0] >= '3') {
+        modules << [
+                'groovy-astbuilder': type2,
+                'groovy-yaml': type2
         ]
-        def prefix = 'https://repo1.maven.org/maven2/org/apache/groovy'
+    }
+    if (relVersion.startsWith('4')) {
+        modules += [
+                'groovy-contracts': type2,
+                'groovy-ginq': type2,
+                'groovy-macro-library': type2,
+                'groovy-toml': type2,
+                'groovy-typecheckers': type2
+        ]
+    }
+}
+
+task zipFromArtifactory(dependsOn: setupModules) {
+    doLast {
+        def groupId = apacheGroupId ? 'org/apache/groovy' : 'org/codehaus/groovy'
+        def prefix = "https://groovy.jfrog.io/artifactory/libs-release-local/$groupId"
+        def artifactBase = file("$buildDir/artifacts-$relVersion").absolutePath
+        def zipDir = file("$buildDir/zips-$relVersion").absolutePath
+        file(zipDir).mkdirs()
+        println "Artifact base dir: $artifactBase, zips: $zipDir"
+        modules.each { m, suffixes ->
+            def artifactDir = "$artifactBase/$m"
+            file(artifactDir).mkdirs()
+            println "Processing ${suffixes.size()} artifacts for $m"
+            suffixes.each { suffix ->
+                ant.get(src: "$prefix/$m/$relVersion/$m-$relVersion$suffix", dest: artifactDir)
+                ant.zip(destfile: "$zipDir/$m-${relVersion}.zip", basedir: artifactDir)
+            }
+        }
+    }
+}
+
+// useful when re-populating artifactory/jcentral from a partial build failure
+task populateFromCentral(dependsOn: setupModules) {
+    doLast {
+        def groupId = apacheGroupId ? 'org/apache/groovy' : 'org/codehaus/groovy'
+        def prefix = "https://repo1.maven.org/maven2/$groupId"
         modules.each { m, suffixes ->
             println "Processing ${suffixes.size()} artifacts for $m"
             suffixes.each { suffix ->
