From f955202abcfd342813b8ba9f425e8675ad0fcf70 Mon Sep 17 00:00:00 2001 From: jrhee17 Date: Wed, 22 Jan 2025 16:52:47 +0900 Subject: [PATCH 1/2] support java modules for thrift --- gradle/scripts/README.md | 12 +++++++-- gradle/scripts/lib/common-info.gradle | 38 ++++++++++++++++++--------- gradle/scripts/lib/java-shade.gradle | 6 +++-- gradle/scripts/lib/java.gradle | 6 +++-- thrift/thrift0.12/build.gradle | 1 + thrift/thrift0.13/build.gradle | 3 ++- thrift/thrift0.14/build.gradle | 1 + thrift/thrift0.15/build.gradle | 1 + thrift/thrift0.16/build.gradle | 1 + thrift/thrift0.17/build.gradle | 1 + thrift/thrift0.18/build.gradle | 1 + thrift/thrift0.19/build.gradle | 1 + thrift/thrift0.20/build.gradle | 1 + thrift/thrift0.9/build.gradle | 1 + 14 files changed, 54 insertions(+), 20 deletions(-) diff --git a/gradle/scripts/README.md b/gradle/scripts/README.md index f8a4e54a6c4..ad31c81e9ed 100644 --- a/gradle/scripts/README.md +++ b/gradle/scripts/README.md @@ -695,8 +695,16 @@ and artifact ID. For example: If enabled, each project with `java` flag will have the `automaticModuleName` property. -You can override the automatic module name of a certain project via the `automaticModuleNameOverrides` -extension property: +You can override the automatic module name of a certain project via `automaticModuleNameOverride`: + + ```groovy + ext { + // Change the automatic module name of a project to 'com.example.fubar'. + automaticModuleNameOverride = 'com.example.fubar' + } + ``` + +Alternatively, you can also specify a mapping via the `automaticModuleNameOverrides` extension property: ```groovy ext { diff --git a/gradle/scripts/lib/common-info.gradle b/gradle/scripts/lib/common-info.gradle index 0f29c25407e..bc536c3899c 100644 --- a/gradle/scripts/lib/common-info.gradle +++ b/gradle/scripts/lib/common-info.gradle @@ -73,20 +73,32 @@ allprojects { return null } - // Use the overridden one if available. - def overriddenAutomaticModuleName = findOverridden('automaticModuleNameOverrides', project) - if (overriddenAutomaticModuleName != null) { - return overriddenAutomaticModuleName - } + return project.provider { + // per-project override + if (project.ext.has('automaticModuleNameOverride')) { + def override = project.ext.get('automaticModuleNameOverride') + if (!(override instanceof String)) { + throw new IllegalStateException("project.ext.automaticModuleNameOverride must be a String: ${override}") + } + return override + } + + // Use the overridden one if available. - // Generate from the groupId and artifactId otherwise. - def groupIdComponents = String.valueOf(rootProject.group).split("\\.").toList() - def artifactIdComponents = - String.valueOf(project.ext.artifactId).replace('-', '.').split("\\.").toList() - if (groupIdComponents.last() == artifactIdComponents.first()) { - return String.join('.', groupIdComponents + artifactIdComponents.drop(1)) - } else { - return String.join('.', groupIdComponents + artifactIdComponents) + def overriddenAutomaticModuleName = findOverridden('automaticModuleNameOverrides', project) + if (overriddenAutomaticModuleName != null) { + return overriddenAutomaticModuleName + } + + // Generate from the groupId and artifactId otherwise. + def groupIdComponents = String.valueOf(rootProject.group).split("\\.").toList() + def artifactIdComponents = + String.valueOf(project.ext.artifactId).replace('-', '.').split("\\.").toList() + if (groupIdComponents.last() == artifactIdComponents.first()) { + return String.join('.', groupIdComponents + artifactIdComponents.drop(1)) + } else { + return String.join('.', groupIdComponents + artifactIdComponents) + } } }.call() } diff --git a/gradle/scripts/lib/java-shade.gradle b/gradle/scripts/lib/java-shade.gradle index fd1ddd3ec55..04f23ba9154 100644 --- a/gradle/scripts/lib/java-shade.gradle +++ b/gradle/scripts/lib/java-shade.gradle @@ -48,8 +48,10 @@ configure(relocatedProjects) { // Set the 'Automatic-Module-Name' property in MANIFEST.MF. if (project.ext.automaticModuleName != null) { - manifest { - attributes('Automatic-Module-Name': project.ext.automaticModuleName) + doFirst { + manifest { + attributes('Automatic-Module-Name': project.ext.automaticModuleName.get()) + } } } } diff --git a/gradle/scripts/lib/java.gradle b/gradle/scripts/lib/java.gradle index a70498ac852..b20a6174f67 100644 --- a/gradle/scripts/lib/java.gradle +++ b/gradle/scripts/lib/java.gradle @@ -166,8 +166,10 @@ configure(projectsWithFlags('java')) { // Set the 'Automatic-Module-Name' property in 'MANIFEST.MF' if `automaticModuleName` is not null. if (project.ext.automaticModuleName != null) { tasks.named('jar') { - manifest { - attributes('Automatic-Module-Name': project.ext.automaticModuleName) + doFirst { + manifest { + attributes('Automatic-Module-Name': project.ext.automaticModuleName.get()) + } } } } diff --git a/thrift/thrift0.12/build.gradle b/thrift/thrift0.12/build.gradle index ca04e20422c..674d6aaaf45 100644 --- a/thrift/thrift0.12/build.gradle +++ b/thrift/thrift0.12/build.gradle @@ -46,6 +46,7 @@ tasks.processTestResources.from "${rootProject.projectDir}/thrift/thrift0.13/src def thriftFullVersion = libs.thrift012.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')) + automaticModuleNameOverride = "com.linecorp.armeria.thrift012" } // Disable checkstyle because it's checked by ':thrift0.13'. diff --git a/thrift/thrift0.13/build.gradle b/thrift/thrift0.13/build.gradle index 7bfd1e1ffd6..666be6a54a3 100644 --- a/thrift/thrift0.13/build.gradle +++ b/thrift/thrift0.13/build.gradle @@ -27,7 +27,8 @@ dependencies { // Use the old compiler. def thriftFullVersion = libs.thrift013.get().versionConstraint.requiredVersion ext { - thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); + thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')) + automaticModuleNameOverride = "com.linecorp.armeria.thrift013" } // Keep the original Guava references in ThriftListenableFuture, diff --git a/thrift/thrift0.14/build.gradle b/thrift/thrift0.14/build.gradle index 54050bcd18d..ba8ff4069cf 100644 --- a/thrift/thrift0.14/build.gradle +++ b/thrift/thrift0.14/build.gradle @@ -51,6 +51,7 @@ ext { // Use the old compiler. thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift014" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.15/build.gradle b/thrift/thrift0.15/build.gradle index 7d8af98451e..b55cba9422b 100644 --- a/thrift/thrift0.15/build.gradle +++ b/thrift/thrift0.15/build.gradle @@ -55,6 +55,7 @@ def thriftFullVersion = libs.thrift015.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift015" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.16/build.gradle b/thrift/thrift0.16/build.gradle index 3be0448c7f7..29215b27c54 100644 --- a/thrift/thrift0.16/build.gradle +++ b/thrift/thrift0.16/build.gradle @@ -56,6 +56,7 @@ def thriftFullVersion = libs.thrift016.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift016" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.17/build.gradle b/thrift/thrift0.17/build.gradle index b40b1d48741..92eeabcd4b7 100644 --- a/thrift/thrift0.17/build.gradle +++ b/thrift/thrift0.17/build.gradle @@ -57,6 +57,7 @@ def thriftFullVersion = libs.thrift017.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift017" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.18/build.gradle b/thrift/thrift0.18/build.gradle index 28b139ab86a..239ba034d76 100644 --- a/thrift/thrift0.18/build.gradle +++ b/thrift/thrift0.18/build.gradle @@ -59,6 +59,7 @@ def thriftFullVersion = libs.thrift018.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift", "$projectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift018" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.19/build.gradle b/thrift/thrift0.19/build.gradle index 92501298efa..e8717b6073b 100644 --- a/thrift/thrift0.19/build.gradle +++ b/thrift/thrift0.19/build.gradle @@ -65,6 +65,7 @@ ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift", "$projectDir/src/test/thrift", "$thrift018ProjectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift019" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.20/build.gradle b/thrift/thrift0.20/build.gradle index b960e0d7a6b..d4cf4d341f9 100644 --- a/thrift/thrift0.20/build.gradle +++ b/thrift/thrift0.20/build.gradle @@ -67,6 +67,7 @@ ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift", "$projectDir/src/test/thrift", "$thrift018ProjectDir/src/test/thrift"] + automaticModuleNameOverride = "com.linecorp.armeria.thrift020" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.9/build.gradle b/thrift/thrift0.9/build.gradle index b87c27ffc23..6d115af5eaf 100644 --- a/thrift/thrift0.9/build.gradle +++ b/thrift/thrift0.9/build.gradle @@ -49,6 +49,7 @@ def thriftFullVersion = libs.thrift09.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')) disableThriftJson() + automaticModuleNameOverride = "com.linecorp.armeria.thrift09" } // Keep the original Guava references in ThriftListenableFuture, From 6b7fcadb37ba48a205292a008387efcf3e65686d Mon Sep 17 00:00:00 2001 From: jrhee17 Date: Wed, 12 Feb 2025 14:35:10 +0900 Subject: [PATCH 2/2] address comment by @ikhoon --- gradle/scripts/lib/common-info.gradle | 7 +++++-- thrift/thrift0.12/build.gradle | 1 - thrift/thrift0.13/build.gradle | 1 - thrift/thrift0.14/build.gradle | 1 - thrift/thrift0.15/build.gradle | 1 - thrift/thrift0.16/build.gradle | 1 - thrift/thrift0.17/build.gradle | 1 - thrift/thrift0.18/build.gradle | 1 - thrift/thrift0.19/build.gradle | 1 - thrift/thrift0.20/build.gradle | 1 - thrift/thrift0.9/build.gradle | 1 - 11 files changed, 5 insertions(+), 12 deletions(-) diff --git a/gradle/scripts/lib/common-info.gradle b/gradle/scripts/lib/common-info.gradle index bc536c3899c..fd4b671c224 100644 --- a/gradle/scripts/lib/common-info.gradle +++ b/gradle/scripts/lib/common-info.gradle @@ -94,11 +94,14 @@ allprojects { def groupIdComponents = String.valueOf(rootProject.group).split("\\.").toList() def artifactIdComponents = String.valueOf(project.ext.artifactId).replace('-', '.').split("\\.").toList() + def generatedName if (groupIdComponents.last() == artifactIdComponents.first()) { - return String.join('.', groupIdComponents + artifactIdComponents.drop(1)) + generatedName = String.join('.', groupIdComponents + artifactIdComponents.drop(1)) } else { - return String.join('.', groupIdComponents + artifactIdComponents) + generatedName = String.join('.', groupIdComponents + artifactIdComponents) } + generatedName = generatedName.replaceAll("\\.(\\d)", "_\$1") + return generatedName } }.call() } diff --git a/thrift/thrift0.12/build.gradle b/thrift/thrift0.12/build.gradle index 674d6aaaf45..ca04e20422c 100644 --- a/thrift/thrift0.12/build.gradle +++ b/thrift/thrift0.12/build.gradle @@ -46,7 +46,6 @@ tasks.processTestResources.from "${rootProject.projectDir}/thrift/thrift0.13/src def thriftFullVersion = libs.thrift012.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')) - automaticModuleNameOverride = "com.linecorp.armeria.thrift012" } // Disable checkstyle because it's checked by ':thrift0.13'. diff --git a/thrift/thrift0.13/build.gradle b/thrift/thrift0.13/build.gradle index 666be6a54a3..79c398497c5 100644 --- a/thrift/thrift0.13/build.gradle +++ b/thrift/thrift0.13/build.gradle @@ -28,7 +28,6 @@ dependencies { def thriftFullVersion = libs.thrift013.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')) - automaticModuleNameOverride = "com.linecorp.armeria.thrift013" } // Keep the original Guava references in ThriftListenableFuture, diff --git a/thrift/thrift0.14/build.gradle b/thrift/thrift0.14/build.gradle index ba8ff4069cf..54050bcd18d 100644 --- a/thrift/thrift0.14/build.gradle +++ b/thrift/thrift0.14/build.gradle @@ -51,7 +51,6 @@ ext { // Use the old compiler. thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift014" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.15/build.gradle b/thrift/thrift0.15/build.gradle index b55cba9422b..7d8af98451e 100644 --- a/thrift/thrift0.15/build.gradle +++ b/thrift/thrift0.15/build.gradle @@ -55,7 +55,6 @@ def thriftFullVersion = libs.thrift015.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift015" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.16/build.gradle b/thrift/thrift0.16/build.gradle index 29215b27c54..3be0448c7f7 100644 --- a/thrift/thrift0.16/build.gradle +++ b/thrift/thrift0.16/build.gradle @@ -56,7 +56,6 @@ def thriftFullVersion = libs.thrift016.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift016" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.17/build.gradle b/thrift/thrift0.17/build.gradle index 92eeabcd4b7..b40b1d48741 100644 --- a/thrift/thrift0.17/build.gradle +++ b/thrift/thrift0.17/build.gradle @@ -57,7 +57,6 @@ def thriftFullVersion = libs.thrift017.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift017" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.18/build.gradle b/thrift/thrift0.18/build.gradle index 239ba034d76..28b139ab86a 100644 --- a/thrift/thrift0.18/build.gradle +++ b/thrift/thrift0.18/build.gradle @@ -59,7 +59,6 @@ def thriftFullVersion = libs.thrift018.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift", "$projectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift018" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.19/build.gradle b/thrift/thrift0.19/build.gradle index e8717b6073b..92501298efa 100644 --- a/thrift/thrift0.19/build.gradle +++ b/thrift/thrift0.19/build.gradle @@ -65,7 +65,6 @@ ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift", "$projectDir/src/test/thrift", "$thrift018ProjectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift019" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.20/build.gradle b/thrift/thrift0.20/build.gradle index d4cf4d341f9..b960e0d7a6b 100644 --- a/thrift/thrift0.20/build.gradle +++ b/thrift/thrift0.20/build.gradle @@ -67,7 +67,6 @@ ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')); testThriftSrcDirs = ["$thrift013ProjectDir/src/test/thrift", "$projectDir/src/test/thrift", "$thrift018ProjectDir/src/test/thrift"] - automaticModuleNameOverride = "com.linecorp.armeria.thrift020" } tasks.generateSources.dependsOn(generateTestSources) diff --git a/thrift/thrift0.9/build.gradle b/thrift/thrift0.9/build.gradle index 6d115af5eaf..b87c27ffc23 100644 --- a/thrift/thrift0.9/build.gradle +++ b/thrift/thrift0.9/build.gradle @@ -49,7 +49,6 @@ def thriftFullVersion = libs.thrift09.get().versionConstraint.requiredVersion ext { thriftVersion = thriftFullVersion.substring(0, thriftFullVersion.lastIndexOf('.')) disableThriftJson() - automaticModuleNameOverride = "com.linecorp.armeria.thrift09" } // Keep the original Guava references in ThriftListenableFuture,