Skip to content

Commit 2ac0f1d

Browse files
authored
Support relocating Groovy extensions in Module descriptors (#1705)
* Relocate `extensionClasses` and `staticExtensionClasses` * Update changelog * Relocate `extensionModulePath` * Test `groovyExtensionModuleTransformerWithRelocation` * Revert "Relocate `extensionModulePath`" This reverts commit 19be498 * Cleanup
1 parent e8df109 commit 2ac0f1d

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

docs/changes/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
### Added
77

8+
- Support relocating Groovy extensions in Module descriptors. ([#1705](https://github.com/GradleUp/shadow/pull/1705))
89
- Add extensions for `Iterable<Relocator>`. ([#1710](https://github.com/GradleUp/shadow/pull/1710))
910

1011
### Changed

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformerTest.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.GroovyExtensionMo
1010
import com.github.jengelman.gradle.plugins.shadow.transformers.GroovyExtensionModuleTransformer.Companion.MERGED_MODULE_VERSION
1111
import com.github.jengelman.gradle.plugins.shadow.transformers.GroovyExtensionModuleTransformer.Companion.PATH_GROOVY_EXTENSION_MODULE_DESCRIPTOR
1212
import com.github.jengelman.gradle.plugins.shadow.transformers.GroovyExtensionModuleTransformer.Companion.PATH_LEGACY_GROOVY_EXTENSION_MODULE_DESCRIPTOR
13+
import com.github.jengelman.gradle.plugins.shadow.util.JarPath
1314
import com.github.jengelman.gradle.plugins.shadow.util.getContent
1415
import java.nio.file.Path
1516
import kotlin.io.path.appendText
17+
import org.junit.jupiter.api.Test
1618
import org.junit.jupiter.params.ParameterizedTest
1719
import org.junit.jupiter.params.provider.Arguments
1820
import org.junit.jupiter.params.provider.MethodSource
@@ -63,6 +65,35 @@ class GroovyExtensionModuleTransformerTest : BaseTransformerTest() {
6365
commonAssertions()
6466
}
6567

68+
@Test
69+
fun groovyExtensionModuleTransformerWithRelocation() {
70+
projectScript.appendText(
71+
"""
72+
dependencies {
73+
${implementationFiles(buildJarFoo(), buildJarBar())}
74+
}
75+
$shadowJarTask {
76+
relocate('com.acme', 'com.example.shaded.acme')
77+
mergeGroovyExtensionModules()
78+
}
79+
""".trimIndent(),
80+
)
81+
82+
run(shadowJarPath)
83+
84+
val properties = outputShadowedJar.extensionModuleProperties
85+
86+
assertThat(properties.getProperty(KEY_MODULE_NAME)).isEqualTo(MERGED_MODULE_NAME)
87+
assertThat(properties.getProperty(KEY_MODULE_VERSION)).isEqualTo(MERGED_MODULE_VERSION)
88+
assertThat(properties.getProperty(KEY_EXTENSION_CLASSES))
89+
.isEqualTo(
90+
"com.example.shaded.acme.foo.FooExtension,com.example.shaded.acme.foo.BarExtension," +
91+
"com.example.shaded.acme.bar.SomeExtension,com.example.shaded.acme.bar.AnotherExtension",
92+
)
93+
assertThat(properties.getProperty(KEY_STATIC_EXTENSION_CLASSES))
94+
.isEqualTo("com.example.shaded.acme.foo.FooStaticExtension,com.example.shaded.acme.bar.SomeStaticExtension")
95+
}
96+
6697
private fun buildJarFoo(
6798
entry: String = PATH_GROOVY_EXTENSION_MODULE_DESCRIPTOR,
6899
): Path = buildJar("foo.jar") {
@@ -92,7 +123,7 @@ class GroovyExtensionModuleTransformerTest : BaseTransformerTest() {
92123
}
93124

94125
private fun commonAssertions() {
95-
val properties = outputShadowedJar.use { it.getContent(PATH_GROOVY_EXTENSION_MODULE_DESCRIPTOR) }.toProperties()
126+
val properties = outputShadowedJar.extensionModuleProperties
96127

97128
assertThat(properties.getProperty(KEY_MODULE_NAME)).isEqualTo(MERGED_MODULE_NAME)
98129
assertThat(properties.getProperty(KEY_MODULE_VERSION)).isEqualTo(MERGED_MODULE_VERSION)
@@ -108,6 +139,10 @@ class GroovyExtensionModuleTransformerTest : BaseTransformerTest() {
108139
const val STATIC_EXTENSION_CLASSES_FOO = "com.acme.foo.FooStaticExtension"
109140
const val STATIC_EXTENSION_CLASSES_BAR = "com.acme.bar.SomeStaticExtension"
110141

142+
val JarPath.extensionModuleProperties get() = use {
143+
it.getContent(PATH_GROOVY_EXTENSION_MODULE_DESCRIPTOR).toProperties()
144+
}
145+
111146
@JvmStatic
112147
fun resourcePathProvider() = listOf(
113148
Arguments.of(PATH_LEGACY_GROOVY_EXTENSION_MODULE_DESCRIPTOR, PATH_LEGACY_GROOVY_EXTENSION_MODULE_DESCRIPTOR),

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.jengelman.gradle.plugins.shadow.transformers
22

33
import com.github.jengelman.gradle.plugins.shadow.internal.inputStream
44
import com.github.jengelman.gradle.plugins.shadow.internal.zipEntry
5+
import com.github.jengelman.gradle.plugins.shadow.relocation.relocateClass
56
import java.util.Properties
67
import org.apache.tools.zip.ZipOutputStream
78
import org.gradle.api.file.FileTreeElement
@@ -45,8 +46,13 @@ public open class GroovyExtensionModuleTransformer : ResourceTransformer {
4546
}
4647
KEY_EXTENSION_CLASSES,
4748
KEY_STATIC_EXTENSION_CLASSES,
48-
-> handle(key, value as String) { existingValue ->
49-
module.setProperty(key, "$existingValue,$value")
49+
-> {
50+
val relocatedClasses = (value as String).split(',').joinToString(",") { className ->
51+
context.relocators.relocateClass(className)
52+
}
53+
handle(key, relocatedClasses) { existingValue ->
54+
module.setProperty(key, "$existingValue,$relocatedClasses")
55+
}
5056
}
5157
}
5258
}

0 commit comments

Comments
 (0)