You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ie...@apache.org on 2020/06/20 07:19:45 UTC

[james-project] branch JAMES-3260-gradle-poc updated: JAMES-3260 #comment Added gradle config via gradle init

This is an automated email from the ASF dual-hosted git repository.

ieugen pushed a commit to branch JAMES-3260-gradle-poc
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/JAMES-3260-gradle-poc by this push:
     new 86cc32b  JAMES-3260 #comment Added gradle config via gradle init
86cc32b is described below

commit 86cc32b02e28fe76b194666036f5c14a2eb280f7
Author: Eugen Stan <ie...@apache.org>
AuthorDate: Sat Jun 20 10:19:07 2020 +0300

    JAMES-3260 #comment Added gradle config via gradle init
---
 .gitignore                                         |   4 +-
 backends-common/cassandra/build.gradle             |  34 ++
 backends-common/elasticsearch/build.gradle         |  29 ++
 backends-common/jpa/build.gradle                   |  18 +
 backends-common/rabbitmq/build.gradle              |  33 ++
 build.gradle                                       |  49 +++
 core/build.gradle                                  |  25 ++
 event-sourcing/event-sourcing-core/build.gradle    |  26 ++
 event-sourcing/event-sourcing-pojo/build.gradle    |  19 +
 event-sourcing/event-store-api/build.gradle        |  23 +
 event-sourcing/event-store-cassandra/build.gradle  |  30 ++
 event-sourcing/event-store-memory/build.gradle     |  25 ++
 examples/custom-listeners/build.gradle             |  19 +
 examples/custom-mailets/build.gradle               |  16 +
 gradle/wrapper/gradle-wrapper.jar                  | Bin 0 -> 58910 bytes
 gradle/wrapper/gradle-wrapper.properties           |   5 +
 gradlew                                            | 185 ++++++++
 gradlew.bat                                        | 104 +++++
 javax-mail-extension/build.gradle                  |  20 +
 json/build.gradle                                  |  24 ++
 mailbox/api/build.gradle                           |  35 ++
 mailbox/backup/build.gradle                        |  25 ++
 mailbox/cassandra/build.gradle                     |  45 ++
 mailbox/elasticsearch/build.gradle                 |  42 ++
 mailbox/event/event-cassandra/build.gradle         |  23 +
 mailbox/event/event-memory/build.gradle            |  24 ++
 mailbox/event/event-rabbitmq/build.gradle          |  33 ++
 mailbox/event/json/build.gradle                    |  25 ++
 mailbox/jpa/build.gradle                           |  33 ++
 mailbox/lucene/build.gradle                        |  32 ++
 mailbox/maildir/build.gradle                       |  29 ++
 mailbox/memory/build.gradle                        |  28 ++
 .../deleted-messages-vault-cassandra/build.gradle  |  25 ++
 mailbox/plugin/deleted-messages-vault/build.gradle |  35 ++
 .../plugin/quota-mailing-cassandra/build.gradle    |  36 ++
 mailbox/plugin/quota-mailing-memory/build.gradle   |  30 ++
 mailbox/plugin/quota-mailing/build.gradle          |  36 ++
 .../plugin/quota-search-elasticsearch/build.gradle |  34 ++
 mailbox/plugin/quota-search-scanning/build.gradle  |  26 ++
 mailbox/plugin/quota-search/build.gradle           |  22 +
 mailbox/plugin/spamassassin/build.gradle           |  25 ++
 mailbox/scanning-search/build.gradle               |  27 ++
 mailbox/spring/build.gradle                        |  35 ++
 mailbox/store/build.gradle                         |  39 ++
 mailbox/tika/build.gradle                          |  31 ++
 mailbox/tools/copier/build.gradle                  |  23 +
 mailbox/tools/indexer/build.gradle                 |  37 ++
 mailbox/tools/jpa-migrator/build.gradle            |  17 +
 mailbox/tools/quota-recompute/build.gradle         |  22 +
 mailet/ai/build.gradle                             |  19 +
 mailet/api/build.gradle                            |  26 ++
 mailet/base/build.gradle                           |  27 ++
 mailet/crypto/build.gradle                         |  22 +
 mailet/icalendar/build.gradle                      |  29 ++
 mailet/mailetdocs-maven-plugin/build.gradle        |  25 ++
 mailet/standard/build.gradle                       |  33 ++
 mailet/test/build.gradle                           |  24 ++
 mdn/build.gradle                                   |  25 ++
 metrics/metrics-api/build.gradle                   |  18 +
 metrics/metrics-dropwizard/build.gradle            |  25 ++
 metrics/metrics-logger/build.gradle                |  21 +
 metrics/metrics-tests/build.gradle                 |  23 +
 mpt/app/build.gradle                               |  23 +
 mpt/core/build.gradle                              |  25 ++
 mpt/impl/imap-mailbox/cassandra/build.gradle       |  27 ++
 mpt/impl/imap-mailbox/core/build.gradle            |  24 ++
 mpt/impl/imap-mailbox/cyrus/build.gradle           |  20 +
 mpt/impl/imap-mailbox/elasticsearch/build.gradle   |  28 ++
 mpt/impl/imap-mailbox/external-james/build.gradle  |  21 +
 mpt/impl/imap-mailbox/inmemory/build.gradle        |  21 +
 mpt/impl/imap-mailbox/jpa/build.gradle             |  25 ++
 mpt/impl/imap-mailbox/lucenesearch/build.gradle    |  26 ++
 mpt/impl/imap-mailbox/maildir/build.gradle         |  21 +
 mpt/impl/imap-mailbox/rabbitmq/build.gradle        |  27 ++
 mpt/impl/managesieve/cassandra/build.gradle        |  20 +
 mpt/impl/managesieve/core/build.gradle             |  23 +
 mpt/impl/managesieve/file/build.gradle             |  19 +
 .../cassandra-rabbitmq-object-storage/build.gradle |  29 ++
 mpt/impl/smtp/cassandra/build.gradle               |  24 ++
 mpt/impl/smtp/core/build.gradle                    |  24 ++
 mpt/mavenplugin/build.gradle                       |  21 +
 protocols/api/build.gradle                         |  22 +
 protocols/imap/build.gradle                        |  32 ++
 protocols/lmtp/build.gradle                        |  25 ++
 protocols/managesieve/build.gradle                 |  22 +
 protocols/netty/build.gradle                       |  22 +
 protocols/pop3/build.gradle                        |  22 +
 protocols/smtp/build.gradle                        |  29 ++
 server/app/build.gradle                            |  69 +++
 server/blob/blob-api/build.gradle                  |  26 ++
 server/blob/blob-cassandra/build.gradle            |  26 ++
 server/blob/blob-common/build.gradle               |  17 +
 server/blob/blob-deduplicating/build.gradle        |  26 ++
 server/blob/blob-export-api/build.gradle           |  19 +
 server/blob/blob-export-file/build.gradle          |  23 +
 server/blob/blob-memory/build.gradle               |  24 ++
 server/blob/blob-objectstorage/build.gradle        |  32 ++
 server/blob/blob-union/build.gradle                |  22 +
 server/blob/mail-store/build.gradle                |  23 +
 server/container/cli-integration/build.gradle      |  24 ++
 server/container/cli/build.gradle                  |  22 +
 server/container/core/build.gradle                 |  31 ++
 server/container/filesystem-api/build.gradle       |  19 +
 server/container/guice/activemq/build.gradle       |  18 +
 server/container/guice/blob-api-guice/build.gradle |  18 +
 .../container/guice/blob-export-guice/build.gradle |  24 ++
 .../container/guice/blob-memory-guice/build.gradle |  19 +
 .../guice/blob-objectstorage-guice/build.gradle    |  23 +
 .../container/guice/cassandra-guice/build.gradle   |  79 ++++
 .../guice/cassandra-ldap-guice/build.gradle        |  31 ++
 .../guice/cassandra-rabbitmq-guice/build.gradle    |  42 ++
 .../cassandra-rabbitmq-ldap-guice/build.gradle     |  31 ++
 server/container/guice/configuration/build.gradle  |  21 +
 .../guice/es-metric-reporter/build.gradle          |  23 +
 server/container/guice/guice-common/build.gradle   |  46 ++
 server/container/guice/guice-utils/build.gradle    |  24 ++
 server/container/guice/jmx/build.gradle            |  29 ++
 .../container/guice/jpa-common-guice/build.gradle  |  20 +
 server/container/guice/jpa-guice/build.gradle      |  51 +++
 .../container/guice/jpa-smtp-common/build.gradle   |  26 ++
 .../container/guice/jpa-smtp-mariadb/build.gradle  |  23 +
 server/container/guice/jpa-smtp/build.gradle       |  26 ++
 .../build.gradle                                   |  22 +
 .../guice/mailbox-plugin-spamassassin/build.gradle |  22 +
 server/container/guice/mailbox/build.gradle        |  26 ++
 server/container/guice/mailet/build.gradle         |  27 ++
 server/container/guice/memory-guice/build.gradle   |  59 +++
 server/container/guice/onami/build.gradle          |  18 +
 server/container/guice/protocols/imap/build.gradle |  19 +
 server/container/guice/protocols/jmap/build.gradle |  27 ++
 server/container/guice/protocols/lmtp/build.gradle |  19 +
 .../guice/protocols/managedsieve/build.gradle      |  20 +
 .../container/guice/protocols/netty/build.gradle   |  19 +
 server/container/guice/protocols/pop/build.gradle  |  19 +
 server/container/guice/protocols/smtp/build.gradle |  19 +
 .../guice/protocols/webadmin-data/build.gradle     |  19 +
 .../guice/protocols/webadmin-jmap/build.gradle     |  19 +
 .../guice/protocols/webadmin-mailbox/build.gradle  |  19 +
 .../protocols/webadmin-mailqueue/build.gradle      |  19 +
 .../protocols/webadmin-mailrepository/build.gradle |  19 +
 .../guice/protocols/webadmin-swagger/build.gradle  |  19 +
 .../guice/protocols/webadmin/build.gradle          |  20 +
 server/container/guice/rabbitmq/build.gradle       |  21 +
 server/container/guice/sieve-file/build.gradle     |  18 +
 server/container/guice/sieve-jpa/build.gradle      |  18 +
 .../custom-mailets-implementation/build.gradle     |  15 +
 .../guice/testing/custom-mailets/build.gradle      |  18 +
 .../guice/testing/dependency/build.gradle          |  12 +
 server/container/lifecycle-api/build.gradle        |  19 +
 server/container/mailbox-adapter/build.gradle      |  22 +
 server/container/mailbox-jmx/build.gradle          |  25 ++
 .../metrics/metrics-es-reporter/build.gradle       |  30 ++
 server/container/spring/build.gradle               |  46 ++
 server/container/util/build.gradle                 |  29 ++
 server/data/data-api/build.gradle                  |  22 +
 server/data/data-cassandra/build.gradle            |  38 ++
 server/data/data-file/build.gradle                 |  38 ++
 server/data/data-jdbc/build.gradle                 |  40 ++
 server/data/data-jmap-cassandra/build.gradle       |  33 ++
 server/data/data-jmap/build.gradle                 |  32 ++
 server/data/data-jpa/build.gradle                  |  34 ++
 server/data/data-ldap/build.gradle                 |  32 ++
 server/data/data-library/build.gradle              |  36 ++
 server/data/data-memory/build.gradle               |  29 ++
 server/dns-service/dnsservice-api/build.gradle     |  12 +
 server/dns-service/dnsservice-dnsjava/build.gradle |  30 ++
 server/dns-service/dnsservice-library/build.gradle |  22 +
 server/dns-service/dnsservice-test/build.gradle    |  18 +
 server/mailet/dkim/build.gradle                    |  23 +
 server/mailet/integration-testing/build.gradle     |  40 ++
 server/mailet/mailetcontainer-api/build.gradle     |  18 +
 server/mailet/mailetcontainer-camel/build.gradle   |  44 ++
 server/mailet/mailets/build.gradle                 |  62 +++
 server/mailet/mock-smtp-server/build.gradle        |  33 ++
 .../mailrepository/mailrepository-api/build.gradle |  19 +
 .../mailrepository-cassandra/build.gradle          |  25 ++
 .../mailrepository-memory/build.gradle             |  18 +
 server/protocols/fetchmail/build.gradle            |  30 ++
 .../build.gradle                                   |  46 ++
 .../build.gradle                                   |  41 ++
 .../build.gradle                                   |  39 ++
 .../build.gradle                                   |  40 ++
 server/protocols/jmap-draft/build.gradle           |  62 +++
 .../build.gradle                                   |  27 ++
 .../build.gradle                                   |  21 +
 .../build.gradle                                   |  19 +
 server/protocols/jmap-rfc-8621/build.gradle        |  36 ++
 server/protocols/jmap/build.gradle                 |  27 ++
 server/protocols/jwt/build.gradle                  |  26 ++
 server/protocols/protocols-imap4/build.gradle      |  30 ++
 server/protocols/protocols-library/build.gradle    |  30 ++
 server/protocols/protocols-lmtp/build.gradle       |  31 ++
 .../protocols/protocols-managesieve/build.gradle   |  28 ++
 server/protocols/protocols-pop3/build.gradle       |  40 ++
 server/protocols/protocols-smtp/build.gradle       |  54 +++
 .../build.gradle                                   |  25 ++
 .../memory-webadmin-integration-test/build.gradle  |  18 +
 .../webadmin-integration-test-common/build.gradle  |  39 ++
 .../webadmin/webadmin-cassandra-data/build.gradle  |  28 ++
 .../webadmin/webadmin-cassandra/build.gradle       |  27 ++
 .../protocols/webadmin/webadmin-core/build.gradle  |  41 ++
 .../protocols/webadmin/webadmin-data/build.gradle  |  36 ++
 .../protocols/webadmin/webadmin-jmap/build.gradle  |  33 ++
 .../build.gradle                                   |  39 ++
 .../webadmin/webadmin-mailbox/build.gradle         |  55 +++
 .../webadmin/webadmin-mailqueue/build.gradle       |  31 ++
 .../webadmin/webadmin-mailrepository/build.gradle  |  38 ++
 .../webadmin/webadmin-swagger/build.gradle         |  17 +
 server/queue/queue-activemq/build.gradle           |  34 ++
 server/queue/queue-api/build.gradle                |  25 ++
 server/queue/queue-file/build.gradle               |  26 ++
 server/queue/queue-jms/build.gradle                |  35 ++
 server/queue/queue-memory/build.gradle             |  23 +
 server/queue/queue-rabbitmq/build.gradle           |  51 +++
 server/task/task-api/build.gradle                  |  24 ++
 server/task/task-distributed/build.gradle          |  38 ++
 server/task/task-json/build.gradle                 |  24 ++
 server/task/task-memory/build.gradle               |  27 ++
 server/testing/build.gradle                        |  27 ++
 settings.gradle                                    | 473 +++++++++++++++++++++
 testing/base/build.gradle                          |  22 +
 third-party/linshare/build.gradle                  |  32 ++
 third-party/spamassassin/build.gradle              |  28 ++
 223 files changed, 6841 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 5da2825..91d9c69 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,6 @@ dockerfiles/run/**/keystore
 dockerfiles/run/**/glowroot
 .m2
 test-run.log
