From 090ed76106eeba535d40fa9808174dd460f9b870 Mon Sep 17 00:00:00 2001 From: Djaytan <26904516+Djaytan@users.noreply.github.com> Date: Sun, 12 Jan 2025 18:47:36 +0100 Subject: [PATCH] #785 - define JPMS module names ## Summary The goal of this change is to encourage Gradle to put the framework's Jar files in the module path instead of the classpath. For that, we need to explicitly define the `Automatic-Module-Name` attribute in the `MANIFEST.MF` files in framework's Jar files (source: https://docs.gradle.org/current/userguide/java_library_plugin.html#using_libraries_that_are_not_modules). The newly added attribute follows this format: `.` (e.g. `org.incendo.cloud-core`). Details about this change can be found here: https://github.com/Incendo/cloud/issues/785. ## Impact There is no impact nor on maintainer side nor or consumer one not relying on JPMS. For the ones already relying on JPMS (e.g. Maven users), they will just have to adapt the references in their `module-info.java` files as follow: From: ```java module my.module { [...] requires cloud-core; [...] } ``` To: ```java module my.module { [...] requires org.incendo.cloud-core; [...] } ``` Closes #785 --- .../build-logic/src/main/kotlin/CloudBaseConventions.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gradle/build-logic/src/main/kotlin/CloudBaseConventions.kt b/gradle/build-logic/src/main/kotlin/CloudBaseConventions.kt index 3784a1f2e..f5840834b 100644 --- a/gradle/build-logic/src/main/kotlin/CloudBaseConventions.kt +++ b/gradle/build-logic/src/main/kotlin/CloudBaseConventions.kt @@ -2,8 +2,11 @@ import com.diffplug.gradle.spotless.SpotlessExtension import net.kyori.indra.IndraExtension import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.attributes import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.withType import org.incendo.cloudbuildlogic.CloudSpotlessExtension class CloudBaseConventions : Plugin { @@ -43,5 +46,11 @@ class CloudBaseConventions : Plugin { "checkstyle"(libs.stylecheck) } + + target.tasks.withType(Jar::class).configureEach { + manifest { + attributes("Automatic-Module-Name" to "%s.%s".format(target.group, target.name.replace('-', '.'))) + } + } } }