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
+
1
7
buildscript {
2
8
repositories {
3
9
gradlePluginPortal()
4
10
}
5
11
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'
7
14
}
8
15
}
9
16
10
17
plugins {
11
18
id ' io.pivotal.cfenv.java-conventions'
12
19
}
13
20
14
- apply plugin : ' com.github.johnrengelman .shadow'
21
+ apply plugin : ' com.gradleup .shadow'
15
22
apply plugin : ' java-library'
16
23
17
24
description = ' java-cfenv-all, contains all java-cfenv modules in a convenient uberjar - to be used with CF Java Buildpack'
@@ -23,15 +30,63 @@ dependencies {
23
30
testImplementation ' org.springframework.boot:spring-boot-starter-test'
24
31
}
25
32
26
- import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer
27
-
28
33
shadowJar {
29
34
archiveClassifier. set(' ' )
30
35
mergeServiceFiles()
31
36
transform(PropertiesFileTransformer ) {
32
37
paths = [' META-INF/spring.factories' ]
33
38
mergeStrategy = " append"
34
39
}
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
+ })
35
90
dependencies {
36
91
exclude(dependency(' org.springframework.boot::' ))
37
92
exclude(dependency(' org.springframework::' ))
0 commit comments