-build
\ No newline at end of file
+build
+
+.gradle
\ No newline at end of file
diff --git a/backends-common/cassandra/build.gradle b/backends-common/cassandra/build.gradle
new file mode 100644
index 0000000..3ad7a06
--- /dev/null
+++ b/backends-common/cassandra/build.gradle
@@ -0,0 +1,34 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-task-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.datastax.cassandra:cassandra-driver-core:3.7.2'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'net.javacrumbs.future-converter:future-converter-java8-guava:1.2.0'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':testing-base')
+    testImplementation 'commons-beanutils:commons-beanutils:1.9.4'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James Cassandra backend'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/backends-common/elasticsearch/build.gradle b/backends-common/elasticsearch/build.gradle
new file mode 100644
index 0000000..b237448
--- /dev/null
+++ b/backends-common/elasticsearch/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'io.github.openfeign:feign-core:10.3.0'
+    implementation 'io.github.openfeign:feign-slf4j:10.3.0'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.12.1'
+    implementation 'org.awaitility:awaitility:3.1.6'
+    implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/backends-common/jpa/build.gradle b/backends-common/jpa/build.gradle
new file mode 100644
index 0000000..63f326b
--- /dev/null
+++ b/backends-common/jpa/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.openjpa:openjpa:3.1.0'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.derby:derby:10.14.2.0'
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/backends-common/rabbitmq/build.gradle b/backends-common/rabbitmq/build.gradle
new file mode 100644
index 0000000..aa7a325
--- /dev/null
+++ b/backends-common/rabbitmq/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.rabbitmq:amqp-client:5.7.3'
+    implementation 'io.github.openfeign:feign-core:10.3.0'
+    implementation 'io.github.openfeign:feign-jackson:10.3.0'
+    implementation 'io.github.openfeign:feign-slf4j:10.3.0'
+    implementation 'io.projectreactor.rabbitmq:reactor-rabbitmq:1.4.1.RELEASE'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.apache.commons:commons-pool2:2.7.0'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James RabbitMQ backend'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..9f7c307
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,49 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+allprojects {
+    group = 'org.apache.james'
+    version = '3.6.0-SNAPSHOT'
+}
+
+subprojects {
+    apply plugin: 'java'
+    apply plugin: 'maven-publish'
+
+    repositories {
+        mavenLocal()
+        maven {
+            url = uri('https://jcenter.bintray.com')
+        }
+
+        maven {
+            url = uri('https://dl.bintray.com/netdava/maven')
+        }
+
+        maven {
+            url = uri('https://repository.apache.org/snapshots')
+        }
+    }
+
+    sourceCompatibility = '1.8'
+
+    configurations.all {
+    }
+
+    java {
+        withSourcesJar()
+    }
+
+    publishing {
+        publications {
+            maven(MavenPublication) {
+                from(components.java)
+            }
+        }
+    }
+
+    tasks.withType(JavaCompile) {
+        options.encoding = 'UTF-8'
+    }
+}
diff --git a/core/build.gradle b/core/build.gradle
new file mode 100644
index 0000000..bf3dfae
--- /dev/null
+++ b/core/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.activation:javax.activation:1.2.0'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'org.reactivestreams:reactive-streams:1.0.3'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Core Domain Objects'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/event-sourcing/event-sourcing-core/build.gradle b/event-sourcing/event-sourcing-core/build.gradle
new file mode 100644
index 0000000..d3c17f7
--- /dev/null
+++ b/event-sourcing/event-sourcing-core/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':event-sourcing:event-sourcing-event-store-api')
+    implementation project(':event-sourcing:event-sourcing-pojo')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'io.projectreactor:reactor-scala-extensions_2.13:0.5.1'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':event-sourcing:event-sourcing-pojo')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Event sourcing :: core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/event-sourcing/event-sourcing-pojo/build.gradle b/event-sourcing/event-sourcing-pojo/build.gradle
new file mode 100644
index 0000000..59636fb
--- /dev/null
+++ b/event-sourcing/event-sourcing-pojo/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Event sourcing :: pojo'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/event-sourcing/event-store-api/build.gradle b/event-sourcing/event-store-api/build.gradle
new file mode 100644
index 0000000..adeafa7
--- /dev/null
+++ b/event-sourcing/event-store-api/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':event-sourcing:event-sourcing-pojo')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'org.reactivestreams:reactive-streams:1.0.3'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':event-sourcing:event-sourcing-pojo')
+    testImplementation project(':testing-base')
+    testImplementation 'io.projectreactor:reactor-scala-extensions_2.13:0.5.1'
+}
+
+description = 'Apache James :: Event Sourcing :: Event Store :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/event-sourcing/event-store-cassandra/build.gradle b/event-sourcing/event-store-cassandra/build.gradle
new file mode 100644
index 0000000..13a4998
--- /dev/null
+++ b/event-sourcing/event-store-cassandra/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':event-sourcing:event-sourcing-event-store-api')
+    implementation project(':james-json')
+    implementation 'io.projectreactor:reactor-scala-extensions_2.13:0.5.1'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':event-sourcing:event-sourcing-core')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-api')
+    testImplementation project(':event-sourcing:event-sourcing-core')
+    testImplementation project(':event-sourcing:event-sourcing-pojo')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Event sourcing :: Event Store :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/event-sourcing/event-store-memory/build.gradle b/event-sourcing/event-store-memory/build.gradle
new file mode 100644
index 0000000..5d26ebb
--- /dev/null
+++ b/event-sourcing/event-store-memory/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':event-sourcing:event-sourcing-event-store-api')
+    implementation 'io.projectreactor:reactor-scala-extensions_2.13:0.5.1'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':event-sourcing:event-sourcing-core')
+    testImplementation project(':event-sourcing:event-sourcing-core')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-api')
+    testImplementation project(':event-sourcing:event-sourcing-pojo')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Event sourcing :: Event Store :: Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/examples/custom-listeners/build.gradle b/examples/custom-listeners/build.gradle
new file mode 100644
index 0000000..8ca1cae
--- /dev/null
+++ b/examples/custom-listeners/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/examples/custom-mailets/build.gradle b/examples/custom-mailets/build.gradle
new file mode 100644
index 0000000..31accb5
--- /dev/null
+++ b/examples/custom-mailets/build.gradle
@@ -0,0 +1,16 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..62d4c05
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..622ab64
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..fbd7c51
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=`expr $i + 1`
+    done
+    case $i in
+        0) set -- ;;
+        1) set -- "$args0" ;;
+        2) set -- "$args0" "$args1" ;;
+        3) set -- "$args0" "$args1" "$args2" ;;
+        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..a9f778a
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,104 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/javax-mail-extension/build.gradle b/javax-mail-extension/build.gradle
new file mode 100644
index 0000000..95b6617
--- /dev/null
+++ b/javax-mail-extension/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'javax.activation:javax.activation-api:1.2.0'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Java Mail Extension'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/json/build.gradle b/json/build.gradle
new file mode 100644
index 0000000..4f9fc06
--- /dev/null
+++ b/json/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+}
+
+description = 'Apache James :: Json serialization'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/api/build.gradle b/mailbox/api/build.gradle
new file mode 100644
index 0000000..6d5c7ca
--- /dev/null
+++ b/mailbox/api/build.gradle
@@ -0,0 +1,35 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-task-api')
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.ibm.icu:icu4j:64.2'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.apache.commons:commons-text:1.8'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/backup/build.gradle b/mailbox/backup/build.gradle
new file mode 100644
index 0000000..570fb22
--- /dev/null
+++ b/mailbox/backup/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-compress:1.19'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Mailbox :: Backup'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/cassandra/build.gradle b/mailbox/cassandra/build.gradle
new file mode 100644
index 0000000..0faa719
--- /dev/null
+++ b/mailbox/cassandra/build.gradle
@@ -0,0 +1,45 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-task-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    testImplementation project(':james-server:james-server-blob:blob-cassandra')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-cassandra')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'com.google.inject:guice:4.2.2'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/elasticsearch/build.gradle b/mailbox/elasticsearch/build.gradle
new file mode 100644
index 0000000..f7b918f
--- /dev/null
+++ b/mailbox/elasticsearch/build.gradle
@@ -0,0 +1,42 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-es')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tika')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tika')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: ElasticSearch'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/event/event-cassandra/build.gradle b/mailbox/event/event-cassandra/build.gradle
new file mode 100644
index 0000000..dc85fd2
--- /dev/null
+++ b/mailbox/event/event-cassandra/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-json')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':testing-base')
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Event :: In Cassandra implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/event/event-memory/build.gradle b/mailbox/event/event-memory/build.gradle
new file mode 100644
index 0000000..558025d
--- /dev/null
+++ b/mailbox/event/event-memory/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Event :: In VM implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/event/event-rabbitmq/build.gradle b/mailbox/event/event-rabbitmq/build.gradle
new file mode 100644
index 0000000..26ebc8d
--- /dev/null
+++ b/mailbox/event/event-rabbitmq/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-json')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':metrics:metrics-api')
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'io.projectreactor.rabbitmq:reactor-rabbitmq:1.4.1.RELEASE'
+    implementation 'org.apache.commons:commons-pool2:2.7.0'
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Event :: RabbitMQ implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/event/json/build.gradle b/mailbox/event/json/build.gradle
new file mode 100644
index 0000000..9a36aa1
--- /dev/null
+++ b/mailbox/event/json/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation 'com.beachape:enumeratum_2.13:1.5.13'
+    implementation 'com.typesafe.play:play-json_2.13:2.8.1'
+    implementation 'org.julienrf:play-json-derived-codecs_2.13:7.0.0'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+}
+
+description = 'Apache James :: Mailbox :: Event :: JSON'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/jpa/build.gradle b/mailbox/jpa/build.gradle
new file mode 100644
index 0000000..fb06227
--- /dev/null
+++ b/mailbox/jpa/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-jpa')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.jasypt:jasypt:1.9.3'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-jpa')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    testImplementation project(':james-server:james-server-data-jpa')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.derby:derby:10.14.2.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: JPA'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/lucene/build.gradle b/mailbox/lucene/build.gradle
new file mode 100644
index 0000000..c8d23b9
--- /dev/null
+++ b/mailbox/lucene/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.apache.lucene:lucene-analyzers:3.6.2'
+    implementation 'org.apache.lucene:lucene-core:3.6.2'
+    implementation 'org.apache.lucene:lucene-smartcn:3.6.2'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+}
+
+description = 'Apache James :: Mailbox :: Lucene Index'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/maildir/build.gradle b/mailbox/maildir/build.gradle
new file mode 100644
index 0000000..0879f08
--- /dev/null
+++ b/mailbox/maildir/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Maildir'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/memory/build.gradle b/mailbox/memory/build.gradle
new file mode 100644
index 0000000..511acc7
--- /dev/null
+++ b/mailbox/memory/build.gradle
@@ -0,0 +1,28 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: In Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/deleted-messages-vault-cassandra/build.gradle b/mailbox/plugin/deleted-messages-vault-cassandra/build.gradle
new file mode 100644
index 0000000..dbd2d91
--- /dev/null
+++ b/mailbox/plugin/deleted-messages-vault-cassandra/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Deleted Messages Vault :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/deleted-messages-vault/build.gradle b/mailbox/plugin/deleted-messages-vault/build.gradle
new file mode 100644
index 0000000..2d43d4a
--- /dev/null
+++ b/mailbox/plugin/deleted-messages-vault/build.gradle
@@ -0,0 +1,35 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':apache-james-mailbox:backup')
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-task-json')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-compress:1.19'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':apache-james-mailbox:backup')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Deleted Messages Vault'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/quota-mailing-cassandra/build.gradle b/mailbox/plugin/quota-mailing-cassandra/build.gradle
new file mode 100644
index 0000000..15b85c6
--- /dev/null
+++ b/mailbox/plugin/quota-mailing-cassandra/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-mailing')
+    implementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-mailing')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':event-sourcing:event-sourcing-core')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-api')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-core')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Quota Mailing :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/quota-mailing-memory/build.gradle b/mailbox/plugin/quota-mailing-memory/build.gradle
new file mode 100644
index 0000000..8659d11
--- /dev/null
+++ b/mailbox/plugin/quota-mailing-memory/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-mailing')
+    implementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-mailing')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-mailet:apache-mailet-base')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':event-sourcing:event-sourcing-core')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-api')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':james-server:james-server-core')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Quota Mailing :: Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/quota-mailing/build.gradle b/mailbox/plugin/quota-mailing/build.gradle
new file mode 100644
index 0000000..85e0918
--- /dev/null
+++ b/mailbox/plugin/quota-mailing/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':event-sourcing:event-sourcing-core')
+    implementation project(':event-sourcing:event-sourcing-event-store-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.github.spullara.mustache.java:compiler:0.9.6'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-core')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Quota Mailing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/quota-search-elasticsearch/build.gradle b/mailbox/plugin/quota-search-elasticsearch/build.gradle
new file mode 100644
index 0000000..c7dbfad
--- /dev/null
+++ b/mailbox/plugin/quota-search-elasticsearch/build.gradle
@@ -0,0 +1,34 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-es')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-search')
+    implementation project(':james-server:james-server-data-api')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-search')
+    testImplementation project(':james-core')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.junit.jupiter:junit-jupiter-migrationsupport:5.5.1'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Quota Search :: ElasticSearch'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/quota-search-scanning/build.gradle b/mailbox/plugin/quota-search-scanning/build.gradle
new file mode 100644
index 0000000..9e09a8e
--- /dev/null
+++ b/mailbox/plugin/quota-search-scanning/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-search')
+    implementation project(':james-server:james-server-data-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-search')
+    testImplementation project(':james-core')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Quota Search :: Scanning'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/quota-search/build.gradle b/mailbox/plugin/quota-search/build.gradle
new file mode 100644
index 0000000..fcb6bc0
--- /dev/null
+++ b/mailbox/plugin/quota-search/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-core')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-core')
+    testImplementation project(':james-server:james-server-data-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: Quota Search :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/plugin/spamassassin/build.gradle b/mailbox/plugin/spamassassin/build.gradle
new file mode 100644
index 0000000..487ed53
--- /dev/null
+++ b/mailbox/plugin/spamassassin/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Plugin :: SpamAssassin'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/scanning-search/build.gradle b/mailbox/scanning-search/build.gradle
new file mode 100644
index 0000000..44da1a8
--- /dev/null
+++ b/mailbox/scanning-search/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+}
+
+description = 'Apache James :: Mailbox :: Scanning'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/spring/build.gradle b/mailbox/spring/build.gradle
new file mode 100644
index 0000000..213bbd9
--- /dev/null
+++ b/mailbox/spring/build.gradle
@@ -0,0 +1,35 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-jpa')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-lucene')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-maildir')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-copier')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-indexer')
+    implementation 'commons-dbcp:commons-dbcp:1.4'
+    implementation 'org.apache.derby:derby:10.14.2.0'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.springframework:spring-beans:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-context:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-core:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-orm:4.3.25.RELEASE'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Mailbox :: Spring'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/store/build.gradle b/mailbox/store/build.gradle
new file mode 100644
index 0000000..4dfb4e7
--- /dev/null
+++ b/mailbox/store/build.gradle
@@ -0,0 +1,39 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-james-utils:0.8.3'
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.jsoup:jsoup:1.13.1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':james-mdn')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Store Framework'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/tika/build.gradle b/mailbox/tika/build.gradle
new file mode 100644
index 0000000..c07cc27
--- /dev/null
+++ b/mailbox/tika/build.gradle
@@ -0,0 +1,31 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.apache.httpcomponents:fluent-hc:4.5.9'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Tika'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/tools/copier/build.gradle b/mailbox/tools/copier/build.gradle
new file mode 100644
index 0000000..7a782fe
--- /dev/null
+++ b/mailbox/tools/copier/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Mailbox :: Tools :: Copier'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/tools/indexer/build.gradle b/mailbox/tools/indexer/build.gradle
new file mode 100644
index 0000000..9b34b0e
--- /dev/null
+++ b/mailbox/tools/indexer/build.gradle
@@ -0,0 +1,37 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':james-server:james-server-task-json')
+    implementation 'io.vavr:vavr:0.9.0'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-server:james-server-blob:blob-cassandra')
+    testImplementation project(':james-json')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    testImplementation 'com.google.inject:guice:4.2.2'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Mailbox :: Tools :: Indexer'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/tools/jpa-migrator/build.gradle b/mailbox/tools/jpa-migrator/build.gradle
new file mode 100644
index 0000000..0843f71
--- /dev/null
+++ b/mailbox/tools/jpa-migrator/build.gradle
@@ -0,0 +1,17 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-jpa')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Mailbox :: Tools :: JPA migrator'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailbox/tools/quota-recompute/build.gradle b/mailbox/tools/quota-recompute/build.gradle
new file mode 100644
index 0000000..3b881c8
--- /dev/null
+++ b/mailbox/tools/quota-recompute/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-task-json')
+    testImplementation project(':james-json')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Mailbox :: Tools :: Quota recompute'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/ai/build.gradle b/mailet/ai/build.gradle
new file mode 100644
index 0000000..6afe1f8
--- /dev/null
+++ b/mailet/ai/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: AI Mailets'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/api/build.gradle b/mailet/api/build.gradle
new file mode 100644
index 0000000..5d5e974
--- /dev/null
+++ b/mailet/api/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'de.ruedigermoeller:fst:2.57'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Mailet API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/base/build.gradle b/mailet/base/build.gradle
new file mode 100644
index 0000000..3cdd73e
--- /dev/null
+++ b/mailet/base/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation project(':javax-mail-extension')
+    implementation project(':james-mdn')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Basic Mailet Toolkit'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/crypto/build.gradle b/mailet/crypto/build.gradle
new file mode 100644
index 0000000..f865283
--- /dev/null
+++ b/mailet/crypto/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':james-server:james-server-data-api')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.bouncycastle:bcmail-jdk15on:1.62'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Crypto Mailets'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/icalendar/build.gradle b/mailet/icalendar/build.gradle
new file mode 100644
index 0000000..4e06c6b
--- /dev/null
+++ b/mailet/icalendar/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.mnode.ical4j:ical4j:3.0.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':testing-base')
+    testImplementation 'commons-io:commons-io:2.6'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+}
+
+description = 'Apache James :: ICalendar Mailets'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/mailetdocs-maven-plugin/build.gradle b/mailet/mailetdocs-maven-plugin/build.gradle
new file mode 100644
index 0000000..8dbd5df
--- /dev/null
+++ b/mailet/mailetdocs-maven-plugin/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.thoughtworks.qdox:qdox:2.0-M10'
+    implementation 'org.apache.maven:maven-plugin-api:3.6.1'
+    implementation 'org.apache.maven.artifact:maven-artifact:3.0-alpha-1'
+    implementation 'org.apache.maven.reporting:maven-reporting-api:3.0'
+    implementation 'org.apache.maven.reporting:maven-reporting-impl:3.0.0'
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    compileOnly 'org.apache.maven.plugin-tools:maven-plugin-annotations:3.6.0'
+}
+
+description = 'Apache James :: Mailetdocs Maven Plugin'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/standard/build.gradle b/mailet/standard/build.gradle
new file mode 100644
index 0000000..0313a23
--- /dev/null
+++ b/mailet/standard/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation project(':james-server:james-server-util')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.rabbitmq:amqp-client:5.7.3'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.apache.httpcomponents:httpclient:4.5.10'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Standard Mailets'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mailet/test/build.gradle b/mailet/test/build.gradle
new file mode 100644
index 0000000..983e14a
--- /dev/null
+++ b/mailet/test/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-api')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Test helpers for Mailet'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mdn/build.gradle b/mdn/build.gradle
new file mode 100644
index 0000000..cfb68b3
--- /dev/null
+++ b/mdn/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation project(':james-server:james-server-util')
+    implementation project(':javax-mail-extension')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.activation:activation:1.1.1'
+    implementation 'javax.activation:javax.activation-api:1.2.0'
+    implementation 'org.parboiled:parboiled_2.13:2.2.0'
+    testImplementation project(':testing-base')
+    testImplementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+}
+
+description = 'Apache James :: MDN'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/metrics/metrics-api/build.gradle b/metrics/metrics-api/build.gradle
new file mode 100644
index 0000000..b0b07d6
--- /dev/null
+++ b/metrics/metrics-api/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.reactivestreams:reactive-streams:1.0.3'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Metrics :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/metrics/metrics-dropwizard/build.gradle b/metrics/metrics-dropwizard/build.gradle
new file mode 100644
index 0000000..a816f30
--- /dev/null
+++ b/metrics/metrics-dropwizard/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':metrics:metrics-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation 'io.dropwizard.metrics:metrics-core:4.1.0'
+    implementation 'io.dropwizard.metrics:metrics-jmx:4.1.0'
+    implementation 'io.dropwizard.metrics:metrics-jvm:4.1.0'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    testImplementation project(':metrics:metrics-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Metrics :: Dropwizard'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/metrics/metrics-logger/build.gradle b/metrics/metrics-logger/build.gradle
new file mode 100644
index 0000000..f6a0c5a
--- /dev/null
+++ b/metrics/metrics-logger/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':metrics:metrics-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Metrics :: Logger'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/metrics/metrics-tests/build.gradle b/metrics/metrics-tests/build.gradle
new file mode 100644
index 0000000..2c72c64
--- /dev/null
+++ b/metrics/metrics-tests/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':metrics:metrics-api')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+}
+
+description = 'Apache James :: Metrics :: Tests'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/app/build.gradle b/mpt/app/build.gradle
new file mode 100644
index 0000000..b643271
--- /dev/null
+++ b/mpt/app/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation project(':testing-base')
+    implementation 'commons-cli:commons-cli:1.4'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.25'
+}
+
+description = 'Apache James MPT Application'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
+
+java {
+    withJavadocJar()
+}
diff --git a/mpt/core/build.gradle b/mpt/core/build.gradle
new file mode 100644
index 0000000..8b56ea5
--- /dev/null
+++ b/mpt/core/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':testing-base')
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.awaitility:awaitility:3.1.6'
+    implementation 'org.slf4j:slf4j-api:1.7.25'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James MPT Core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
+
+java {
+    withJavadocJar()
+}
diff --git a/mpt/impl/imap-mailbox/cassandra/build.gradle b/mpt/impl/imap-mailbox/cassandra/build.gradle
new file mode 100644
index 0000000..b70691c
--- /dev/null
+++ b/mpt/impl/imap-mailbox/cassandra/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    implementation project(':james-server:james-server-blob:blob-cassandra')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James MPT Imap Mailbox - Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/core/build.gradle b/mpt/impl/imap-mailbox/core/build.gradle
new file mode 100644
index 0000000..276173f
--- /dev/null
+++ b/mpt/impl/imap-mailbox/core/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation project(':james-server:james-server-data-memory')
+    implementation project(':james-server:james-server-mailbox-adapter')
+    implementation project(':metrics:metrics-logger')
+    implementation project(':testing-base')
+    implementation project(':protocols:protocols-imap')
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.25'
+    implementation 'org.slf4j:slf4j-api:1.7.25'
+}
+
+description = 'Apache James MPT Imap Mailbox Core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/cyrus/build.gradle b/mpt/impl/imap-mailbox/cyrus/build.gradle
new file mode 100644
index 0000000..9f3f73f
--- /dev/null
+++ b/mpt/impl/imap-mailbox/cyrus/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.awaitility:awaitility:3.1.6'
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'com.spotify:docker-client:8.16.0'
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT Imap Mailbox - Cyrus'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/elasticsearch/build.gradle b/mpt/impl/imap-mailbox/elasticsearch/build.gradle
new file mode 100644
index 0000000..57ddb02
--- /dev/null
+++ b/mpt/impl/imap-mailbox/elasticsearch/build.gradle
@@ -0,0 +1,28 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-es')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT Imap Mailbox - ElasticSearch'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/external-james/build.gradle b/mpt/impl/imap-mailbox/external-james/build.gradle
new file mode 100644
index 0000000..69c0318
--- /dev/null
+++ b/mpt/impl/imap-mailbox/external-james/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation 'ch.qos.logback:logback-classic:1.2.3'
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    testImplementation project(':james-server:james-server-testing')
+}
+
+description = 'Apache James MPT Imap Mailbox - External James'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/inmemory/build.gradle b/mpt/impl/imap-mailbox/inmemory/build.gradle
new file mode 100644
index 0000000..8637206
--- /dev/null
+++ b/mpt/impl/imap-mailbox/inmemory/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT Imap Mailbox - InMemory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/jpa/build.gradle b/mpt/impl/imap-mailbox/jpa/build.gradle
new file mode 100644
index 0000000..381b53d
--- /dev/null
+++ b/mpt/impl/imap-mailbox/jpa/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':james-backends-common:apache-james-backends-jpa')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-jpa')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-jpa')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.derby:derby:10.14.2.0'
+}
+
+description = 'Apache James MPT Imap Mailbox - JPA'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/lucenesearch/build.gradle b/mpt/impl/imap-mailbox/lucenesearch/build.gradle
new file mode 100644
index 0000000..62fdce0
--- /dev/null
+++ b/mpt/impl/imap-mailbox/lucenesearch/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-lucene')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-lucene')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT Imap Mailbox - LuceneSearch'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/maildir/build.gradle b/mpt/impl/imap-mailbox/maildir/build.gradle
new file mode 100644
index 0000000..61872aa
--- /dev/null
+++ b/mpt/impl/imap-mailbox/maildir/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-maildir')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT Imap Mailbox - Maildir'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/imap-mailbox/rabbitmq/build.gradle b/mpt/impl/imap-mailbox/rabbitmq/build.gradle
new file mode 100644
index 0000000..acab449
--- /dev/null
+++ b/mpt/impl/imap-mailbox/rabbitmq/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-rabbitmq')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James MPT Imap Mailbox - RabbitMQ EventBus'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/managesieve/cassandra/build.gradle b/mpt/impl/managesieve/cassandra/build.gradle
new file mode 100644
index 0000000..4911d05
--- /dev/null
+++ b/mpt/impl/managesieve/cassandra/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-core')
+    implementation project(':james-server:james-server-data-cassandra')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT ManageSieve Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/managesieve/core/build.gradle b/mpt/impl/managesieve/core/build.gradle
new file mode 100644
index 0000000..2bfa864
--- /dev/null
+++ b/mpt/impl/managesieve/core/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation 'org.junit.jupiter:junit-jupiter-engine:5.5.1'
+    implementation 'org.junit.platform:junit-platform-launcher:1.5.1'
+    implementation 'org.junit.vintage:junit-vintage-engine:5.5.1'
+    implementation project(':protocols:protocols-managesieve')
+    implementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT ManageSieve Core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/managesieve/file/build.gradle b/mpt/impl/managesieve/file/build.gradle
new file mode 100644
index 0000000..22fc698
--- /dev/null
+++ b/mpt/impl/managesieve/file/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-core')
+    implementation project(':james-server:james-server-data-file')
+    implementation project(':james-server:james-server-data-memory')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT ManageSieve File'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/build.gradle b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/build.gradle
new file mode 100644
index 0000000..0dae742
--- /dev/null
+++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-core')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT SMTP Cassandra RabbitMQ Object Storage'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/smtp/cassandra/build.gradle b/mpt/impl/smtp/cassandra/build.gradle
new file mode 100644
index 0000000..6339a8b
--- /dev/null
+++ b/mpt/impl/smtp/cassandra/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    implementation 'com.google.guava:guava:25.1-jre'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-core')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT SMTP Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/impl/smtp/core/build.gradle b/mpt/impl/smtp/core/build.gradle
new file mode 100644
index 0000000..58586e8
--- /dev/null
+++ b/mpt/impl/smtp/core/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-dnsservice-test')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    implementation project(':james-server:james-server-testing')
+    implementation 'io.rest-assured:rest-assured:4.0.0'
+    implementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James MPT SMTP Core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/mpt/mavenplugin/build.gradle b/mpt/mavenplugin/build.gradle
new file mode 100644
index 0000000..14f9462
--- /dev/null
+++ b/mpt/mavenplugin/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mpt:apache-james-mpt-core')
+    implementation 'org.apache.maven:maven-plugin-api:3.6.1'
+}
+
+description = 'Apache James MPT Maven2 Plugin'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
+
+java {
+    withJavadocJar()
+}
diff --git a/protocols/api/build.gradle b/protocols/api/build.gradle
new file mode 100644
index 0000000..34f4ed8
--- /dev/null
+++ b/protocols/api/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/protocols/imap/build.gradle b/protocols/imap/build.gradle
new file mode 100644
index 0000000..184046e
--- /dev/null
+++ b/protocols/imap/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation project(':protocols:protocols-api')
+    implementation 'com.beetstra.jutf7:jutf7:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: IMAP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/protocols/lmtp/build.gradle b/protocols/lmtp/build.gradle
new file mode 100644
index 0000000..ee563f0
--- /dev/null
+++ b/protocols/lmtp/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':protocols:protocols-api')
+    implementation project(':protocols:protocols-smtp')
+    implementation 'javax.inject:javax.inject:1'
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':protocols:protocols-api')
+    testImplementation project(':protocols:protocols-netty')
+    testImplementation project(':protocols:protocols-smtp')
+    testImplementation project(':testing-base')
+    testImplementation 'commons-net:commons-net:3.6'
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: LMTP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/protocols/managesieve/build.gradle b/protocols/managesieve/build.gradle
new file mode 100644
index 0000000..fac2578
--- /dev/null
+++ b/protocols/managesieve/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.apache.james:apache-jsieve-core:0.7'
+    implementation project(':james-server:james-server-data-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'javax.inject:javax.inject:1'
+    testImplementation project(':testing-base')
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: ManageSieve'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/protocols/netty/build.gradle b/protocols/netty/build.gradle
new file mode 100644
index 0000000..4ad5347
--- /dev/null
+++ b/protocols/netty/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-util')
+    implementation project(':protocols:protocols-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.netty:netty:3.10.6.Final'
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: Netty Implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/protocols/pop3/build.gradle b/protocols/pop3/build.gradle
new file mode 100644
index 0000000..4ddbeec
--- /dev/null
+++ b/protocols/pop3/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':protocols:protocols-api')
+    testImplementation project(':protocols:protocols-api')
+    testImplementation project(':protocols:protocols-netty')
+    testImplementation project(':testing-base')
+    testImplementation 'commons-net:commons-net:3.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: POP3'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/protocols/smtp/build.gradle b/protocols/smtp/build.gradle
new file mode 100644
index 0000000..d7725a2
--- /dev/null
+++ b/protocols/smtp/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation project(':protocols:protocols-api')
+    implementation project(':protocols:protocols-netty')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.inject:javax.inject:1'
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':protocols:protocols-api')
+    testImplementation project(':testing-base')
+    testImplementation 'commons-net:commons-net:3.6'
+}
+
+group = 'org.apache.james.protocols'
+description = 'Apache James :: Protocols :: SMTP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/app/build.gradle b/server/app/build.gradle
new file mode 100644
index 0000000..0c09b6d
--- /dev/null
+++ b/server/app/build.gradle
@@ -0,0 +1,69 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-cli')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-dnsservice-library')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-mailetcontainer-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-spring')
+    implementation project(':james-server:james-server-task-memory')
+    implementation project(':metrics:metrics-api')
+    implementation project(':metrics:metrics-dropwizard')
+    implementation project(':metrics:metrics-logger')
+    implementation 'commons-daemon:commons-daemon:1.2.0'
+    implementation project(':protocols:protocols-managesieve')
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    runtimeOnly project(':apache-james-mailbox:apache-james-mailbox-jpa')
+    runtimeOnly project(':apache-james-mailbox:apache-james-mailbox-lucene')
+    runtimeOnly project(':apache-james-mailbox:apache-james-mailbox-memory')
+    runtimeOnly project(':apache-james-mailbox:apache-james-mailbox-spring')
+    runtimeOnly project(':james-server:james-server-data-file')
+    runtimeOnly project(':james-server:james-server-data-jdbc')
+    runtimeOnly project(':james-server:james-server-data-jpa')
+    runtimeOnly project(':james-server:james-server-data-ldap')
+    runtimeOnly project(':james-server:james-server-data-library')
+    runtimeOnly project(':james-server:james-server-dnsservice-api')
+    runtimeOnly project(':james-server:james-server-dnsservice-dnsjava')
+    runtimeOnly project(':james-server:james-server-fetchmail')
+    runtimeOnly project(':james-server:james-server-mailbox-adapter')
+    runtimeOnly project(':james-server:james-server-mailetcontainer-camel')
+    runtimeOnly project(':james-server:james-server-mailet-dkim')
+    runtimeOnly project(':james-server:james-server-mailets')
+    runtimeOnly project(':james-server:james-server-protocols-imap4')
+    runtimeOnly project(':james-server:james-server-protocols-library')
+    runtimeOnly project(':james-server:james-server-protocols-lmtp')
+    runtimeOnly project(':james-server:james-server-protocols-managesieve')
+    runtimeOnly project(':james-server:james-server-protocols-pop3')
+    runtimeOnly project(':james-server:james-server-protocols-smtp')
+    runtimeOnly project(':james-server:james-server-queue-activemq')
+    runtimeOnly project(':james-server:james-server-queue-file')
+    runtimeOnly project(':james-server:james-server-queue-jms')
+    runtimeOnly project(':james-server:james-server-util')
+    runtimeOnly 'org.apache.camel:camel-core:2.24.1'
+    runtimeOnly 'org.apache.camel:camel-spring:2.24.1'
+    runtimeOnly 'org.apache.derby:derby:10.14.2.0'
+    runtimeOnly project(':protocols:protocols-imap')
+    runtimeOnly 'org.apache.xbean:xbean-spring:4.9'
+    runtimeOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.13.1'
+    runtimeOnly 'org.slf4j:jcl-over-slf4j:1.7.27'
+    runtimeOnly 'org.springframework:spring-jdbc:4.3.25.RELEASE'
+    runtimeOnly 'org.springframework:spring-jms:4.3.25.RELEASE'
+    runtimeOnly 'org.springframework:spring-orm:4.3.25.RELEASE'
+    runtimeOnly 'org.springframework:spring-tx:4.3.25.RELEASE'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: App'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-api/build.gradle b/server/blob/blob-api/build.gradle
new file mode 100644
index 0000000..9cdecf1
--- /dev/null
+++ b/server/blob/blob-api/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.reactivestreams:reactive-streams:1.0.3'
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'commons-io:commons-io:2.6'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Blob :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-cassandra/build.gradle b/server/blob/blob-cassandra/build.gradle
new file mode 100644
index 0000000..3f278fd
--- /dev/null
+++ b/server/blob/blob-cassandra/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Blob :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-common/build.gradle b/server/blob/blob-common/build.gradle
new file mode 100644
index 0000000..2c5bc9b
--- /dev/null
+++ b/server/blob/blob-common/build.gradle
@@ -0,0 +1,17 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+}
+
+description = 'Apache James :: Server :: Blob :: Common'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-deduplicating/build.gradle b/server/blob/blob-deduplicating/build.gradle
new file mode 100644
index 0000000..d743509
--- /dev/null
+++ b/server/blob/blob-deduplicating/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.scalacheck:scalacheck_2.13:1.14.3'
+    testImplementation 'org.scalactic:scalactic_2.13:3.1.1'
+    testImplementation 'org.scalatest:scalatest_2.13:3.1.1'
+}
+
+description = 'Apache James :: Server :: Blob :: Deduplicating Blob Storage'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-export-api/build.gradle b/server/blob/blob-export-api/build.gradle
new file mode 100644
index 0000000..57ec813
--- /dev/null
+++ b/server/blob/blob-export-api/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-core')
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Blob :: Export :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-export-file/build.gradle b/server/blob/blob-export-file/build.gradle
new file mode 100644
index 0000000..952d7a7
--- /dev/null
+++ b/server/blob/blob-export-file/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-export-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Blob :: Export :: File implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-memory/build.gradle b/server/blob/blob-memory/build.gradle
new file mode 100644
index 0000000..48e17d8
--- /dev/null
+++ b/server/blob/blob-memory/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Blob :: Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-objectstorage/build.gradle b/server/blob/blob-objectstorage/build.gradle
new file mode 100644
index 0000000..e144ed1
--- /dev/null
+++ b/server/blob/blob-objectstorage/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.amazonaws:aws-java-sdk-s3:1.11.608'
+    implementation 'com.google.crypto.tink:tink:1.2.2'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.jclouds.api:openstack-swift:2.1.2'
+    implementation 'org.apache.jclouds.api:s3:2.1.2'
+    implementation 'org.apache.jclouds.driver:jclouds-slf4j:2.1.2'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Blob :: Object storage'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/blob-union/build.gradle b/server/blob/blob-union/build.gradle
new file mode 100644
index 0000000..60468a3
--- /dev/null
+++ b/server/blob/blob-union/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Blob :: Union Blob Storage'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/blob/mail-store/build.gradle b/server/blob/mail-store/build.gradle
new file mode 100644
index 0000000..b00f901
--- /dev/null
+++ b/server/blob/mail-store/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-blob:blob-common')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':james-core')
+    testImplementation project(':testing-base')
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Blob :: Mail store'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/cli-integration/build.gradle b/server/container/cli-integration/build.gradle
new file mode 100644
index 0000000..0aa0160
--- /dev/null
+++ b/server/container/cli-integration/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':james-server:james-server-cli')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':james-server:james-server-task-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Cli :: Integration'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/cli/build.gradle b/server/container/cli/build.gradle
new file mode 100644
index 0000000..5cec590
--- /dev/null
+++ b/server/container/cli/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-mailbox-jmx')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'commons-cli:commons-cli:1.4'
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Client'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/core/build.gradle b/server/container/core/build.gradle
new file mode 100644
index 0000000..4fab70e
--- /dev/null
+++ b/server/container/core/build.gradle
@@ -0,0 +1,31 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-beanutils:commons-beanutils:1.9.4'
+    implementation 'commons-io:commons-io:2.6'
+    testImplementation project(':apache-mailet:apache-mailet-api')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':testing-base')
+    testImplementation 'com.sparkjava:spark-core:2.9.1'
+    testImplementation 'pl.pragmatists:JUnitParams:1.1.1'
+    compileOnly 'javax.activation:activation:1.1.1'
+}
+
+description = 'Apache James :: Server :: Core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/filesystem-api/build.gradle b/server/container/filesystem-api/build.gradle
new file mode 100644
index 0000000..94b11b7
--- /dev/null
+++ b/server/container/filesystem-api/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'commons-io:commons-io:2.6'
+    testImplementation project(':testing-base')
+    testImplementation 'com.sparkjava:spark-core:2.9.1'
+    testImplementation 'pl.pragmatists:JUnitParams:1.1.1'
+}
+
+description = 'Apache James :: Server :: Filesystem API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/activemq/build.gradle b/server/container/guice/activemq/build.gradle
new file mode 100644
index 0000000..c11f05f
--- /dev/null
+++ b/server/container/guice/activemq/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-queue-activemq')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: ActiveMQ'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/blob-api-guice/build.gradle b/server/container/guice/blob-api-guice/build.gradle
new file mode 100644
index 0000000..9b91c95
--- /dev/null
+++ b/server/container/guice/blob-api-guice/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Blob Store API - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/blob-export-guice/build.gradle b/server/container/guice/blob-export-guice/build.gradle
new file mode 100644
index 0000000..f2d13bf
--- /dev/null
+++ b/server/container/guice/blob-export-guice/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':third-party:apache-james-linshare')
+    implementation project(':james-server:james-server-guice:blob-api-guice')
+    implementation project(':james-server:james-server-blob:blob-export-api')
+    implementation project(':james-server:james-server-blob:blob-export-file')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    testImplementation project(':third-party:apache-james-linshare')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Blob Exporting Mechanisms - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/blob-memory-guice/build.gradle b/server/container/guice/blob-memory-guice/build.gradle
new file mode 100644
index 0000000..8110c46
--- /dev/null
+++ b/server/container/guice/blob-memory-guice/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-blob:blob-memory')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Blob Memory - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/blob-objectstorage-guice/build.gradle b/server/container/guice/blob-objectstorage-guice/build.gradle
new file mode 100644
index 0000000..e47eae4
--- /dev/null
+++ b/server/container/guice/blob-objectstorage-guice/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:blob-api-guice')
+    implementation project(':james-server:james-server-blob:blob-objectstorage')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Blob Store in object storage - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/cassandra-guice/build.gradle b/server/container/guice/cassandra-guice/build.gradle
new file mode 100644
index 0000000..57c7710
--- /dev/null
+++ b/server/container/guice/cassandra-guice/build.gradle
@@ -0,0 +1,79 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-cassandra')
+    implementation project(':james-server:james-server-guice:james-server-mailbox-plugin-deleted-messages-vault-guice')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-search-elasticsearch')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tika')
+    implementation project(':apache-mailet:apache-mailet-icalendar')
+    implementation project(':james-server:james-server-guice:blob-api-guice')
+    implementation project(':james-server:james-server-blob:blob-cassandra')
+    implementation project(':james-server:james-server-guice:blob-export-guice')
+    implementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    implementation project(':james-server:james-server-data-cassandra')
+    implementation project(':james-server:james-server-data-jmap-cassandra')
+    implementation project(':james-server:james-server-guice:james-server-guice-activemq')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailet')
+    implementation project(':james-server:james-server-guice:james-server-guice-es-resporter')
+    implementation project(':james-server:james-server-guice:james-server-guice-imap')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmx')
+    implementation project(':james-server:james-server-guice:james-server-guice-lmtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox-plugin-spamassassin')
+    implementation project(':james-server:james-server-guice:james-server-guice-managedsieve')
+    implementation project(':james-server:james-server-guice:james-server-guice-pop')
+    implementation project(':james-server:james-server-guice:james-server-guice-rabbitmq')
+    implementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-data')
+    implementation project(':james-server:james-server-webadmin-cassandra')
+    implementation project(':james-server:james-server-webadmin-cassandra-data')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-jmap')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailqueue')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailrepository')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-swagger')
+    implementation project(':james-server:james-server-mailbox-adapter')
+    implementation project(':james-server:james-server-mailets')
+    implementation project(':james-server:james-server-mailrepository-cassandra')
+    implementation project(':james-server:james-server-util')
+    implementation project(':james-server:metrics-es-reporter')
+    implementation project(':apache-james-mailbox:quota-mailing-cassandra')
+    implementation 'ch.qos.logback:logback-classic:1.2.3'
+    implementation 'com.linagora:logback-elasticsearch-appender:1.8.0'
+    implementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tika')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Cassandra - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/cassandra-ldap-guice/build.gradle b/server/container/guice/cassandra-ldap-guice/build.gradle
new file mode 100644
index 0000000..d7b0cb9
--- /dev/null
+++ b/server/container/guice/cassandra-ldap-guice/build.gradle
@@ -0,0 +1,31 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    implementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    implementation project(':james-server:james-server-data-ldap')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-data-ldap')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Cassandra/Ldap - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/build.gradle b/server/container/guice/cassandra-rabbitmq-guice/build.gradle
new file mode 100644
index 0000000..7e4f2f8
--- /dev/null
+++ b/server/container/guice/cassandra-rabbitmq-guice/build.gradle
@@ -0,0 +1,42 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-rabbitmq')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    implementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    implementation project(':james-server:james-server-blob:blob-union')
+    implementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    implementation project(':james-server:james-server-task-distributed')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tika')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Cassandra with RabbitMQ - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/build.gradle b/server/container/guice/cassandra-rabbitmq-ldap-guice/build.gradle
new file mode 100644
index 0000000..835d6e3
--- /dev/null
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/build.gradle
@@ -0,0 +1,31 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-cassandra-ldap-guice')
+    implementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    implementation project(':james-server:james-server-guice:james-server-guice-rabbitmq')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-ldap-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-data-ldap')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Cassandra/Ldap with RabbitMQ - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/configuration/build.gradle b/server/container/guice/configuration/build.gradle
new file mode 100644
index 0000000..4a56181
--- /dev/null
+++ b/server/container/guice/configuration/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    testImplementation project(':testing-base')
+    testImplementation 'com.github.stefanbirkner:system-rules:1.19.0'
+}
+
+description = 'Apache James :: Server :: Guice :: Configuration'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/es-metric-reporter/build.gradle b/server/container/guice/es-metric-reporter/build.gradle
new file mode 100644
index 0000000..c9f726f
--- /dev/null
+++ b/server/container/guice/es-metric-reporter/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:metrics-es-reporter')
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: ES metric reporter'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/guice-common/build.gradle b/server/container/guice/guice-common/build.gradle
new file mode 100644
index 0000000..a8ef56c
--- /dev/null
+++ b/server/container/guice/guice-common/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-memory')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-dnsservice-dnsjava')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailet')
+    implementation project(':james-server:james-server-guice:james-server-guice-netty')
+    implementation project(':james-server:james-server-mailrepository-memory')
+    implementation project(':james-server:james-server-guice:james-server-onami')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-task-memory')
+    implementation project(':metrics:metrics-api')
+    implementation project(':metrics:metrics-dropwizard')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-imap')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-lmtp')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-pop')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':testing-base')
+    testImplementation 'com.github.stefanbirkner:system-rules:1.19.0'
+    testImplementation 'io.projectreactor:reactor-test:3.3.4.RELEASE'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Guice Common'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/guice-utils/build.gradle b/server/container/guice/guice-utils/build.gradle
new file mode 100644
index 0000000..12144a4
--- /dev/null
+++ b/server/container/guice/guice-utils/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'nl.jqno.equalsverifier:equalsverifier:3.1.9'
+    testImplementation 'org.assertj:assertj-core:3.12.2'
+    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.5.1'
+    testImplementation 'org.junit.platform:junit-platform-launcher:1.5.1'
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/jmx/build.gradle b/server/container/guice/jmx/build.gradle
new file mode 100644
index 0000000..c977083
--- /dev/null
+++ b/server/container/guice/jmx/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-copier')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-indexer')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-mailbox-jmx')
+    implementation project(':james-server:james-server-mailetcontainer-api')
+    implementation project(':james-server:james-server-mailetcontainer-camel')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: JMX'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/jpa-common-guice/build.gradle b/server/container/guice/jpa-common-guice/build.gradle
new file mode 100644
index 0000000..3d474b4
--- /dev/null
+++ b/server/container/guice/jpa-common-guice/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-file')
+    implementation project(':james-server:james-server-data-jpa')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.derby:derby:10.14.2.0'
+}
+
+description = 'Apache James :: Server :: JPA - guice common'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/jpa-guice/build.gradle b/server/container/guice/jpa-guice/build.gradle
new file mode 100644
index 0000000..865cf89
--- /dev/null
+++ b/server/container/guice/jpa-guice/build.gradle
@@ -0,0 +1,51 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-jpa')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-search-scanning')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-lucene')
+    implementation project(':james-server:james-server-data-jpa')
+    implementation project(':james-server:james-server-guice:james-server-guice-activemq')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-es-resporter')
+    implementation project(':james-server:james-server-guice:james-server-guice-imap')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmx')
+    implementation project(':james-server:james-server-guice:james-server-guice-lmtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox-plugin-spamassassin')
+    implementation project(':james-server:james-server-guice:james-server-guice-managedsieve')
+    implementation project(':james-server:james-server-guice:james-server-guice-pop')
+    implementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-sieve-jpa')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-data')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailqueue')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailrepository')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-swagger')
+    implementation project(':james-server:james-server-guice:james-server-jpa-common-guice')
+    implementation project(':james-server:james-server-mailbox-adapter')
+    implementation project(':james-server:james-server-mailets')
+    implementation 'ch.qos.logback:logback-classic:1.2.3'
+    implementation 'com.linagora:logback-elasticsearch-appender:1.8.0'
+    implementation 'org.apache.derby:derby:10.14.2.0'
+    implementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-jpa')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-jpa-common-guice')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: JPA - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/jpa-smtp-common/build.gradle b/server/container/guice/jpa-smtp-common/build.gradle
new file mode 100644
index 0000000..14b0e1c
--- /dev/null
+++ b/server/container/guice/jpa-smtp-common/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-jpa')
+    implementation project(':james-server:james-server-guice:james-server-guice-activemq')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-es-resporter')
+    implementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-data')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailqueue')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailrepository')
+    implementation project(':james-server:james-server-guice:james-server-jpa-common-guice')
+    implementation 'com.linagora:logback-elasticsearch-appender:1.8.0'
+}
+
+description = 'Apache James :: Server :: JPA + SMTP - common guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/jpa-smtp-mariadb/build.gradle b/server/container/guice/jpa-smtp-mariadb/build.gradle
new file mode 100644
index 0000000..a734244
--- /dev/null
+++ b/server/container/guice/jpa-smtp-mariadb/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-jpa-smtp-common-guice')
+    implementation project(':james-server:james-server-mailets')
+    implementation 'org.mariadb.jdbc:mariadb-java-client:2.4.3'
+    testImplementation project(':james-backends-common:apache-james-backends-jpa')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.derby:derby:10.14.2.0'
+    testImplementation 'org.testcontainers:mariadb:1.12.0'
+}
+
+description = 'Apache James :: Server :: JPA + SMTP + mariaDB client - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/jpa-smtp/build.gradle b/server/container/guice/jpa-smtp/build.gradle
new file mode 100644
index 0000000..e2abc5c
--- /dev/null
+++ b/server/container/guice/jpa-smtp/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-jpa-smtp-common-guice')
+    implementation project(':james-server:james-server-guice:james-server-guice-activemq')
+    implementation project(':james-server:james-server-mailets')
+    implementation 'org.apache.derby:derby:10.14.2.0'
+    testImplementation project(':james-backends-common:apache-james-backends-jpa')
+    testImplementation project(':james-server:james-server-guice:james-server-jpa-common-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: JPA + SMTP - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/build.gradle b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/build.gradle
new file mode 100644
index 0000000..c018c53
--- /dev/null
+++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-mailbox-deleted-message-vault')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Mailbox :: Plugin :: Deleted messages vault'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/mailbox-plugin-spamassassin/build.gradle b/server/container/guice/mailbox-plugin-spamassassin/build.gradle
new file mode 100644
index 0000000..2703099
--- /dev/null
+++ b/server/container/guice/mailbox-plugin-spamassassin/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-spamassassin')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Mailbox :: Plugin :: SpamAssassin'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/mailbox/build.gradle b/server/container/guice/mailbox/build.gradle
new file mode 100644
index 0000000..9992d4b
--- /dev/null
+++ b/server/container/guice/mailbox/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-indexer')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-guice:james-server-guice-utils')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Guice :: Mailbox'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/mailet/build.gradle b/server/container/guice/mailet/build.gradle
new file mode 100644
index 0000000..564fe9d
--- /dev/null
+++ b/server/container/guice/mailet/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-standard')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-guice:james-server-guice-utils')
+    implementation project(':james-server:james-server-mailet-dkim')
+    implementation project(':james-server:james-server-mailetcontainer-api')
+    implementation project(':james-server:james-server-mailetcontainer-camel')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Guice :: Mailet'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/memory-guice/build.gradle b/server/container/guice/memory-guice/build.gradle
new file mode 100644
index 0000000..8e645fb
--- /dev/null
+++ b/server/container/guice/memory-guice/build.gradle
@@ -0,0 +1,59 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-mailing')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-search-scanning')
+    implementation project(':apache-mailet:apache-mailet-icalendar')
+    implementation project(':james-server:james-server-guice:blob-export-guice')
+    implementation project(':james-server:james-server-guice:blob-memory-guice')
+    implementation project(':event-sourcing:event-sourcing-event-store-memory')
+    implementation project(':james-server:james-server-data-memory')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-imap')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmx')
+    implementation project(':james-server:james-server-guice:james-server-guice-lmtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox-plugin-spamassassin')
+    implementation project(':james-server:james-server-guice:james-server-guice-managedsieve')
+    implementation project(':james-server:james-server-guice:james-server-guice-pop')
+    implementation project(':james-server:james-server-guice:james-server-guice-sieve-file')
+    implementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-data')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-jmap')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailqueue')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-mailrepository')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin-swagger')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailet')
+    implementation project(':james-server:james-server-guice:james-server-mailbox-plugin-deleted-messages-vault-guice')
+    implementation project(':james-server:james-server-mailbox-adapter')
+    implementation project(':james-server:james-server-mailets')
+    implementation project(':james-server:james-server-mailrepository-memory')
+    implementation project(':james-server:james-server-queue-memory')
+    implementation 'ch.qos.logback:logback-classic:1.2.3'
+    testImplementation project(':third-party:apache-james-linshare')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':james-server:james-server-guice:blob-export-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Memory - guice injection'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/onami/build.gradle b/server/container/guice/onami/build.gradle
new file mode 100644
index 0000000..299bf8c
--- /dev/null
+++ b/server/container/guice/onami/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Onami'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/imap/build.gradle b/server/container/guice/protocols/imap/build.gradle
new file mode 100644
index 0000000..f09c798
--- /dev/null
+++ b/server/container/guice/protocols/imap/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-protocols-imap4')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Imap'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/jmap/build.gradle b/server/container/guice/protocols/jmap/build.gradle
new file mode 100644
index 0000000..f0c879f
--- /dev/null
+++ b/server/container/guice/protocols/jmap/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailet')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    implementation project(':james-server:james-server-jmap-draft')
+    implementation project(':james-server:james-server-jmap-rfc-8621')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Guice :: JMAP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/lmtp/build.gradle b/server/container/guice/protocols/lmtp/build.gradle
new file mode 100644
index 0000000..2ead240
--- /dev/null
+++ b/server/container/guice/protocols/lmtp/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-protocols-lmtp')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Lmtp'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/managedsieve/build.gradle b/server/container/guice/protocols/managedsieve/build.gradle
new file mode 100644
index 0000000..0c5f7ec
--- /dev/null
+++ b/server/container/guice/protocols/managedsieve/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-protocols-managesieve')
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation project(':protocols:protocols-managesieve')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Managedsieve'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/netty/build.gradle b/server/container/guice/protocols/netty/build.gradle
new file mode 100644
index 0000000..e6d92d7
--- /dev/null
+++ b/server/container/guice/protocols/netty/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':protocols:protocols-netty')
+    implementation 'com.google.inject:guice:4.2.2'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Netty'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/pop/build.gradle b/server/container/guice/protocols/pop/build.gradle
new file mode 100644
index 0000000..d50bf12
--- /dev/null
+++ b/server/container/guice/protocols/pop/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-protocols-pop3')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Pop'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/smtp/build.gradle b/server/container/guice/protocols/smtp/build.gradle
new file mode 100644
index 0000000..0307f02
--- /dev/null
+++ b/server/container/guice/protocols/smtp/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-protocols-smtp')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Smtp'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin-data/build.gradle b/server/container/guice/protocols/webadmin-data/build.gradle
new file mode 100644
index 0000000..05bbd1c
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-data/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-data')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin :: Data'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin-jmap/build.gradle b/server/container/guice/protocols/webadmin-jmap/build.gradle
new file mode 100644
index 0000000..2f06018
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-jmap/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-mailbox')
+    implementation project(':james-server:james-server-webadmin-jmap')
+    implementation 'com.google.inject:guice:4.2.2'
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin :: JMAP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin-mailbox/build.gradle b/server/container/guice/protocols/webadmin-mailbox/build.gradle
new file mode 100644
index 0000000..8444e8f
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailbox/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-mailbox')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin :: Mailbox'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin-mailqueue/build.gradle b/server/container/guice/protocols/webadmin-mailqueue/build.gradle
new file mode 100644
index 0000000..0087508
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailqueue/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-mailqueue')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin :: MailQueue'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin-mailrepository/build.gradle b/server/container/guice/protocols/webadmin-mailrepository/build.gradle
new file mode 100644
index 0000000..e9df84b
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailrepository/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-mailrepository')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin :: MailRepository'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin-swagger/build.gradle b/server/container/guice/protocols/webadmin-swagger/build.gradle
new file mode 100644
index 0000000..4079754
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-swagger/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-swagger')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin :: Swagger'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/protocols/webadmin/build.gradle b/server/container/guice/protocols/webadmin/build.gradle
new file mode 100644
index 0000000..9d2048d
--- /dev/null
+++ b/server/container/guice/protocols/webadmin/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-guice:james-server-guice-utils')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: Webadmin'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/rabbitmq/build.gradle b/server/container/guice/rabbitmq/build.gradle
new file mode 100644
index 0000000..2d03a0f
--- /dev/null
+++ b/server/container/guice/rabbitmq/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    implementation project(':james-server:james-server-guice:james-server-guice-configuration')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-queue-rabbitmq')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Guice :: RabbitMQ'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/sieve-file/build.gradle b/server/container/guice/sieve-file/build.gradle
new file mode 100644
index 0000000..c80458b
--- /dev/null
+++ b/server/container/guice/sieve-file/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-file')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation 'org.assertj:assertj-core:3.12.2'
+}
+
+description = 'Apache James :: Server :: Guice :: Sieve :: File'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/sieve-jpa/build.gradle b/server/container/guice/sieve-jpa/build.gradle
new file mode 100644
index 0000000..efac463
--- /dev/null
+++ b/server/container/guice/sieve-jpa/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-jpa')
+    implementation 'com.google.inject:guice:4.2.2'
+    testImplementation 'org.assertj:assertj-core:3.12.2'
+}
+
+description = 'Apache James :: Server :: Guice :: Sieve :: JPA'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/testing/custom-mailets-implementation/build.gradle b/server/container/guice/testing/custom-mailets-implementation/build.gradle
new file mode 100644
index 0000000..7eca16e
--- /dev/null
+++ b/server/container/guice/testing/custom-mailets-implementation/build.gradle
@@ -0,0 +1,15 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-testing:james-server-guice-custom-mailets')
+    implementation 'com.google.inject:guice:4.2.2'
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/testing/custom-mailets/build.gradle b/server/container/guice/testing/custom-mailets/build.gradle
new file mode 100644
index 0000000..622789d
--- /dev/null
+++ b/server/container/guice/testing/custom-mailets/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':james-server:james-server-guice:james-server-guice-testing:james-server-guice-custom-mailets-dependency')
+}
+
+description = 'Apache James :: Server :: Guice :: Mailet :: Custom testing mailets'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/guice/testing/dependency/build.gradle b/server/container/guice/testing/dependency/build.gradle
new file mode 100644
index 0000000..671f7e1
--- /dev/null
+++ b/server/container/guice/testing/dependency/build.gradle
@@ -0,0 +1,12 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+description = 'Apache James :: Server :: Guice :: Mailet :: Custom testing mailets :: dependency'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/lifecycle-api/build.gradle b/server/container/lifecycle-api/build.gradle
new file mode 100644
index 0000000..5607b75
--- /dev/null
+++ b/server/container/lifecycle-api/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Lifecycle API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/mailbox-adapter/build.gradle b/server/container/mailbox-adapter/build.gradle
new file mode 100644
index 0000000..cbd76e9
--- /dev/null
+++ b/server/container/mailbox-adapter/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mailbox Adapter'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/mailbox-jmx/build.gradle b/server/container/mailbox-jmx/build.gradle
new file mode 100644
index 0000000..4065146
--- /dev/null
+++ b/server/container/mailbox-jmx/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mailbox :: JMX'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/metrics/metrics-es-reporter/build.gradle b/server/container/metrics/metrics-es-reporter/build.gradle
new file mode 100644
index 0000000..473adc6
--- /dev/null
+++ b/server/container/metrics/metrics-es-reporter/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.linagora:metrics-elasticsearch-reporter:6.0.0-RC3'
+    implementation 'io.dropwizard.metrics:metrics-core:4.1.0'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-dropwizard')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Metrics ElasticSearch Reporter'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/spring/build.gradle b/server/container/spring/build.gradle
new file mode 100644
index 0000000..b6dc71a
--- /dev/null
+++ b/server/container/spring/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-jpa')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-mailbox-adapter')
+    implementation project(':james-server:james-server-mailbox-jmx')
+    implementation project(':james-server:james-server-mailetcontainer-api')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.activemq:activemq-spring:5.15.9'
+    implementation project(':protocols:protocols-api')
+    implementation 'org.apache.commons:commons-collections4:4.4'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.apache.logging.log4j:log4j:2.13.1'
+    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.13.1'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.springframework:spring-beans:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-context:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-core:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-jms:4.3.25.RELEASE'
+    implementation 'org.springframework:spring-web:4.3.25.RELEASE'
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':testing-base')
+    testImplementation 'com.sparkjava:spark-core:2.9.1'
+    testImplementation 'pl.pragmatists:JUnitParams:1.1.1'
+    compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
+}
+
+description = 'Apache James :: Server :: Container Spring'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/container/util/build.gradle b/server/container/util/build.gradle
new file mode 100644
index 0000000..b58408e
--- /dev/null
+++ b/server/container/util/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.ibm.icu:icu4j:64.2'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'com.github.dpaukov:combinatoricslib3:3.3.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Common Utilities'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-api/build.gradle b/server/data/data-api/build.gradle
new file mode 100644
index 0000000..55bdbbe
--- /dev/null
+++ b/server/data/data-api/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-mailrepository-api')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    testImplementation project(':testing-base')
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+}
+
+description = 'Apache James :: Server :: Data  :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-cassandra/build.gradle b/server/data/data-cassandra/build.gradle
new file mode 100644
index 0000000..6b5e231
--- /dev/null
+++ b/server/data/data-cassandra/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-api')
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.cucumber:cucumber-picocontainer:2.4.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Data :: Cassandra Persistence'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-file/build.gradle b/server/data/data-file/build.gradle
new file mode 100644
index 0000000..fbcd49d
--- /dev/null
+++ b/server/data/data-file/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':james-server:james-server-mailrepository-api')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.cucumber:cucumber-picocontainer:2.4.0'
+}
+
+description = 'Apache James :: Server :: Data :: File Persistence'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-jdbc/build.gradle b/server/data/data-jdbc/build.gradle
new file mode 100644
index 0000000..4a8d075
--- /dev/null
+++ b/server/data/data-jdbc/build.gradle
@@ -0,0 +1,40 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    runtimeOnly 'commons-dbcp:commons-dbcp:1.4'
+    runtimeOnly 'org.apache.derby:derby:10.14.2.0'
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':james-server:james-server-mailrepository-api')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.cucumber:cucumber-picocontainer:2.4.0'
+}
+
+description = 'Apache James :: Server :: Data :: JDBC Persistence'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-jmap-cassandra/build.gradle b/server/data/data-jmap-cassandra/build.gradle
new file mode 100644
index 0000000..4e56d20
--- /dev/null
+++ b/server/data/data-jmap-cassandra/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    implementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    implementation project(':james-server:james-server-data-jmap')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-jmap')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Data :: JMAP :: Cassandra persistance'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-jmap/build.gradle b/server/data/data-jmap/build.gradle
new file mode 100644
index 0000000..d138616
--- /dev/null
+++ b/server/data/data-jmap/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-util')
+    implementation project(':event-sourcing:event-sourcing-core')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-collections4:4.4'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Data :: JMAP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-jpa/build.gradle b/server/data/data-jpa/build.gradle
new file mode 100644
index 0000000..a975de6
--- /dev/null
+++ b/server/data/data-jpa/build.gradle
@@ -0,0 +1,34 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-jpa')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-jpa')
+    testImplementation project(':james-server:james-server-data-api')
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.derby:derby:10.14.2.0'
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.cucumber:cucumber-picocontainer:2.4.0'
+}
+
+description = 'Apache James :: Server :: Data :: JPA Persistence'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-ldap/build.gradle b/server/data/data-ldap/build.gradle
new file mode 100644
index 0000000..1c6bf7f
--- /dev/null
+++ b/server/data/data-ldap/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'org.apache.directory.api:api-ldap-model:1.0.3'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.assertj:assertj-core:3.12.2'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Data :: LDAP Implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-library/build.gradle b/server/data/data-library/build.gradle
new file mode 100644
index 0000000..5ee311d
--- /dev/null
+++ b/server/data/data-library/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':event-sourcing:event-sourcing-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-data-api')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Data :: Library'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/data/data-memory/build.gradle b/server/data/data-memory/build.gradle
new file mode 100644
index 0000000..a44999e
--- /dev/null
+++ b/server/data/data-memory/build.gradle
@@ -0,0 +1,29 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':james-server:james-server-core')
+    testImplementation project(':james-server:james-server-data-api')
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-mailrepository-memory')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.cucumber:cucumber-picocontainer:2.4.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Data  :: MEMORY'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/dns-service/dnsservice-api/build.gradle b/server/dns-service/dnsservice-api/build.gradle
new file mode 100644
index 0000000..417f226
--- /dev/null
+++ b/server/dns-service/dnsservice-api/build.gradle
@@ -0,0 +1,12 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+description = 'Apache James :: Server :: DNS Service :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/dns-service/dnsservice-dnsjava/build.gradle b/server/dns-service/dnsservice-dnsjava/build.gradle
new file mode 100644
index 0000000..f62b448
--- /dev/null
+++ b/server/dns-service/dnsservice-dnsjava/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'dnsjava:dnsjava:2.1.9'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: DNS Service :: Implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/dns-service/dnsservice-library/build.gradle b/server/dns-service/dnsservice-library/build.gradle
new file mode 100644
index 0000000..8c8cf12
--- /dev/null
+++ b/server/dns-service/dnsservice-library/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: DNS Service :: Library'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/dns-service/dnsservice-test/build.gradle b/server/dns-service/dnsservice-test/build.gradle
new file mode 100644
index 0000000..2306c84
--- /dev/null
+++ b/server/dns-service/dnsservice-test/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':testing-base')
+    implementation 'com.google.guava:guava:25.1-jre'
+}
+
+description = 'Apache James :: Server :: DNS Service :: Test'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailet/dkim/build.gradle b/server/mailet/dkim/build.gradle
new file mode 100644
index 0000000..c34eec1
--- /dev/null
+++ b/server/mailet/dkim/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation 'org.apache.james.jdkim:apache-jdkim-library:0.2'
+    implementation 'org.bouncycastle:bcpkix-jdk15on:1.62'
+    implementation 'org.bouncycastle:bcprov-jdk15on:1.62'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation 'org.apache.james.jdkim:apache-jdkim-library:0.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Mailet :: DKIM'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailet/integration-testing/build.gradle b/server/mailet/integration-testing/build.gradle
new file mode 100644
index 0000000..f1d9aae
--- /dev/null
+++ b/server/mailet/integration-testing/build.gradle
@@ -0,0 +1,40 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-crypto')
+    implementation project(':apache-mailet:apache-mailet-icalendar')
+    implementation project(':james-server:james-server-mailets')
+    implementation project(':james-server:james-server-mailet-dkim')
+    implementation project(':james-server:james-server-guice:james-server-memory-guice')
+    implementation 'com.github.spullara.mustache.java:compiler:0.9.6'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.testcontainers:testcontainers:1.12.0'
+    implementation 'org.xmlunit:xmlunit-core:2.6.3'
+    implementation 'org.xmlunit:xmlunit-matchers:2.6.3'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-activemq')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':james-server:mock-smtp-server')
+    testImplementation project(':testing-base')
+    testImplementation 'com.jayway.jsonpath:json-path:2.4.0'
+    testImplementation 'com.rabbitmq:amqp-client:5.7.3'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+}
+
+description = 'Apache James :: Server :: Mailets Integration Testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailet/mailetcontainer-api/build.gradle b/server/mailet/mailetcontainer-api/build.gradle
new file mode 100644
index 0000000..f1e4e70
--- /dev/null
+++ b/server/mailet/mailetcontainer-api/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Mailetcontainer API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailet/mailetcontainer-camel/build.gradle b/server/mailet/mailetcontainer-camel/build.gradle
new file mode 100644
index 0000000..18d5fb0
--- /dev/null
+++ b/server/mailet/mailetcontainer-camel/build.gradle
@@ -0,0 +1,44 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-dnsservice-library')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-mailetcontainer-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1'
+    implementation 'com.sun.xml.bind:jaxb-impl:2.3.1'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'javax.xml.bind:jaxb-api:2.3.1'
+    implementation 'org.apache.camel:camel-core:2.24.1'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-mailetcontainer-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mailetcontainer Camel'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailet/mailets/build.gradle b/server/mailet/mailets/build.gradle
new file mode 100644
index 0000000..b6747be
--- /dev/null
+++ b/server/mailet/mailets/build.gradle
@@ -0,0 +1,62 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':third-party:apache-james-spamassassin')
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':apache-mailet:apache-mailet-base')
+    implementation project(':apache-mailet:apache-mailet-standard')
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-james-utils:0.8.3'
+    implementation project(':james-mdn')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-dnsservice-library')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.apache.james.jspf:apache-jspf-resolver:1.0.1'
+    implementation project(':protocols:protocols-managesieve')
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'com.jakewharton.byteunits:byteunits:0.9.1'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-mailrepository-memory')
+    testImplementation project(':james-server:james-server-queue-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation project(':protocols:protocols-managesieve')
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.specs2:specs2-core_2.13:4.9.4'
+    testImplementation 'org.specs2:specs2-junit_2.13:4.9.4'
+}
+
+description = 'Apache James :: Server :: Mailets'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailet/mock-smtp-server/build.gradle b/server/mailet/mock-smtp-server/build.gradle
new file mode 100644
index 0000000..f967e74
--- /dev/null
+++ b/server/mailet/mock-smtp-server/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-util')
+    implementation project(':james-server:james-server-testing')
+    implementation project(':testing-base')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.github.openfeign:feign-core:10.3.0'
+    implementation 'io.github.openfeign:feign-jackson:10.3.0'
+    implementation 'io.github.openfeign:feign-slf4j:10.3.0'
+    implementation 'io.projectreactor.netty:reactor-netty:0.9.6.RELEASE'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    implementation 'org.subethamail:subethasmtp:3.1.7'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+}
+
+description = 'Apache James :: Server :: Mailet :: Mock SMTP Server'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailrepository/mailrepository-api/build.gradle b/server/mailrepository/mailrepository-api/build.gradle
new file mode 100644
index 0000000..0ed2c3f
--- /dev/null
+++ b/server/mailrepository/mailrepository-api/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    testImplementation project(':james-server:james-server-core')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: MailRepository :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailrepository/mailrepository-cassandra/build.gradle b/server/mailrepository/mailrepository-cassandra/build.gradle
new file mode 100644
index 0000000..2a6c772
--- /dev/null
+++ b/server/mailrepository/mailrepository-cassandra/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':james-server:james-server-blob:james-server-mail-store')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-mailrepository-api')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-server:james-server-blob:blob-cassandra')
+    testImplementation project(':james-server:james-server-blob:blob-api')
+    testImplementation project(':james-server:james-server-mailrepository-api')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: MailRepository :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/mailrepository/mailrepository-memory/build.gradle b/server/mailrepository/mailrepository-memory/build.gradle
new file mode 100644
index 0000000..0a43533
--- /dev/null
+++ b/server/mailrepository/mailrepository-memory/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-mailrepository-api')
+    testImplementation project(':james-server:james-server-mailrepository-api')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: MailRepository :: Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/fetchmail/build.gradle b/server/protocols/fetchmail/build.gradle
new file mode 100644
index 0000000..832ef5f
--- /dev/null
+++ b/server/protocols/fetchmail/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-util')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: FetchMail'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/build.gradle b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/build.gradle
new file mode 100644
index 0000000..8a7a9bd
--- /dev/null
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-spamassassin')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-tika')
+    testImplementation project(':apache-mailet:apache-mailet-base')
+    testImplementation project(':james-server:james-server-guice:blob-export-guice')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':javax-mail-extension')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-guice:2.4.0'
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: JMAP (draft) :: Cassandra Integration testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/build.gradle b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/build.gradle
new file mode 100644
index 0000000..f93bfa2
--- /dev/null
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/build.gradle
@@ -0,0 +1,41 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.jayway.jsonpath:json-path:2.4.0'
+    implementation 'org.apache.commons:commons-text:1.8'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-spamassassin')
+    testImplementation project(':apache-james-mailbox:backup')
+    testImplementation project(':james-server:james-server-data-jmap')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-imap')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-smtp')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-webadmin')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':james-server:james-server-mailets')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-guice:2.4.0'
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: JMAP (draft) :: Integration testing Common'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/build.gradle b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/build.gradle
new file mode 100644
index 0000000..4d53f7a
--- /dev/null
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/build.gradle
@@ -0,0 +1,39 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-dnsservice-test')
+    implementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-spamassassin')
+    testImplementation project(':apache-mailet:apache-mailet-base')
+    testImplementation project(':james-server:james-server-guice:blob-export-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing')
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':javax-mail-extension')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-guice:2.4.0'
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: JMAP (draft) :: Memory Integration testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/build.gradle b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/build.gradle
new file mode 100644
index 0000000..db75327
--- /dev/null
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/build.gradle
@@ -0,0 +1,40 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'io.cucumber:cucumber-guice:2.4.0'
+    testImplementation 'io.cucumber:cucumber-java:2.4.0'
+    testImplementation 'io.cucumber:cucumber-junit:2.4.0'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.apache.pdfbox:pdfbox:2.0.16'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: JMAP (draft) :: RabbitMQ + Object Store + Cassandra Integration testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-draft/build.gradle b/server/protocols/jmap-draft/build.gradle
new file mode 100644
index 0000000..e02982d
--- /dev/null
+++ b/server/protocols/jmap-draft/build.gradle
@@ -0,0 +1,62 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation 'org.apache.james:apache-mime4j-core:0.8.3'
+    implementation 'org.apache.james:apache-mime4j-dom:0.8.3'
+    implementation project(':james-mdn')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-jmap')
+    implementation project(':james-server:james-server-jmap')
+    implementation project(':james-server:james-server-jwt')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'io.jsonwebtoken:jjwt:0.9.1'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'io.projectreactor.netty:reactor-netty:0.9.6.RELEASE'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.jgrapht:jgrapht-core:1.3.1'
+    implementation 'org.jsoup:jsoup:1.13.1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':james-server:james-server-queue-memory')
+    testImplementation project(':james-server:james-server-util')
+    testImplementation project(':metrics:metrics-logger')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'com.github.dpaukov:combinatoricslib3:3.3.0'
+    testImplementation 'com.jayway.jsonpath:json-path:2.4.0'
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.junit.platform:junit-platform-engine:1.5.1'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: JMAP (Draft)'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/build.gradle b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/build.gradle
new file mode 100644
index 0000000..a837e23
--- /dev/null
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:jmap-rfc-8621-integration-tests:jmap-rfc-8621-integration-tests-common')
+}
+
+description = 'Apache James :: Server :: JMAP RFC-8621 :: Distributed Integration Testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/build.gradle b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/build.gradle
new file mode 100644
index 0000000..59395c3
--- /dev/null
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/build.gradle
@@ -0,0 +1,21 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    implementation project(':testing-base')
+    implementation 'com.typesafe.play:play-json_2.13:2.8.1'
+    implementation 'io.rest-assured:rest-assured:4.0.0'
+    implementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+}
+
+description = 'Apache James :: Server :: JMAP RFC-8621 :: Contract for Integration Testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/build.gradle b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/build.gradle
new file mode 100644
index 0000000..83e8e73
--- /dev/null
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/build.gradle
@@ -0,0 +1,19 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':james-server:james-server-guice:james-server-guice-common')
+    testImplementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':james-server:jmap-rfc-8621-integration-tests:jmap-rfc-8621-integration-tests-common')
+}
+
+description = 'Apache James :: Server :: JMAP RFC-8621 :: Memory Integration Testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap-rfc-8621/build.gradle b/server/protocols/jmap-rfc-8621/build.gradle
new file mode 100644
index 0000000..df1a435
--- /dev/null
+++ b/server/protocols/jmap-rfc-8621/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-jmap')
+    implementation project(':james-server:james-server-jwt')
+    implementation 'com.typesafe.play:play-json_2.13:2.8.1'
+    implementation 'eu.timepit:refined_2.13:0.9.13'
+    implementation 'io.projectreactor:reactor-scala-extensions_2.13:0.5.1'
+    implementation 'io.projectreactor.netty:reactor-netty:0.9.6.RELEASE'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.scalatest:scalatest_2.13:3.1.1'
+}
+
+description = 'Apache James :: Server :: JMAP RFC 8621'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jmap/build.gradle b/server/protocols/jmap/build.gradle
new file mode 100644
index 0000000..8eba1c4
--- /dev/null
+++ b/server/protocols/jmap/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-jwt')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.projectreactor.netty:reactor-netty:0.9.6.RELEASE'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'org.apache.httpcomponents:httpcore:4.4.13'
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+}
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/jwt/build.gradle b/server/protocols/jwt/build.gradle
new file mode 100644
index 0000000..9e40e1b
--- /dev/null
+++ b/server/protocols/jwt/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1'
+    implementation 'com.sun.xml.bind:jaxb-impl:2.3.1'
+    implementation 'io.jsonwebtoken:jjwt:0.9.1'
+    implementation 'javax.activation:activation:1.1.1'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'javax.xml.bind:jaxb-api:2.3.1'
+    implementation 'org.bouncycastle:bcpkix-jdk15on:1.62'
+    implementation 'org.bouncycastle:bcprov-jdk15on:1.62'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: JWT'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/protocols-imap4/build.gradle b/server/protocols/protocols-imap4/build.gradle
new file mode 100644
index 0000000..b6f63e3
--- /dev/null
+++ b/server/protocols/protocols-imap4/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.inject:javax.inject:1'
+    implementation project(':protocols:protocols-imap')
+    implementation project(':protocols:protocols-netty')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: IMAP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/protocols-library/build.gradle b/server/protocols/protocols-library/build.gradle
new file mode 100644
index 0000000..83c865e
--- /dev/null
+++ b/server/protocols/protocols-library/build.gradle
@@ -0,0 +1,30 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation project(':protocols:protocols-api')
+    implementation project(':protocols:protocols-netty')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'com.google.inject:guice:4.2.2'
+}
+
+description = 'Apache James :: Server :: Protocols Library'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/protocols-lmtp/build.gradle b/server/protocols/protocols-lmtp/build.gradle
new file mode 100644
index 0000000..5e8e48f
--- /dev/null
+++ b/server/protocols/protocols-lmtp/build.gradle
@@ -0,0 +1,31 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation project(':james-server:james-server-protocols-smtp')
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.inject:javax.inject:1'
+    implementation project(':protocols:protocols-api')
+    implementation project(':protocols:protocols-lmtp')
+    implementation project(':protocols:protocols-netty')
+    implementation project(':protocols:protocols-smtp')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: LMTP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/protocols-managesieve/build.gradle b/server/protocols/protocols-managesieve/build.gradle
new file mode 100644
index 0000000..42abefc
--- /dev/null
+++ b/server/protocols/protocols-managesieve/build.gradle
@@ -0,0 +1,28 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation project(':james-server:james-server-util')
+    implementation project(':protocols:protocols-managesieve')
+    implementation project(':protocols:protocols-netty')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: ManageSieve'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/protocols-pop3/build.gradle b/server/protocols/protocols-pop3/build.gradle
new file mode 100644
index 0000000..3e096f3
--- /dev/null
+++ b/server/protocols/protocols-pop3/build.gradle
@@ -0,0 +1,40 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.inject:javax.inject:1'
+    implementation project(':protocols:protocols-api')
+    implementation project(':protocols:protocols-netty')
+    implementation project(':protocols:protocols-pop3')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-store')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':james-server:james-server-protocols-library')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'com.google.inject:guice:4.2.2'
+    testImplementation 'commons-net:commons-net:3.6'
+    testImplementation project(':protocols:protocols-api')
+}
+
+description = 'Apache James :: Server :: POP3'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/protocols-smtp/build.gradle b/server/protocols/protocols-smtp/build.gradle
new file mode 100644
index 0000000..25be408
--- /dev/null
+++ b/server/protocols/protocols-smtp/build.gradle
@@ -0,0 +1,54 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':third-party:apache-james-spamassassin')
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-dnsservice-api')
+    implementation project(':james-server:james-server-dnsservice-library')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-protocols-library')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'io.netty:netty:3.10.6.Final'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.james.jspf:apache-jspf-resolver:1.0.1'
+    implementation project(':protocols:protocols-api')
+    implementation project(':protocols:protocols-netty')
+    implementation project(':protocols:protocols-smtp')
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':third-party:apache-james-spamassassin')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':james-server:james-server-mailrepository-memory')
+    testImplementation project(':james-server:james-server-protocols-library')
+    testImplementation project(':james-server:james-server-queue-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'com.google.inject:guice:4.2.2'
+    testImplementation 'commons-net:commons-net:3.6'
+    testImplementation 'dnsjava:dnsjava:2.1.9'
+    testImplementation project(':protocols:protocols-api')
+    testImplementation project(':protocols:protocols-smtp')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: SMTP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/build.gradle b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/build.gradle
new file mode 100644
index 0000000..9071684
--- /dev/null
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+    testImplementation project(':james-server:james-server-blob:blob-objectstorage')
+    testImplementation project(':james-server:james-server-guice:blob-objectstorage-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+    testImplementation project(':james-server:james-server-webadmin-cassandra-data')
+    testImplementation project(':james-server:webadmin-integration-test:james-server-webadmin-integration-test-common')
+}
+
+description = 'Apache James :: Server :: Web Admin server integration tests :: Distributed'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/build.gradle b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/build.gradle
new file mode 100644
index 0000000..f41354d
--- /dev/null
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':james-server:james-server-guice:james-server-memory-guice')
+    testImplementation project(':james-server:webadmin-integration-test:james-server-webadmin-integration-test-common')
+}
+
+description = 'Apache James :: Server :: Web Admin server integration tests :: Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin-integration-test/webadmin-integration-test-common/build.gradle b/server/protocols/webadmin-integration-test/webadmin-integration-test-common/build.gradle
new file mode 100644
index 0000000..a794bd2
--- /dev/null
+++ b/server/protocols/webadmin-integration-test/webadmin-integration-test-common/build.gradle
@@ -0,0 +1,39 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-es')
+    implementation project(':third-party:apache-james-linshare')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+    implementation project(':apache-james-mailbox:backup')
+    implementation project(':james-server:james-server-guice:blob-export-guice')
+    implementation project(':james-server:james-server-guice:james-server-guice-common')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    implementation project(':james-server:james-server-guice:james-server-guice-imap')
+    implementation project(':james-server:james-server-guice:james-server-guice-jmap')
+    implementation project(':james-server:james-server-guice:james-server-guice-mailbox')
+    implementation project(':james-server:james-server-guice:james-server-guice-webadmin')
+    implementation project(':james-server:james-server-guice:james-server-mailbox-plugin-deleted-messages-vault-guice')
+    implementation project(':james-server:james-server-testing')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation project(':james-server:james-server-webadmin-data')
+    implementation project(':james-server:james-server-webadmin-mailbox')
+    implementation project(':james-server:james-server-webadmin-mailqueue')
+    implementation project(':james-server:james-server-webadmin-mailrepository')
+    implementation project(':james-server:james-server-webadmin-swagger')
+    implementation project(':testing-base')
+    implementation 'io.rest-assured:rest-assured:4.0.0'
+    implementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    implementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Web Admin server integration tests :: Common'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-cassandra-data/build.gradle b/server/protocols/webadmin/webadmin-cassandra-data/build.gradle
new file mode 100644
index 0000000..73f06b4
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-cassandra-data/build.gradle
@@ -0,0 +1,28 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':james-server:james-server-data-cassandra')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: Cassandra :: Data'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-cassandra/build.gradle b/server/protocols/webadmin/webadmin-cassandra/build.gradle
new file mode 100644
index 0000000..725bfc0
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-cassandra/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-cassandra')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: Cassandra'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-core/build.gradle b/server/protocols/webadmin/webadmin-core/build.gradle
new file mode 100644
index 0000000..6c01285
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/build.gradle
@@ -0,0 +1,41 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-jwt')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation project(':james-server:james-server-task-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sparkjava:spark-core:2.9.1'
+    implementation 'io.swagger:swagger-jaxrs:1.5.22'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'javax.ws.rs:javax.ws.rs-api:2.1.1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':james-server:james-server-task-api')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'com.jayway.jsonpath:json-path:2.4.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: Core'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-data/build.gradle b/server/protocols/webadmin/webadmin-data/build.gradle
new file mode 100644
index 0000000..cca0d46
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-data/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-data-library')
+    implementation project(':james-server:james-server-util')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':james-server:james-server-data-file')
+    testImplementation project(':james-server:james-server-data-library')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: data'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-jmap/build.gradle b/server/protocols/webadmin/webadmin-jmap/build.gradle
new file mode 100644
index 0000000..39bfe40
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-jmap/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':james-server:james-server-data-jmap')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-jmap-draft')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: JMAP'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/build.gradle b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/build.gradle
new file mode 100644
index 0000000..1443676
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/build.gradle
@@ -0,0 +1,39 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault')
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-blob:blob-export-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: Mailbox :: Deleted Message Vault'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-mailbox/build.gradle b/server/protocols/webadmin/webadmin-mailbox/build.gradle
new file mode 100644
index 0000000..91a3033
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailbox/build.gradle
@@ -0,0 +1,55 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-event-json')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-indexer')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-quota-search')
+    implementation project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+    implementation project(':apache-james-mailbox:backup')
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':james-server:james-server-blob:blob-export-api')
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-util')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-dnsservice-test')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-api')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-event-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-memory')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-search')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-search-scanning')
+    testImplementation project(':james-backends-common:apache-james-backends-es')
+    testImplementation project(':apache-james-mailbox:apache-james-mailbox-quota-search-elasticsearch')
+    testImplementation project(':apache-james-mailbox:backup')
+    testImplementation project(':james-server:james-server-blob:blob-export-file')
+    testImplementation project(':james-server:james-server-blob:blob-export-file')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: mailbox'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-mailqueue/build.gradle b/server/protocols/webadmin/webadmin-mailqueue/build.gradle
new file mode 100644
index 0000000..de9cd5c
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/build.gradle
@@ -0,0 +1,31 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'com.google.guava:guava:25.1-jre'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-queue-api')
+    testImplementation project(':james-server:james-server-queue-memory')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: MailQueue'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-mailrepository/build.gradle b/server/protocols/webadmin/webadmin-mailrepository/build.gradle
new file mode 100644
index 0000000..daf8fef
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-data-api')
+    implementation project(':james-server:james-server-mailrepository-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-util')
+    implementation project(':james-server:james-server-webadmin-core')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-mailrepository-memory')
+    testImplementation project(':james-server:james-server-data-memory')
+    testImplementation project(':james-server:james-server-queue-memory')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Web Admin :: MailRepository'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/protocols/webadmin/webadmin-swagger/build.gradle b/server/protocols/webadmin/webadmin-swagger/build.gradle
new file mode 100644
index 0000000..d48067a
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-swagger/build.gradle
@@ -0,0 +1,17 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-webadmin-core')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Web Admin :: Swagger'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/queue/queue-activemq/build.gradle b/server/queue/queue-activemq/build.gradle
new file mode 100644
index 0000000..7619813
--- /dev/null
+++ b/server/queue/queue-activemq/build.gradle
@@ -0,0 +1,34 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'io.netty:netty-transport:4.1.48.Final'
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-queue-jms')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.activemq:activemq-broker:5.15.9'
+    implementation 'org.apache.activemq:activemq-kahadb-store:5.15.9'
+    implementation 'org.apache.activemq:artemis-jms-client:2.9.0'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-queue-api')
+    testImplementation project(':james-server:james-server-queue-jms')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mail Queue :: ActiveMQ'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/queue/queue-api/build.gradle b/server/queue/queue-api/build.gradle
new file mode 100644
index 0000000..6c3fb7f
--- /dev/null
+++ b/server/queue/queue-api/build.gradle
@@ -0,0 +1,25 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'org.threeten:threeten-extra:1.5.0'
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-api')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mail Queue :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/queue/queue-file/build.gradle b/server/queue/queue-file/build.gradle
new file mode 100644
index 0000000..9fa00bb
--- /dev/null
+++ b/server/queue/queue-file/build.gradle
@@ -0,0 +1,26 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-filesystem-api')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-filesystem-api')
+    testImplementation project(':james-server:james-server-queue-api')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+}
+
+description = 'Apache James :: Server :: Mail Queue :: File'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/queue/queue-jms/build.gradle b/server/queue/queue-jms/build.gradle
new file mode 100644
index 0000000..b29505e
--- /dev/null
+++ b/server/queue/queue-jms/build.gradle
@@ -0,0 +1,35 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.apache.activemq:artemis-jms-client:2.9.0'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':apache-mailet:apache-mailet-base')
+    testImplementation project(':james-server:james-server-queue-api')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.apache.commons:commons-text:1.8'
+    testImplementation 'org.apache.activemq:activemq-broker:5.15.9'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mail Queue :: JMS'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/queue/queue-memory/build.gradle b/server/queue/queue-memory/build.gradle
new file mode 100644
index 0000000..f02ab315
--- /dev/null
+++ b/server/queue/queue-memory/build.gradle
@@ -0,0 +1,23 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-queue-api')
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.threeten:threeten-extra:1.5.0'
+    testImplementation project(':apache-mailet:apache-mailet-test')
+    testImplementation project(':james-server:james-server-queue-api')
+    testImplementation project(':testing-base')
+    testImplementation project(':james-server:james-server-testing')
+}
+
+description = 'Apache James :: Server :: Mail Queue :: Memory'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/queue/queue-rabbitmq/build.gradle b/server/queue/queue-rabbitmq/build.gradle
new file mode 100644
index 0000000..888beda
--- /dev/null
+++ b/server/queue/queue-rabbitmq/build.gradle
@@ -0,0 +1,51 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':james-server:james-server-blob:blob-api')
+    implementation project(':event-sourcing:event-sourcing-core')
+    implementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    implementation project(':event-sourcing:event-sourcing-pojo')
+    implementation project(':james-server:james-server-core')
+    implementation project(':james-server:james-server-blob:james-server-mail-store')
+    implementation project(':james-server:james-server-queue-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9'
+    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9'
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.rabbitmq:amqp-client:5.7.3'
+    implementation 'io.projectreactor:reactor-core:3.3.4.RELEASE'
+    implementation 'javax.inject:javax.inject:1'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-server:james-server-blob:blob-cassandra')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    testImplementation project(':james-server:james-server-queue-api')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'io.projectreactor:reactor-test:3.3.4.RELEASE'
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Mail Queue :: RabbitMQ'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/task/task-api/build.gradle b/server/task/task-api/build.gradle
new file mode 100644
index 0000000..3c5c7dd
--- /dev/null
+++ b/server/task/task-api/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':testing-base')
+    testImplementation 'com.github.fge:throwing-lambdas:0.5.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Task :: API'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/task/task-distributed/build.gradle b/server/task/task-distributed/build.gradle
new file mode 100644
index 0000000..4466bb0
--- /dev/null
+++ b/server/task/task-distributed/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-backends-common:apache-james-backends-cassandra')
+    implementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    implementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    implementation project(':james-json')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-task-json')
+    implementation project(':james-server:james-server-task-memory')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':james-backends-common:apache-james-backends-cassandra')
+    testImplementation project(':james-backends-common:apache-james-backends-rabbitmq')
+    testImplementation project(':event-sourcing:event-sourcing-event-store-cassandra')
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-task-api')
+    testImplementation project(':james-server:james-server-task-json')
+    testImplementation project(':james-server:james-server-task-memory')
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Server :: Task :: Distributed'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/task/task-json/build.gradle b/server/task/task-json/build.gradle
new file mode 100644
index 0000000..bb0c6dd
--- /dev/null
+++ b/server/task/task-json/build.gradle
@@ -0,0 +1,24 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-json')
+    implementation project(':james-server:james-server-task-api')
+    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
+    implementation 'javax.inject:javax.inject:1'
+    testImplementation project(':james-json')
+    testImplementation project(':james-server:james-server-task-api')
+    testImplementation project(':testing-base')
+    testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.8.0'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Task :: Json'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/task/task-memory/build.gradle b/server/task/task-memory/build.gradle
new file mode 100644
index 0000000..43cbf87
--- /dev/null
+++ b/server/task/task-memory/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':event-sourcing:event-sourcing-core')
+    implementation project(':james-server:james-server-lifecycle-api')
+    implementation project(':james-server:james-server-util')
+    implementation project(':james-server:james-server-task-api')
+    implementation 'javax.annotation:javax.annotation-api:1.3.2'
+    implementation 'org.scala-lang:scala-library:2.13.1'
+    implementation 'org.scala-lang.modules:scala-java8-compat_2.13:0.9.0'
+    testImplementation project(':event-sourcing:event-sourcing-event-store-memory')
+    testImplementation project(':james-server:james-server-task-api')
+    testImplementation project(':testing-base')
+    testImplementation 'org.awaitility:awaitility:3.1.6'
+    testImplementation 'org.mockito:mockito-core:3.0.0'
+}
+
+description = 'Apache James :: Server :: Task :: Memory implementation'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/server/testing/build.gradle b/server/testing/build.gradle
new file mode 100644
index 0000000..61339b0
--- /dev/null
+++ b/server/testing/build.gradle
@@ -0,0 +1,27 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':apache-mailet:apache-mailet-test')
+    implementation project(':testing-base')
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.jayway.jsonpath:json-path:2.4.0'
+    implementation 'commons-net:commons-net:3.6'
+    implementation 'io.rest-assured:rest-assured:4.0.0'
+    implementation 'org.apache.commons:commons-math3:3.6.1'
+    implementation 'org.apache.httpcomponents:fluent-hc:4.5.10'
+    implementation 'org.awaitility:awaitility:3.1.6'
+    implementation 'org.testcontainers:testcontainers:1.12.0'
+    testImplementation 'org.subethamail:subethasmtp:3.1.7'
+}
+
+description = 'Apache James :: Server :: Testing'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..a3c9ddc
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,473 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+rootProject.name = 'james-project'
+include(':james-backends-common:apache-james-backends-cassandra')
+include(':james-backends-common:apache-james-backends-es')
+include(':james-backends-common:apache-james-backends-jpa')
+include(':james-backends-common:apache-james-backends-rabbitmq')
+include(':james-backends-common')
+include(':james-core')
+include(':event-sourcing:event-sourcing-core')
+include(':event-sourcing:event-sourcing-pojo')
+include(':event-sourcing:event-sourcing-event-store-api')
+include(':event-sourcing:event-sourcing-event-store-cassandra')
+include(':event-sourcing:event-sourcing-event-store-memory')
+include(':event-sourcing')
+include(':examples:custom-listeners')
+include(':examples:custom-mailets')
+include(':examples')
+include(':javax-mail-extension')
+include(':james-json')
+include(':apache-james-mailbox:apache-james-mailbox-api')
+include(':apache-james-mailbox:backup')
+include(':apache-james-mailbox:apache-james-mailbox-cassandra')
+include(':apache-james-mailbox:apache-james-mailbox-elasticsearch')
+include(':apache-james-mailbox:apache-james-mailbox-event-cassandra')
+include(':apache-james-mailbox:apache-james-mailbox-event-memory')
+include(':apache-james-mailbox:apache-james-mailbox-event-rabbitmq')
+include(':apache-james-mailbox:apache-james-mailbox-event-json')
+include(':apache-james-mailbox:apache-james-mailbox-jpa')
+include(':apache-james-mailbox:apache-james-mailbox-lucene')
+include(':apache-james-mailbox:apache-james-mailbox-maildir')
+include(':apache-james-mailbox:apache-james-mailbox-memory')
+include(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault')
+include(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault-cassandra')
+include(':apache-james-mailbox:apache-james-mailbox-quota-mailing')
+include(':apache-james-mailbox:quota-mailing-cassandra')
+include(':apache-james-mailbox:quota-mailing-memory')
+include(':apache-james-mailbox:apache-james-mailbox-quota-search')
+include(':apache-james-mailbox:apache-james-mailbox-quota-search-elasticsearch')
+include(':apache-james-mailbox:apache-james-mailbox-quota-search-scanning')
+include(':apache-james-mailbox:apache-james-mailbox-spamassassin')
+include(':apache-james-mailbox:apache-james-mailbox-scanning-search')
+include(':apache-james-mailbox:apache-james-mailbox-spring')
+include(':apache-james-mailbox:apache-james-mailbox-store')
+include(':apache-james-mailbox:apache-james-mailbox-tika')
+include(':apache-james-mailbox:apache-james-mailbox-tools-copier')
+include(':apache-james-mailbox:apache-james-mailbox-tools-indexer')
+include(':apache-james-mailbox:apache-james-mailbvox-tools-jpa-migrator')
+include(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute')
+include(':apache-james-mailbox')
+include(':apache-mailet:apache-mailet-ai')
+include(':apache-mailet:apache-mailet-api')
+include(':apache-mailet:apache-mailet-base')
+include(':apache-mailet:apache-mailet-crypto')
+include(':apache-mailet:apache-mailet-icalendar')
+include(':apache-mailet:mailetdocs-maven-plugin')
+include(':apache-mailet:apache-mailet-standard')
+include(':apache-mailet:apache-mailet-test')
+include(':apache-mailet')
+include(':james-mdn')
+include(':metrics:metrics-api')
+include(':metrics:metrics-dropwizard')
+include(':metrics:metrics-logger')
+include(':metrics:metrics-tests')
+include(':metrics')
+include(':apache-james-mpt:apache-james-mpt-all')
+include(':apache-james-mpt:apache-james-mpt-app')
+include(':apache-james-mpt:apache-james-mpt-core')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-cassandra')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-cyrus')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-elasticsearch')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-external-james')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-inmemory')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-jpa')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-jpa-lucene')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-maildir')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-rabbitmq')
+include(':apache-james-mpt:apache-james-mpt-imapmailbox')
+include(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-cassandra')
+include(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-core')
+include(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-file')
+include(':apache-james-mpt:apache-james-mpt-managesieve')
+include(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-cassandra')
+include(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-cassandra-rabbitmq-object-storage')
+include(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-core')
+include(':apache-james-mpt:apache-james-mpt-smtp')
+include(':apache-james-mpt:mpt-maven-plugin')
+include(':apache-james-mpt')
+include(':protocols:protocols-api')
+include(':protocols:protocols-imap')
+include(':protocols:protocols-lmtp')
+include(':protocols:protocols-managesieve')
+include(':protocols:protocols-netty')
+include(':protocols:protocols-pop3')
+include(':protocols:protocols-smtp')
+include(':protocols')
+include(':james-server:james-server-app')
+include(':james-server:james-server-blob:blob-api')
+include(':james-server:james-server-blob:blob-deduplicating')
+include(':james-server:james-server-blob:blob-cassandra')
+include(':james-server:james-server-blob:blob-common')
+include(':james-server:james-server-blob:blob-export-api')
+include(':james-server:james-server-blob:blob-export-file')
+include(':james-server:james-server-blob:blob-memory')
+include(':james-server:james-server-blob:blob-objectstorage')
+include(':james-server:james-server-blob:blob-union')
+include(':james-server:james-server-blob:james-server-mail-store')
+include(':james-server:james-server-blob')
+include(':james-server:james-server-cli')
+include(':james-server:james-server-cli-integration')
+include(':james-server:james-server-core')
+include(':james-server:james-server-filesystem-api')
+include(':james-server:james-server-guice:james-server-guice-activemq')
+include(':james-server:james-server-guice:blob-api-guice')
+include(':james-server:james-server-guice:blob-export-guice')
+include(':james-server:james-server-guice:blob-memory-guice')
+include(':james-server:james-server-guice:blob-objectstorage-guice')
+include(':james-server:james-server-guice:james-server-cassandra-guice')
+include(':james-server:james-server-guice:james-server-cassandra-ldap-guice')
+include(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice')
+include(':james-server:james-server-guice:james-server-cassandra-rabbitmq-ldap-guice')
+include(':james-server:james-server-guice:james-server-guice-configuration')
+include(':james-server:james-server-guice:james-server-guice-es-resporter')
+include(':james-server:james-server-guice:james-server-guice-common')
+include(':james-server:james-server-guice:james-server-guice-utils')
+include(':james-server:james-server-guice:james-server-guice-jmx')
+include(':james-server:james-server-guice:james-server-jpa-common-guice')
+include(':james-server:james-server-guice:james-server-jpa-guice')
+include(':james-server:james-server-guice:james-server-jpa-smtp-guice')
+include(':james-server:james-server-guice:james-server-jpa-smtp-common-guice')
+include(':james-server:james-server-guice:james-server-jpa-smtp-mariadb-guice')
+include(':james-server:james-server-guice:james-server-guice-mailbox')
+include(':james-server:james-server-guice:james-server-mailbox-plugin-deleted-messages-vault-guice')
+include(':james-server:james-server-guice:james-server-guice-mailbox-plugin-spamassassin')
+include(':james-server:james-server-guice:james-server-guice-mailet')
+include(':james-server:james-server-guice:james-server-memory-guice')
+include(':james-server:james-server-guice:james-server-onami')
+include(':james-server:james-server-guice:james-server-guice-imap')
+include(':james-server:james-server-guice:james-server-guice-jmap')
+include(':james-server:james-server-guice:james-server-guice-lmtp')
+include(':james-server:james-server-guice:james-server-guice-managedsieve')
+include(':james-server:james-server-guice:james-server-guice-netty')
+include(':james-server:james-server-guice:james-server-guice-pop')
+include(':james-server:james-server-guice:james-server-guice-smtp')
+include(':james-server:james-server-guice:james-server-guice-webadmin')
+include(':james-server:james-server-guice:james-server-guice-webadmin-data')
+include(':james-server:james-server-guice:james-server-guice-webadmin-jmap')
+include(':james-server:james-server-guice:james-server-guice-webadmin-mailbox')
+include(':james-server:james-server-guice:james-server-guice-webadmin-mailqueue')
+include(':james-server:james-server-guice:james-server-guice-webadmin-mailrepository')
+include(':james-server:james-server-guice:james-server-guice-webadmin-swagger')
+include(':james-server:james-server-guice:james-server-guice-rabbitmq')
+include(':james-server:james-server-guice:james-server-guice-testing:james-server-guice-custom-mailets')
+include(':james-server:james-server-guice:james-server-guice-testing:james-server-guice-custom-mailets-dependency')
+include(':james-server:james-server-guice:james-server-guice-testing:custom-mailets-implementation')
+include(':james-server:james-server-guice:james-server-guice-testing')
+include(':james-server:james-server-guice:james-server-guice-sieve-file')
+include(':james-server:james-server-guice:james-server-guice-sieve-jpa')
+include(':james-server:james-server-guice')
+include(':james-server:james-server-lifecycle-api')
+include(':james-server:james-server-mailbox-adapter')
+include(':james-server:james-server-mailbox-jmx')
+include(':james-server:metrics-es-reporter')
+include(':james-server:james-server-spring')
+include(':james-server:james-server-util')
+include(':james-server:james-server-data-api')
+include(':james-server:james-server-data-cassandra')
+include(':james-server:james-server-data-file')
+include(':james-server:james-server-data-jdbc')
+include(':james-server:james-server-data-jmap')
+include(':james-server:james-server-data-jmap-cassandra')
+include(':james-server:james-server-data-jpa')
+include(':james-server:james-server-data-ldap')
+include(':james-server:james-server-data-library')
+include(':james-server:james-server-data-memory')
+include(':james-server:james-server-dnsservice-api')
+include(':james-server:james-server-dnsservice-dnsjava')
+include(':james-server:james-server-dnsservice-library')
+include(':james-server:james-server-dnsservice-test')
+include(':james-server:james-server-mailets-integration-testing')
+include(':james-server:james-server-mailet-dkim')
+include(':james-server:james-server-mailetcontainer-api')
+include(':james-server:james-server-mailetcontainer-camel')
+include(':james-server:james-server-mailets')
+include(':james-server:mock-smtp-server')
+include(':james-server:james-server-mailrepository-api')
+include(':james-server:james-server-mailrepository-cassandra')
+include(':james-server:james-server-mailrepository-memory')
+include(':james-server:james-server-fetchmail')
+include(':james-server:james-server-jmap')
+include(':james-server:james-server-jmap-draft')
+include(':james-server:jmap-draft-integration-testing:cassandra-jmap-draft-integration-testing')
+include(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing')
+include(':james-server:jmap-draft-integration-testing:memory-jmap-draft-integration-testing')
+include(':james-server:jmap-draft-integration-testing:rabbitmq-jmap-draft-integration-testing')
+include(':james-server:jmap-draft-integration-testing')
+include(':james-server:james-server-jmap-rfc-8621')
+include(':james-server:jmap-rfc-8621-integration-tests:distributed-jmap-rfc-8621-integration-tests')
+include(':james-server:jmap-rfc-8621-integration-tests:jmap-rfc-8621-integration-tests-common')
+include(':james-server:jmap-rfc-8621-integration-tests:memory-jmap-rfc-8621-integration-tests')
+include(':james-server:jmap-rfc-8621-integration-tests')
+include(':james-server:james-server-jwt')
+include(':james-server:james-server-protocols-imap4')
+include(':james-server:james-server-protocols-library')
+include(':james-server:james-server-protocols-lmtp')
+include(':james-server:james-server-protocols-managesieve')
+include(':james-server:james-server-protocols-pop3')
+include(':james-server:james-server-protocols-smtp')
+include(':james-server:james-server-webadmin-cassandra')
+include(':james-server:james-server-webadmin-cassandra-data')
+include(':james-server:james-server-webadmin-core')
+include(':james-server:james-server-webadmin-data')
+include(':james-server:james-server-webadmin-jmap')
+include(':james-server:james-server-webadmin-mailbox')
+include(':james-server:james-server-webadmin-mailbox-deleted-message-vault')
+include(':james-server:james-server-webadmin-mailqueue')
+include(':james-server:james-server-webadmin-mailrepository')
+include(':james-server:james-server-webadmin-swagger')
+include(':james-server-webadmin')
+include(':james-server:webadmin-integration-test:rabbitmq-webadmin-integration-test')
+include(':james-server:webadmin-integration-test:memory-webadmin-integration-test')
+include(':james-server:webadmin-integration-test:james-server-webadmin-integration-test-common')
+include(':james-server:webadmin-integration-test')
+include(':james-server:james-server-queue-activemq')
+include(':james-server:james-server-queue-api')
+include(':james-server:james-server-queue-file')
+include(':james-server:james-server-queue-jms')
+include(':james-server:james-server-queue-memory')
+include(':james-server:james-server-queue-rabbitmq')
+include(':james-server:james-server-task-api')
+include(':james-server:james-server-task-distributed')
+include(':james-server:james-server-task-json')
+include(':james-server:james-server-task-memory')
+include(':james-server:james-server-testing')
+include(':james-server')
+include(':testing-base')
+include(':third-party:apache-james-linshare')
+include(':third-party:apache-james-spamassassin')
+include(':third-party')
+project(':james-backends-common:apache-james-backends-cassandra').projectDir = file('backends-common/cassandra')
+project(':james-backends-common:apache-james-backends-es').projectDir = file('backends-common/elasticsearch')
+project(':james-backends-common:apache-james-backends-jpa').projectDir = file('backends-common/jpa')
+project(':james-backends-common:apache-james-backends-rabbitmq').projectDir = file('backends-common/rabbitmq')
+project(':james-backends-common').projectDir = file('backends-common')
+project(':james-core').projectDir = file('core')
+project(':event-sourcing:event-sourcing-core').projectDir = file('event-sourcing/event-sourcing-core')
+project(':event-sourcing:event-sourcing-pojo').projectDir = file('event-sourcing/event-sourcing-pojo')
+project(':event-sourcing:event-sourcing-event-store-api').projectDir = file('event-sourcing/event-store-api')
+project(':event-sourcing:event-sourcing-event-store-cassandra').projectDir = file('event-sourcing/event-store-cassandra')
+project(':event-sourcing:event-sourcing-event-store-memory').projectDir = file('event-sourcing/event-store-memory')
+project(':examples:custom-listeners').projectDir = file('examples/custom-listeners')
+project(':examples:custom-mailets').projectDir = file('examples/custom-mailets')
+project(':james-json').projectDir = file('json')
+project(':apache-james-mailbox:apache-james-mailbox-api').projectDir = file('mailbox/api')
+project(':apache-james-mailbox:backup').projectDir = file('mailbox/backup')
+project(':apache-james-mailbox:apache-james-mailbox-cassandra').projectDir = file('mailbox/cassandra')
+project(':apache-james-mailbox:apache-james-mailbox-elasticsearch').projectDir = file('mailbox/elasticsearch')
+project(':apache-james-mailbox:apache-james-mailbox-event-cassandra').projectDir = file('mailbox/event/event-cassandra')
+project(':apache-james-mailbox:apache-james-mailbox-event-memory').projectDir = file('mailbox/event/event-memory')
+project(':apache-james-mailbox:apache-james-mailbox-event-rabbitmq').projectDir = file('mailbox/event/event-rabbitmq')
+project(':apache-james-mailbox:apache-james-mailbox-event-json').projectDir = file('mailbox/event/json')
+project(':apache-james-mailbox:apache-james-mailbox-jpa').projectDir = file('mailbox/jpa')
+project(':apache-james-mailbox:apache-james-mailbox-lucene').projectDir = file('mailbox/lucene')
+project(':apache-james-mailbox:apache-james-mailbox-maildir').projectDir = file('mailbox/maildir')
+project(':apache-james-mailbox:apache-james-mailbox-memory').projectDir = file('mailbox/memory')
+project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault').projectDir = file('mailbox/plugin/deleted-messages-vault')
+project(':apache-james-mailbox:apache-james-mailbox-deleted-messages-vault-cassandra').projectDir = file('mailbox/plugin/deleted-messages-vault-cassandra')
+project(':apache-james-mailbox:apache-james-mailbox-quota-mailing').projectDir = file('mailbox/plugin/quota-mailing')
+project(':apache-james-mailbox:quota-mailing-cassandra').projectDir = file('mailbox/plugin/quota-mailing-cassandra')
+project(':apache-james-mailbox:quota-mailing-memory').projectDir = file('mailbox/plugin/quota-mailing-memory')
+project(':apache-james-mailbox:apache-james-mailbox-quota-search').projectDir = file('mailbox/plugin/quota-search')
+project(':apache-james-mailbox:apache-james-mailbox-quota-search-elasticsearch').projectDir = file('mailbox/plugin/quota-search-elasticsearch')
+project(':apache-james-mailbox:apache-james-mailbox-quota-search-scanning').projectDir = file('mailbox/plugin/quota-search-scanning')
+project(':apache-james-mailbox:apache-james-mailbox-spamassassin').projectDir = file('mailbox/plugin/spamassassin')
+project(':apache-james-mailbox:apache-james-mailbox-scanning-search').projectDir = file('mailbox/scanning-search')
+project(':apache-james-mailbox:apache-james-mailbox-spring').projectDir = file('mailbox/spring')
+project(':apache-james-mailbox:apache-james-mailbox-store').projectDir = file('mailbox/store')
+project(':apache-james-mailbox:apache-james-mailbox-tika').projectDir = file('mailbox/tika')
+project(':apache-james-mailbox:apache-james-mailbox-tools-copier').projectDir = file('mailbox/tools/copier')
+project(':apache-james-mailbox:apache-james-mailbox-tools-indexer').projectDir = file('mailbox/tools/indexer')
+project(':apache-james-mailbox:apache-james-mailbvox-tools-jpa-migrator').projectDir = file('mailbox/tools/jpa-migrator')
+project(':apache-james-mailbox:apache-james-mailbox-tools-quota-recompute').projectDir = file('mailbox/tools/quota-recompute')
+project(':apache-james-mailbox').projectDir = file('mailbox')
+project(':apache-mailet:apache-mailet-ai').projectDir = file('mailet/ai')
+project(':apache-mailet:apache-mailet-api').projectDir = file('mailet/api')
+project(':apache-mailet:apache-mailet-base').projectDir = file('mailet/base')
+project(':apache-mailet:apache-mailet-crypto').projectDir = file('mailet/crypto')
+project(':apache-mailet:apache-mailet-icalendar').projectDir = file('mailet/icalendar')
+project(':apache-mailet:mailetdocs-maven-plugin').projectDir = file('mailet/mailetdocs-maven-plugin')
+project(':apache-mailet:apache-mailet-standard').projectDir = file('mailet/standard')
+project(':apache-mailet:apache-mailet-test').projectDir = file('mailet/test')
+project(':apache-mailet').projectDir = file('mailet')
+project(':james-mdn').projectDir = file('mdn')
+project(':metrics:metrics-api').projectDir = file('metrics/metrics-api')
+project(':metrics:metrics-dropwizard').projectDir = file('metrics/metrics-dropwizard')
+project(':metrics:metrics-logger').projectDir = file('metrics/metrics-logger')
+project(':metrics:metrics-tests').projectDir = file('metrics/metrics-tests')
+project(':apache-james-mpt:apache-james-mpt-all').projectDir = file('mpt/all')
+project(':apache-james-mpt:apache-james-mpt-app').projectDir = file('mpt/app')
+project(':apache-james-mpt:apache-james-mpt-core').projectDir = file('mpt/core')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-cassandra').projectDir = file('mpt/impl/imap-mailbox/cassandra')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-core').projectDir = file('mpt/impl/imap-mailbox/core')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-cyrus').projectDir = file('mpt/impl/imap-mailbox/cyrus')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-elasticsearch').projectDir = file('mpt/impl/imap-mailbox/elasticsearch')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-external-james').projectDir = file('mpt/impl/imap-mailbox/external-james')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-inmemory').projectDir = file('mpt/impl/imap-mailbox/inmemory')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-jpa').projectDir = file('mpt/impl/imap-mailbox/jpa')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-jpa-lucene').projectDir = file('mpt/impl/imap-mailbox/lucenesearch')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-maildir').projectDir = file('mpt/impl/imap-mailbox/maildir')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox:apache-james-mpt-imapmailbox-rabbitmq').projectDir = file('mpt/impl/imap-mailbox/rabbitmq')
+project(':apache-james-mpt:apache-james-mpt-imapmailbox').projectDir = file('mpt/impl/imap-mailbox')
+project(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-cassandra').projectDir = file('mpt/impl/managesieve/cassandra')
+project(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-core').projectDir = file('mpt/impl/managesieve/core')
+project(':apache-james-mpt:apache-james-mpt-managesieve:apache-james-mpt-managesieve-file').projectDir = file('mpt/impl/managesieve/file')
+project(':apache-james-mpt:apache-james-mpt-managesieve').projectDir = file('mpt/impl/managesieve')
+project(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-cassandra').projectDir = file('mpt/impl/smtp/cassandra')
+project(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-cassandra-rabbitmq-object-storage').projectDir = file('mpt/impl/smtp/cassandra-rabbitmq-object-storage')
+project(':apache-james-mpt:apache-james-mpt-smtp:apache-james-mpt-smtp-core').projectDir = file('mpt/impl/smtp/core')
+project(':apache-james-mpt:apache-james-mpt-smtp').projectDir = file('mpt/impl/smtp')
+project(':apache-james-mpt:mpt-maven-plugin').projectDir = file('mpt/mavenplugin')
+project(':apache-james-mpt').projectDir = file('mpt')
+project(':protocols:protocols-api').projectDir = file('protocols/api')
+project(':protocols:protocols-imap').projectDir = file('protocols/imap')
+project(':protocols:protocols-lmtp').projectDir = file('protocols/lmtp')
+project(':protocols:protocols-managesieve').projectDir = file('protocols/managesieve')
+project(':protocols:protocols-netty').projectDir = file('protocols/netty')
+project(':protocols:protocols-pop3').projectDir = file('protocols/pop3')
+project(':protocols:protocols-smtp').projectDir = file('protocols/smtp')
+project(':james-server:james-server-app').projectDir = file('server/app')
+project(':james-server:james-server-blob:blob-api').projectDir = file('server/blob/blob-api')
+project(':james-server:james-server-blob:blob-deduplicating').projectDir = file('server/blob/blob-deduplicating')
+project(':james-server:james-server-blob:blob-cassandra').projectDir = file('server/blob/blob-cassandra')
+project(':james-server:james-server-blob:blob-common').projectDir = file('server/blob/blob-common')
+project(':james-server:james-server-blob:blob-export-api').projectDir = file('server/blob/blob-export-api')
+project(':james-server:james-server-blob:blob-export-file').projectDir = file('server/blob/blob-export-file')
+project(':james-server:james-server-blob:blob-memory').projectDir = file('server/blob/blob-memory')
+project(':james-server:james-server-blob:blob-objectstorage').projectDir = file('server/blob/blob-objectstorage')
+project(':james-server:james-server-blob:blob-union').projectDir = file('server/blob/blob-union')
+project(':james-server:james-server-blob:james-server-mail-store').projectDir = file('server/blob/mail-store')
+project(':james-server:james-server-blob').projectDir = file('server/blob')
+project(':james-server:james-server-cli').projectDir = file('server/container/cli')
+project(':james-server:james-server-cli-integration').projectDir = file('server/container/cli-integration')
+project(':james-server:james-server-core').projectDir = file('server/container/core')
+project(':james-server:james-server-filesystem-api').projectDir = file('server/container/filesystem-api')
+project(':james-server:james-server-guice:james-server-guice-activemq').projectDir = file('server/container/guice/activemq')
+project(':james-server:james-server-guice:blob-api-guice').projectDir = file('server/container/guice/blob-api-guice')
+project(':james-server:james-server-guice:blob-export-guice').projectDir = file('server/container/guice/blob-export-guice')
+project(':james-server:james-server-guice:blob-memory-guice').projectDir = file('server/container/guice/blob-memory-guice')
+project(':james-server:james-server-guice:blob-objectstorage-guice').projectDir = file('server/container/guice/blob-objectstorage-guice')
+project(':james-server:james-server-guice:james-server-cassandra-guice').projectDir = file('server/container/guice/cassandra-guice')
+project(':james-server:james-server-guice:james-server-cassandra-ldap-guice').projectDir = file('server/container/guice/cassandra-ldap-guice')
+project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-guice').projectDir = file('server/container/guice/cassandra-rabbitmq-guice')
+project(':james-server:james-server-guice:james-server-cassandra-rabbitmq-ldap-guice').projectDir = file('server/container/guice/cassandra-rabbitmq-ldap-guice')
+project(':james-server:james-server-guice:james-server-guice-configuration').projectDir = file('server/container/guice/configuration')
+project(':james-server:james-server-guice:james-server-guice-es-resporter').projectDir = file('server/container/guice/es-metric-reporter')
+project(':james-server:james-server-guice:james-server-guice-common').projectDir = file('server/container/guice/guice-common')
+project(':james-server:james-server-guice:james-server-guice-utils').projectDir = file('server/container/guice/guice-utils')
+project(':james-server:james-server-guice:james-server-guice-jmx').projectDir = file('server/container/guice/jmx')
+project(':james-server:james-server-guice:james-server-jpa-common-guice').projectDir = file('server/container/guice/jpa-common-guice')
+project(':james-server:james-server-guice:james-server-jpa-guice').projectDir = file('server/container/guice/jpa-guice')
+project(':james-server:james-server-guice:james-server-jpa-smtp-guice').projectDir = file('server/container/guice/jpa-smtp')
+project(':james-server:james-server-guice:james-server-jpa-smtp-common-guice').projectDir = file('server/container/guice/jpa-smtp-common')
+project(':james-server:james-server-guice:james-server-jpa-smtp-mariadb-guice').projectDir = file('server/container/guice/jpa-smtp-mariadb')
+project(':james-server:james-server-guice:james-server-guice-mailbox').projectDir = file('server/container/guice/mailbox')
+project(':james-server:james-server-guice:james-server-mailbox-plugin-deleted-messages-vault-guice').projectDir = file('server/container/guice/mailbox-plugin-deleted-messages-vault-guice')
+project(':james-server:james-server-guice:james-server-guice-mailbox-plugin-spamassassin').projectDir = file('server/container/guice/mailbox-plugin-spamassassin')
+project(':james-server:james-server-guice:james-server-guice-mailet').projectDir = file('server/container/guice/mailet')
+project(':james-server:james-server-guice:james-server-memory-guice').projectDir = file('server/container/guice/memory-guice')
+project(':james-server:james-server-guice:james-server-onami').projectDir = file('server/container/guice/onami')
+project(':james-server:james-server-guice:james-server-guice-imap').projectDir = file('server/container/guice/protocols/imap')
+project(':james-server:james-server-guice:james-server-guice-jmap').projectDir = file('server/container/guice/protocols/jmap')
+project(':james-server:james-server-guice:james-server-guice-lmtp').projectDir = file('server/container/guice/protocols/lmtp')
+project(':james-server:james-server-guice:james-server-guice-managedsieve').projectDir = file('server/container/guice/protocols/managedsieve')
+project(':james-server:james-server-guice:james-server-guice-netty').projectDir = file('server/container/guice/protocols/netty')
+project(':james-server:james-server-guice:james-server-guice-pop').projectDir = file('server/container/guice/protocols/pop')
+project(':james-server:james-server-guice:james-server-guice-smtp').projectDir = file('server/container/guice/protocols/smtp')
+project(':james-server:james-server-guice:james-server-guice-webadmin').projectDir = file('server/container/guice/protocols/webadmin')
+project(':james-server:james-server-guice:james-server-guice-webadmin-data').projectDir = file('server/container/guice/protocols/webadmin-data')
+project(':james-server:james-server-guice:james-server-guice-webadmin-jmap').projectDir = file('server/container/guice/protocols/webadmin-jmap')
+project(':james-server:james-server-guice:james-server-guice-webadmin-mailbox').projectDir = file('server/container/guice/protocols/webadmin-mailbox')
+project(':james-server:james-server-guice:james-server-guice-webadmin-mailqueue').projectDir = file('server/container/guice/protocols/webadmin-mailqueue')
+project(':james-server:james-server-guice:james-server-guice-webadmin-mailrepository').projectDir = file('server/container/guice/protocols/webadmin-mailrepository')
+project(':james-server:james-server-guice:james-server-guice-webadmin-swagger').projectDir = file('server/container/guice/protocols/webadmin-swagger')
+project(':james-server:james-server-guice:james-server-guice-rabbitmq').projectDir = file('server/container/guice/rabbitmq')
+project(':james-server:james-server-guice:james-server-guice-testing:james-server-guice-custom-mailets').projectDir = file('server/container/guice/testing/custom-mailets')
+project(':james-server:james-server-guice:james-server-guice-testing:james-server-guice-custom-mailets-dependency').projectDir = file('server/container/guice/testing/dependency')
+project(':james-server:james-server-guice:james-server-guice-testing:custom-mailets-implementation').projectDir = file('server/container/guice/testing/custom-mailets-implementation')
+project(':james-server:james-server-guice:james-server-guice-testing').projectDir = file('server/container/guice/testing')
+project(':james-server:james-server-guice:james-server-guice-sieve-file').projectDir = file('server/container/guice/sieve-file')
+project(':james-server:james-server-guice:james-server-guice-sieve-jpa').projectDir = file('server/container/guice/sieve-jpa')
+project(':james-server:james-server-guice').projectDir = file('server/container/guice')
+project(':james-server:james-server-lifecycle-api').projectDir = file('server/container/lifecycle-api')
+project(':james-server:james-server-mailbox-adapter').projectDir = file('server/container/mailbox-adapter')
+project(':james-server:james-server-mailbox-jmx').projectDir = file('server/container/mailbox-jmx')
+project(':james-server:metrics-es-reporter').projectDir = file('server/container/metrics/metrics-es-reporter')
+project(':james-server:james-server-spring').projectDir = file('server/container/spring')
+project(':james-server:james-server-util').projectDir = file('server/container/util')
+project(':james-server:james-server-data-api').projectDir = file('server/data/data-api')
+project(':james-server:james-server-data-cassandra').projectDir = file('server/data/data-cassandra')
+project(':james-server:james-server-data-file').projectDir = file('server/data/data-file')
+project(':james-server:james-server-data-jdbc').projectDir = file('server/data/data-jdbc')
+project(':james-server:james-server-data-jmap').projectDir = file('server/data/data-jmap')
+project(':james-server:james-server-data-jmap-cassandra').projectDir = file('server/data/data-jmap-cassandra')
+project(':james-server:james-server-data-jpa').projectDir = file('server/data/data-jpa')
+project(':james-server:james-server-data-ldap').projectDir = file('server/data/data-ldap')
+project(':james-server:james-server-data-library').projectDir = file('server/data/data-library')
+project(':james-server:james-server-data-memory').projectDir = file('server/data/data-memory')
+project(':james-server:james-server-dnsservice-api').projectDir = file('server/dns-service/dnsservice-api')
+project(':james-server:james-server-dnsservice-dnsjava').projectDir = file('server/dns-service/dnsservice-dnsjava')
+project(':james-server:james-server-dnsservice-library').projectDir = file('server/dns-service/dnsservice-library')
+project(':james-server:james-server-dnsservice-test').projectDir = file('server/dns-service/dnsservice-test')
+project(':james-server:james-server-mailets-integration-testing').projectDir = file('server/mailet/integration-testing')
+project(':james-server:james-server-mailet-dkim').projectDir = file('server/mailet/dkim')
+project(':james-server:james-server-mailetcontainer-api').projectDir = file('server/mailet/mailetcontainer-api')
+project(':james-server:james-server-mailetcontainer-camel').projectDir = file('server/mailet/mailetcontainer-camel')
+project(':james-server:james-server-mailets').projectDir = file('server/mailet/mailets')
+project(':james-server:mock-smtp-server').projectDir = file('server/mailet/mock-smtp-server')
+project(':james-server:james-server-mailrepository-api').projectDir = file('server/mailrepository/mailrepository-api')
+project(':james-server:james-server-mailrepository-cassandra').projectDir = file('server/mailrepository/mailrepository-cassandra')
+project(':james-server:james-server-mailrepository-memory').projectDir = file('server/mailrepository/mailrepository-memory')
+project(':james-server:james-server-fetchmail').projectDir = file('server/protocols/fetchmail')
+project(':james-server:james-server-jmap').projectDir = file('server/protocols/jmap')
+project(':james-server:james-server-jmap-draft').projectDir = file('server/protocols/jmap-draft')
+project(':james-server:jmap-draft-integration-testing:cassandra-jmap-draft-integration-testing').projectDir = file('server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing')
+project(':james-server:jmap-draft-integration-testing:james-server-jmap-draft-integration-testing').projectDir = file('server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common')
+project(':james-server:jmap-draft-integration-testing:memory-jmap-draft-integration-testing').projectDir = file('server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing')
+project(':james-server:jmap-draft-integration-testing:rabbitmq-jmap-draft-integration-testing').projectDir = file('server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing')
+project(':james-server:jmap-draft-integration-testing').projectDir = file('server/protocols/jmap-draft-integration-testing')
+project(':james-server:james-server-jmap-rfc-8621').projectDir = file('server/protocols/jmap-rfc-8621')
+project(':james-server:jmap-rfc-8621-integration-tests:distributed-jmap-rfc-8621-integration-tests').projectDir = file('server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests')
+project(':james-server:jmap-rfc-8621-integration-tests:jmap-rfc-8621-integration-tests-common').projectDir = file('server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common')
+project(':james-server:jmap-rfc-8621-integration-tests:memory-jmap-rfc-8621-integration-tests').projectDir = file('server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests')
+project(':james-server:jmap-rfc-8621-integration-tests').projectDir = file('server/protocols/jmap-rfc-8621-integration-tests')
+project(':james-server:james-server-jwt').projectDir = file('server/protocols/jwt')
+project(':james-server:james-server-protocols-imap4').projectDir = file('server/protocols/protocols-imap4')
+project(':james-server:james-server-protocols-library').projectDir = file('server/protocols/protocols-library')
+project(':james-server:james-server-protocols-lmtp').projectDir = file('server/protocols/protocols-lmtp')
+project(':james-server:james-server-protocols-managesieve').projectDir = file('server/protocols/protocols-managesieve')
+project(':james-server:james-server-protocols-pop3').projectDir = file('server/protocols/protocols-pop3')
+project(':james-server:james-server-protocols-smtp').projectDir = file('server/protocols/protocols-smtp')
+project(':james-server:james-server-webadmin-cassandra').projectDir = file('server/protocols/webadmin/webadmin-cassandra')
+project(':james-server:james-server-webadmin-cassandra-data').projectDir = file('server/protocols/webadmin/webadmin-cassandra-data')
+project(':james-server:james-server-webadmin-core').projectDir = file('server/protocols/webadmin/webadmin-core')
+project(':james-server:james-server-webadmin-data').projectDir = file('server/protocols/webadmin/webadmin-data')
+project(':james-server:james-server-webadmin-jmap').projectDir = file('server/protocols/webadmin/webadmin-jmap')
+project(':james-server:james-server-webadmin-mailbox').projectDir = file('server/protocols/webadmin/webadmin-mailbox')
+project(':james-server:james-server-webadmin-mailbox-deleted-message-vault').projectDir = file('server/protocols/webadmin/webadmin-mailbox-deleted-message-vault')
+project(':james-server:james-server-webadmin-mailqueue').projectDir = file('server/protocols/webadmin/webadmin-mailqueue')
+project(':james-server:james-server-webadmin-mailrepository').projectDir = file('server/protocols/webadmin/webadmin-mailrepository')
+project(':james-server:james-server-webadmin-swagger').projectDir = file('server/protocols/webadmin/webadmin-swagger')
+project(':james-server-webadmin').projectDir = file('server/protocols/webadmin')
+project(':james-server:webadmin-integration-test:rabbitmq-webadmin-integration-test').projectDir = file('server/protocols/webadmin-integration-test/distributed-webadmin-integration-test')
+project(':james-server:webadmin-integration-test:memory-webadmin-integration-test').projectDir = file('server/protocols/webadmin-integration-test/memory-webadmin-integration-test')
+project(':james-server:webadmin-integration-test:james-server-webadmin-integration-test-common').projectDir = file('server/protocols/webadmin-integration-test/webadmin-integration-test-common')
+project(':james-server:webadmin-integration-test').projectDir = file('server/protocols/webadmin-integration-test')
+project(':james-server:james-server-queue-activemq').projectDir = file('server/queue/queue-activemq')
+project(':james-server:james-server-queue-api').projectDir = file('server/queue/queue-api')
+project(':james-server:james-server-queue-file').projectDir = file('server/queue/queue-file')
+project(':james-server:james-server-queue-jms').projectDir = file('server/queue/queue-jms')
+project(':james-server:james-server-queue-memory').projectDir = file('server/queue/queue-memory')
+project(':james-server:james-server-queue-rabbitmq').projectDir = file('server/queue/queue-rabbitmq')
+project(':james-server:james-server-task-api').projectDir = file('server/task/task-api')
+project(':james-server:james-server-task-distributed').projectDir = file('server/task/task-distributed')
+project(':james-server:james-server-task-json').projectDir = file('server/task/task-json')
+project(':james-server:james-server-task-memory').projectDir = file('server/task/task-memory')
+project(':james-server:james-server-testing').projectDir = file('server/testing')
+project(':james-server').projectDir = file('server')
+project(':testing-base').projectDir = file('testing/base')
+project(':third-party:apache-james-linshare').projectDir = file('third-party/linshare')
+project(':third-party:apache-james-spamassassin').projectDir = file('third-party/spamassassin')
diff --git a/testing/base/build.gradle b/testing/base/build.gradle
new file mode 100644
index 0000000..1efd855
--- /dev/null
+++ b/testing/base/build.gradle
@@ -0,0 +1,22 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation 'ch.qos.logback:logback-classic:1.2.3'
+    implementation 'nl.jqno.equalsverifier:equalsverifier:3.1.9'
+    implementation 'org.assertj:assertj-core:3.12.2'
+    implementation 'org.junit.jupiter:junit-jupiter-engine:5.5.1'
+    implementation 'org.junit.jupiter:junit-jupiter-params:5.5.1'
+    implementation 'org.junit.platform:junit-platform-launcher:1.5.1'
+    implementation 'org.junit.vintage:junit-vintage-engine:5.5.1'
+}
+
+description = 'Apache James :: Testing :: Base'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/third-party/linshare/build.gradle b/third-party/linshare/build.gradle
new file mode 100644
index 0000000..581c2dd
--- /dev/null
+++ b/third-party/linshare/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':james-core')
+    implementation project(':james-server:james-server-blob:blob-export-api')
+    implementation 'com.github.steveash.guavate:guavate:1.0.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'io.github.openfeign:feign-core:10.3.0'
+    implementation 'io.github.openfeign:feign-jackson:10.3.0'
+    implementation 'io.github.openfeign:feign-slf4j:10.3.0'
+    implementation 'io.github.openfeign.form:feign-form:3.8.0'
+    implementation 'org.apache.commons:commons-configuration2:2.7'
+    implementation 'org.slf4j:log4j-over-slf4j:1.7.27'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':james-server:james-server-blob:blob-memory')
+    testImplementation project(':testing-base')
+    testImplementation 'io.rest-assured:rest-assured:4.0.0'
+    testImplementation 'org.slf4j:jcl-over-slf4j:1.7.27'
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Third Party :: LinShare'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)
diff --git a/third-party/spamassassin/build.gradle b/third-party/spamassassin/build.gradle
new file mode 100644
index 0000000..b79b234
--- /dev/null
+++ b/third-party/spamassassin/build.gradle
@@ -0,0 +1,28 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+dependencies {
+    implementation project(':apache-mailet:apache-mailet-api')
+    implementation project(':james-core')
+    implementation project(':metrics:metrics-api')
+    implementation 'com.github.fge:throwing-lambdas:0.5.0'
+    implementation 'com.google.guava:guava:25.1-jre'
+    implementation 'com.sun.mail:javax.mail:1.6.2'
+    implementation 'commons-io:commons-io:2.6'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'org.slf4j:slf4j-api:1.7.27'
+    testImplementation project(':james-server:james-server-testing')
+    testImplementation project(':metrics:metrics-tests')
+    testImplementation project(':testing-base')
+    testImplementation 'org.testcontainers:testcontainers:1.12.0'
+}
+
+description = 'Apache James :: Third Party :: SpamAssassin'
+
+tasks.register('testsJar', Jar) {
+    archiveClassifier = 'tests'
+    from(sourceSets.test.output)
+}
+
+publishing.publications.maven.artifact(testsJar)


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org