1+ import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer
2+ import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext
3+ import org.apache.tools.zip.ZipEntry
4+ import org.apache.tools.zip.ZipOutputStream
5+ import org.codehaus.plexus.util.IOUtil
6+
17buildscript {
28 repositories {
39 gradlePluginPortal()
410 }
511 dependencies {
6- classpath ' com.github.johnrengelman:shadow:8.1.1'
12+ // groupId changed from com.github.johnrengelman to com.gradleup.shadow
13+ classpath ' com.gradleup.shadow:shadow-gradle-plugin:8.3.3'
714 }
815}
916
1017plugins {
1118 id ' io.pivotal.cfenv.java-conventions'
1219}
1320
14- apply plugin : ' com.github.johnrengelman .shadow'
21+ apply plugin : ' com.gradleup .shadow'
1522apply plugin : ' java-library'
1623
1724description = ' java-cfenv-all, contains all java-cfenv modules in a convenient uberjar - to be used with CF Java Buildpack'
@@ -23,15 +30,63 @@ dependencies {
2330 testImplementation ' org.springframework.boot:spring-boot-starter-test'
2431}
2532
26- import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer
27-
2833shadowJar {
2934 archiveClassifier. set(' ' )
3035 mergeServiceFiles()
3136 transform(PropertiesFileTransformer ) {
3237 paths = [' META-INF/spring.factories' ]
3338 mergeStrategy = " append"
3439 }
40+ // Fix #275: json-io uses text config file with packages names; those names need to be updated, with values we gave to the relocator
41+ transform(new com.github.jengelman.gradle.plugins.shadow.transformers.Transformer () {
42+
43+ private Map<String , String > configTextFiles = new HashMap<> ()
44+
45+ @Override
46+ boolean canTransformResource (FileTreeElement fileTreeElement ) {
47+ var isConfigFileText = fileTreeElement. getName(). startsWith(" config/" ) && fileTreeElement. getName(). endsWith(" .txt" )
48+ return isConfigFileText
49+ }
50+
51+ @Override
52+ void transform (TransformerContext transformerContext ) {
53+ def originalPackageName = transformerContext. relocators. get(0 ). pattern
54+ def relocatedPackageName = transformerContext. relocators. get(0 ). shadedPattern
55+
56+ String originalFileContent = transformerContext. is. getText(" UTF-8" )
57+ if (originalFileContent. contains(originalPackageName)) {
58+ println " transforming " + transformerContext. path
59+ def modifiedFileContent = originalFileContent. replaceAll(originalPackageName, relocatedPackageName)
60+ configTextFiles. put(transformerContext. path, modifiedFileContent)
61+ } else {
62+ configTextFiles. put(transformerContext. path, originalFileContent)
63+ }
64+ }
65+
66+ @Override
67+ boolean hasTransformedResource () {
68+ return true
69+ }
70+
71+ @Override
72+ void modifyOutputStream (ZipOutputStream zipOutputStream , boolean preserveFileTimestamps ) {
73+ // cannot close the writer as the OutputStream needs to remain open
74+ def zipWriter = new OutputStreamWriter (zipOutputStream, ' UTF-8' )
75+ configTextFiles. each { String path , String fileContent ->
76+ ZipEntry entry = new ZipEntry (path)
77+ entry. time = TransformerContext . getEntryTimestamp(preserveFileTimestamps, entry. time)
78+ zipOutputStream. putNextEntry(entry)
79+ IOUtil . copy(new ByteArrayInputStream (fileContent. getBytes(' UTF-8' )), zipWriter)
80+ zipWriter. flush()
81+ zipOutputStream. closeEntry()
82+ }
83+ }
84+
85+ @Override
86+ String getName () {
87+ return " "
88+ }
89+ })
3590 dependencies {
3691 exclude(dependency(' org.springframework.boot::' ))
3792 exclude(dependency(' org.springframework::' ))
0 commit comments