From fabfff2271a3ed606b293e386add9148eb01a7c9 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..3c431d4c7 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, archiveBaseName.get())) + } + } } }