diff --git a/onionwrapper-android/build.gradle b/onionwrapper-android/build.gradle
index c7f7978ccd098d4c7451e2ff7690a789ab98e5a4..a37abee070c477cf395d8d55b532f3e92ea9b1d0 100644
--- a/onionwrapper-android/build.gradle
+++ b/onionwrapper-android/build.gradle
@@ -31,3 +31,23 @@ dependencies {
     implementation project(':onionwrapper-core')
     implementation 'org.briarproject:dont-kill-me-lib:0.2.6'
 }
+
+mavenPublishing {
+    pom {
+        withXml {
+            // Dependencies on other modules are represented in the POM with a groupId equal to
+            // the project's name and an unspecified version. Rewrite them with the correct
+            // groupId and version.
+            Node pomNode = asNode()
+            String name = pomNode.get('name').text()
+            String groupId = pomNode.groupId.text()
+            String version = pomNode.version.text()
+            pomNode.dependencies.dependency.each() { node ->
+                if (node.groupId.text() == name) {
+                    node.groupId.each() { n -> n.value = groupId }
+                    node.version.each() { n -> n.value = version }
+                }
+            }
+        }
+    }
+}
diff --git a/onionwrapper-core/build.gradle b/onionwrapper-core/build.gradle
index a5fd862a0fdca46bafdd1616802af77bbf0e1de9..7167ad514fb99003cad0f6a697f1f870cc7b3ede 100644
--- a/onionwrapper-core/build.gradle
+++ b/onionwrapper-core/build.gradle
@@ -1,5 +1,6 @@
 plugins {
     id 'java-library'
+    id 'com.vanniktech.maven.publish' version '0.18.0'
 }
 
 java {
diff --git a/onionwrapper-core/gradle.properties b/onionwrapper-core/gradle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..bb8b04d2476d4a15786bdc909965a316d3abdcef
--- /dev/null
+++ b/onionwrapper-core/gradle.properties
@@ -0,0 +1 @@
+POM_ARTIFACT_ID=onionwrapper-core
diff --git a/onionwrapper-java/build.gradle b/onionwrapper-java/build.gradle
index 3bba0f2bb1ce85eb13c661dd7d29c719ca258b6c..1df23d95103b027d9d1ad27815fbfd779cea60e0 100644
--- a/onionwrapper-java/build.gradle
+++ b/onionwrapper-java/build.gradle
@@ -21,3 +21,22 @@ dependencies {
     testImplementation 'org.briarproject:snowflake-linux:2.5.1'
 }
 
+mavenPublishing {
+    pom {
+        withXml {
+            // Dependencies on other modules are represented in the POM with a groupId equal to
+            // the project's name and an unspecified version. Rewrite them with the correct
+            // groupId and version.
+            Node pomNode = asNode()
+            String name = pomNode.get('name').text()
+            String groupId = pomNode.groupId.text()
+            String version = pomNode.version.text()
+            pomNode.dependencies.dependency.each() { node ->
+                if (node.groupId.text() == name) {
+                    node.groupId.each() { n -> n.value = groupId }
+                    node.version.each() { n -> n.value = version }
+                }
+            }
+        }
+    }
+}