1
1
import org.gradle.internal.jvm.Jvm
2
+ import java.nio.file.Files
3
+ import static java.nio.file.StandardCopyOption.*
2
4
3
5
apply plugin : ' java'
4
6
7
+ configurations {
8
+ // adapted from https://android.googlesource.com/platform/frameworks/testing/+/976c423/espresso/espresso-lib/build.gradle
9
+ // compileOnly dependencies will be repackaged, see rules in jarjar ant task below
10
+ jarjar
11
+ }
12
+
5
13
dependencies {
6
- compile ' com.squareup:javapoet:1.9.0'
7
- compile ' com.google.auto.service:auto-service:1.0-rc3'
14
+ // from https://code.google.com/archive/p/jarjar/downloads
15
+ jarjar files(' libs/jarjar-1.4.jar' )
16
+
17
+ compileOnly ' com.squareup:javapoet:1.9.0'
18
+ compileOnly ' com.google.auto.service:auto-service:1.0-rc3'
19
+
8
20
compile ' com.google.code.findbugs:jsr305:3.0.1'
9
21
compile project(' :annotation' )
10
22
// This is to support com.sun.tootls.javac.util.List, currently used in RootModuleGenerator.
@@ -14,4 +26,73 @@ dependencies {
14
26
testCompile ' com.google.testing.compile:compile-testing:0.10'
15
27
}
16
28
29
+ afterEvaluate {
30
+ // generate file names for each step
31
+ def resultingClassesJar = tasks. jar. archivePath
32
+ def originalClassifier = tasks. jar. classifier
33
+ tasks. jar. classifier = ' compiled'
34
+ def compiledClassesJar = tasks. jar. archivePath
35
+ tasks. jar. classifier = ' repackaged'
36
+ def repackagedClassesJar = tasks. jar. archivePath
37
+ tasks. jar. classifier = ' proguarded'
38
+ def proguardedClassesJar = tasks. jar. archivePath
39
+ tasks. jar. classifier = originalClassifier
40
+
41
+ tasks. jar. doLast {
42
+ Files . copy(resultingClassesJar. toPath(), compiledClassesJar. toPath(), REPLACE_EXISTING )
43
+ }
44
+ // Inject a jarjar task after jar into the assemble chain.
45
+ // afterEvaluate is needed to get the resolved version name for the jar artifact.
46
+ task jarjar(dependsOn : [tasks. jar, configurations. compileOnly]) {
47
+ tasks. assemble. dependsOn it
48
+
49
+ // Set up inputs and outputs to only rebuild when necessary (code change, dependency change).
50
+ inputs. file compiledClassesJar
51
+ inputs. files configurations. compileOnly
52
+ outputs. file repackagedClassesJar
53
+
54
+ doFirst {
55
+ ant {
56
+ taskdef name : ' jarjar' ,
57
+ classname : ' com.tonicsystems.jarjar.JarJarTask' ,
58
+ classpath : configurations. jarjar. asPath
59
+ // Generate the original JAR output where it was originally expected.
60
+ jarjar(jarfile : repackagedClassesJar) {
61
+ configurations. compileOnly. resolve(). each {
62
+ zipfileset(src : it. absolutePath, excludes : [
63
+ ' META-INF/maven/**' ,
64
+ ' META-INF/services/javax.annotation.processing.Processor'
65
+ ]. join(' ,' ))
66
+ }
67
+ zipfileset(src : tasks. jar. archivePath)
68
+ def repackageIntoGlide = ' com.bumptech.glide.repackaged.@0'
69
+ rule result : repackageIntoGlide, pattern : ' com.squareup.javapoet.**'
70
+ rule result : repackageIntoGlide, pattern : ' com.google.auto.**'
71
+ rule result : repackageIntoGlide, pattern : ' com.google.common.**'
72
+ rule result : repackageIntoGlide, pattern : ' com.google.thirdparty.publicsuffix.**'
73
+ }
74
+ }
75
+ }
76
+
77
+ doLast {
78
+ Files . copy(repackagedClassesJar. toPath(), resultingClassesJar. toPath(), REPLACE_EXISTING )
79
+ }
80
+ }
81
+
82
+ task proguard(type : proguard.gradle.ProGuardTask , dependsOn : tasks. jarjar) {
83
+ tasks. assemble. dependsOn it
84
+ configuration ' proguard.pro'
85
+
86
+ injars repackagedClassesJar
87
+ outjars proguardedClassesJar
88
+
89
+ libraryjars files(configurations. compile. collect())
90
+ libraryjars " ${ System.getProperty('java.home')} /lib/rt.jar"
91
+
92
+ doLast {
93
+ Files . copy(proguardedClassesJar. toPath(), resultingClassesJar. toPath(), REPLACE_EXISTING )
94
+ }
95
+ }
96
+ }
97
+
17
98
apply from : " ${ rootProject.projectDir} /scripts/upload.gradle"
0 commit comments