--- a/buildSrc/build.gradle.kts	Mon Apr 28 13:35:53 2025 -0400
+++ b/buildSrc/build.gradle.kts	Thu May 01 20:41:08 2025 -0400
@@ -66,7 +66,7 @@
     implementation(libs.plugins.com.android.application.gav())
     implementation(libs.plugins.org.jetbrains.kotlin.android.gav())
     implementation("gradle.plugin.com.hierynomus.gradle.plugins:license-gradle-plugin:0.16.1")
-
+    implementation(libs.plugins.com.vanniktech.maven.publish.gav())
     implementation("com.geekorum.gradle.avdl:plugin:0.0.3")
     implementation("com.geekorum.gradle.avdl:flydroid:0.0.3")
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildSrc/src/main/kotlin/MavenPublish.kt	Thu May 01 20:41:08 2025 -0400
@@ -0,0 +1,68 @@
+/*
+ * AboutOss is a utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.build
+
+import com.vanniktech.maven.publish.MavenPublishBaseExtension
+import com.vanniktech.maven.publish.MavenPublishPlugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.apply
+import org.gradle.kotlin.dsl.configure
+
+internal fun Project.configureMavenPublish() {
+    apply<MavenPublishPlugin>()
+
+    configure<MavenPublishBaseExtension>() {
+//        TODO
+//        publishToMavenCentral(SonatypeHost.DEFAULT)
+//        signAllPublications()
+
+        // default pom info. each field can be overridden in specific project
+        pom {
+            name.set(project.name)
+            description.set("A library to retrieve and display opensource licenses in applications")
+            inceptionYear.set("2023")
+            val githubUrl = "https://github.com/fbarthelery/AboutOss/"
+            url.set(githubUrl)
+            scm {
+                url.set(githubUrl)
+                connection.set("scm:git:$githubUrl.git")
+            }
+
+            licenses {
+                license {
+                    name.set("GPL-3.0-or-later")
+                    url.set("https://www.gnu.org/licenses/gpl-3.0.html")
+                    distribution.set("repo")
+                }
+            }
+
+            developers {
+                developer {
+                    id.set("da_risk")
+                    name.set("Frédéric Barthéléry")
+                    email.set("da_risk@geekorum.com")
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildSrc/src/main/kotlin/maven-publish.gradle.kts	Thu May 01 20:41:08 2025 -0400
@@ -0,0 +1,24 @@
+/*
+ * AboutOss is a utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.build
+
+configureMavenPublish()
\ No newline at end of file
--- a/core/build.gradle.kts	Mon Apr 28 13:35:53 2025 -0400
+++ b/core/build.gradle.kts	Thu May 01 20:41:08 2025 -0400
@@ -26,7 +26,7 @@
     kotlin("multiplatform")
     id("com.geekorum.build.source-license-checker")
     alias(libs.plugins.org.jetbrains.kotlinx.serialization)
-    `maven-publish`
+    id("com.geekorum.build.maven-publish")
 }
 
 group = "com.geekorum.aboutoss"
@@ -104,27 +104,7 @@
     androidTestImplementation(libs.espresso.core)
 }
 
-publishing {
-    publications {
-        val pomConfiguration: (MavenPom).() -> Unit = {
-            name.set("core")
-            description.set("A library to retrieve and display opensource licenses in Android applications")
-            licenses {
-                license {
-                    name.set("GPL-3.0-or-later")
-                    url.set("https://www.gnu.org/licenses/gpl-3.0.html")
-                    distribution.set("repo")
-                }
-            }
-            inceptionYear.set("2023")
-        }
+mavenPublishing {
+    coordinates(groupId = group.toString(), name, version.toString())
+}
 
-        register<MavenPublication>("release") {
-            afterEvaluate {
-                from(components["release"])
-            }
-            artifactId = "core"
-            pom(pomConfiguration)
-        }
-    }
-}
--- a/gradle/libs.versions.toml	Mon Apr 28 13:35:53 2025 -0400
+++ b/gradle/libs.versions.toml	Thu May 01 20:41:08 2025 -0400
@@ -89,6 +89,7 @@
 org-jetbrains-kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "org-jetbrains-kotlin" }
 google-gms-oss-license = { id = "com.google.android.gms.oss-licenses-plugin", version = "0.10.6" }
 org-jetbrains-kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "org-jetbrains-kotlin" }
+com-vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version = "0.31.0" }
 
 [bundles]
 
--- a/ui/common/build.gradle.kts	Mon Apr 28 13:35:53 2025 -0400
+++ b/ui/common/build.gradle.kts	Thu May 01 20:41:08 2025 -0400
@@ -27,7 +27,7 @@
     id("com.geekorum.build.source-license-checker")
     alias(libs.plugins.org.jetbrains.compose.multiplatform)
     alias(libs.plugins.org.jetbrains.kotlin.compose.compiler)
-    `maven-publish`
+    id("com.geekorum.build.maven-publish")
 }
 
 group = "com.geekorum.aboutoss"
@@ -120,27 +120,10 @@
     }
 }
 
-publishing {
-    publications {
-        val pomConfiguration: (MavenPom).() -> Unit = {
-            name.set("ui-common")
-            description.set("A library to retrieve and display opensource licenses in Android applications")
-            licenses {
-                license {
-                    name.set("GPL-3.0-or-later")
-                    url.set("https://www.gnu.org/licenses/gpl-3.0.html")
-                    distribution.set("repo")
-                }
-            }
-            inceptionYear.set("2023")
-        }
-
-        register<MavenPublication>("release") {
-            afterEvaluate {
-                from(components["release"])
-            }
-            artifactId = "ui-common"
-            pom(pomConfiguration)
-        }
+mavenPublishing {
+    val artifactId = "ui-common"
+    coordinates(groupId = group.toString(), artifactId, version.toString())
+    pom {
+        name = artifactId
     }
 }
--- a/ui/material2/build.gradle.kts	Mon Apr 28 13:35:53 2025 -0400
+++ b/ui/material2/build.gradle.kts	Thu May 01 20:41:08 2025 -0400
@@ -28,7 +28,7 @@
     alias(libs.plugins.org.jetbrains.compose.multiplatform)
     alias(libs.plugins.org.jetbrains.kotlinx.serialization)
     id("com.geekorum.build.source-license-checker")
-    `maven-publish`
+    id("com.geekorum.build.maven-publish")
 }
 
 group = "com.geekorum.aboutoss"
@@ -121,27 +121,10 @@
     androidTestImplementation(libs.espresso.core)
 }
 
-publishing {
-    publications {
-        val pomConfiguration: (MavenPom).() -> Unit = {
-            name.set("ui-material")
-            description.set("A library to retrieve and display opensource licenses in Android applications")
-            licenses {
-                license {
-                    name.set("GPL-3.0-or-later")
-                    url.set("https://www.gnu.org/licenses/gpl-3.0.html")
-                    distribution.set("repo")
-                }
-            }
-            inceptionYear.set("2023")
-        }
-
-        register<MavenPublication>("release") {
-            afterEvaluate {
-                from(components["release"])
-            }
-            artifactId = "ui-material"
-            pom(pomConfiguration)
-        }
+mavenPublishing {
+    val artifactId = "ui-material"
+    coordinates(groupId = group.toString(), artifactId, version.toString())
+    pom {
+        name = artifactId
     }
-}
+}
\ No newline at end of file
--- a/ui/material3/build.gradle.kts	Mon Apr 28 13:35:53 2025 -0400
+++ b/ui/material3/build.gradle.kts	Thu May 01 20:41:08 2025 -0400
@@ -28,7 +28,7 @@
     alias(libs.plugins.org.jetbrains.compose.multiplatform)
     alias(libs.plugins.org.jetbrains.kotlinx.serialization)
     id("com.geekorum.build.source-license-checker")
-    `maven-publish`
+    id("com.geekorum.build.maven-publish")
 }
 
 group = "com.geekorum.aboutoss"
@@ -127,27 +127,10 @@
     }
 }
 
-publishing {
-    publications {
-        val pomConfiguration: (MavenPom).() -> Unit = {
-            name.set("ui-material3")
-            description.set("A library to retrieve and display opensource licenses in Android applications")
-            licenses {
-                license {
-                    name.set("GPL-3.0-or-later")
-                    url.set("https://www.gnu.org/licenses/gpl-3.0.html")
-                    distribution.set("repo")
-                }
-            }
-            inceptionYear.set("2023")
-        }
-
-        register<MavenPublication>("release") {
-            afterEvaluate {
-                from(components["release"])
-            }
-            artifactId = "ui-material3"
-            pom(pomConfiguration)
-        }
+mavenPublishing {
+    val artifactId = "ui-material3"
+    coordinates(groupId = group.toString(), artifactId, version.toString())
+    pom {
+        name = artifactId
     }
-}
+}
\ No newline at end of file