build.gradle revision b90752c49ab83e20c7cd8fe27da94117ad332df8
1
2buildscript {
3    ext.rootFolder = project.projectDir
4    apply from: 'propLoader.gradle'
5    apply from: 'supportBundle.gradle'
6    ext.addRepos(repositories)
7    if (ext.config.addRemoteRepos) {
8        dependencies {
9            classpath "com.android.databinding:localizemaven:${config.extraPluginsVersion}"
10        }
11    }
12    dependencies {
13        classpath 'net.sf.proguard:proguard-gradle:5.2.1'
14    }
15}
16subprojects {
17    apply plugin: 'maven'
18    if (config.addRemoteRepos) {
19        apply plugin: 'com.android.databinding.localizemaven'
20    }
21
22    group = config.group
23    version = config.version
24    def url = (config.inReleaseBuild && it.name == "library") ? "file://${config.sharedSupportRepoDir}" : "file://${config.mavenRepoDir}"
25    uploadArchives {
26        repositories {
27            mavenDeployer {
28                repository(url: url)
29            }
30        }
31    }
32    buildscript {
33        addRepos(repositories)
34        dependencies {
35            classpath "com.android.databinding:bintray:${config.extraPluginsVersion}"
36        }
37    }
38}
39
40if (config.addRemoteRepos) {
41    localizeMaven {
42        localRepoDir = file(config.megaRepoDir)
43        otherRepoDirs = config.localRepositories
44    }
45}
46
47task deleteRepo(type: Delete) {
48    delete "${config.mavenRepoDir}/${config.group.replace('.', '/')}"
49}
50
51task deletePrebuildFolder(type: Delete) {
52    delete "${config.prebuildFolder}"
53}
54
55task deleteEap(type: Delete) {
56    delete "${config.eapOutDir}"
57}
58
59
60def buildExtensionsTask = project.tasks.create "buildExtensionsTask", Exec
61buildExtensionsTask.workingDir file('extensions').getAbsolutePath()
62buildExtensionsTask.commandLine './gradlew'
63buildExtensionsTask.args 'clean', 'uploadArchives', '--info', '--stacktrace',
64        "-PuseReleaseVersion=${config.inReleaseBuild ? 'true' : 'false'}",
65        "-PaddRemoteRepos=${config.addRemoteRepos ? 'true' : 'false'}"
66buildExtensionsTask.dependsOn subprojects.uploadArchives
67
68tasks['bundleSupportLib'].dependsOn buildExtensionsTask
69
70def prepareExtensionPrebuilds = project.tasks.create "prepareExtensionPrebuilds", Exec
71prepareExtensionPrebuilds.workingDir file('extensions').getAbsolutePath()
72prepareExtensionPrebuilds.commandLine './gradlew'
73prepareExtensionPrebuilds.args 'clean', 'preparePrebuilds', '--info', '--stacktrace',
74        "-PuseReleaseVersion=${config.inReleaseBuild ? 'true' : 'false'}",
75        "-PaddRemoteRepos=${config.addRemoteRepos ? 'true' : 'false'}"
76prepareExtensionPrebuilds.dependsOn subprojects.uploadArchives
77
78file('integration-tests').listFiles().findAll { it.isDirectory() }.each {
79    println("Creating run test task for  ${it.getAbsolutePath()}.")
80    def testTask = project.tasks.create "runTestsOf${it.getName().capitalize()}", Exec
81    testTask.workingDir it.getAbsolutePath()
82    //on linux
83    testTask.commandLine './gradlew'
84    testTask.args 'clean', 'connectedCheck', '--info', '--stacktrace',
85            "-PuseReleaseVersion=${config.inReleaseBuild ? 'true' : 'false'}",
86            "-PaddRemoteRepos=${config.addRemoteRepos ? 'true' : 'false'}"
87    testTask.dependsOn subprojects.uploadArchives
88    testTask.dependsOn buildExtensionsTask
89}
90
91task runIntegrationTests {
92    dependsOn tasks.findAll { task -> task.name.startsWith('runTestsOf') }
93}
94
95task runAllTests {
96    dependsOn runIntegrationTests
97}
98
99task preparePrebuilds() {
100    dependsOn deletePrebuildFolder
101    dependsOn prepareExtensionPrebuilds
102}
103
104allprojects {
105    afterEvaluate { project ->
106        runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('test')}
107        runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('connectedCheck')}
108        preparePrebuilds.dependsOn project.tasks.findAll {task -> task.name.startsWith('prebuild')}
109    }
110}
111
112subprojects.uploadArchives.each { it.shouldRunAfter deleteRepo  }
113subprojects.uploadArchives.each { it.shouldRunAfter deletePrebuildFolder  }
114buildExtensionsTask.shouldRunAfter deleteRepo
115tasks['runTestsOfMultiModuleTestApp'].dependsOn tasks['runTestsOfIndependentLibrary']
116
117
118task rebuildRepo() {
119    dependsOn deleteRepo
120    dependsOn subprojects.uploadArchives
121    dependsOn buildExtensionsTask
122}
123
124task copySamplesToEap(type : Copy) {
125    mustRunAfter deleteEap
126    from ("$projectDir/samples") {
127        exclude "**/build"
128        exclude "**/local.properties"
129    }
130    into "${config.eapOutDir}/samples"
131}
132
133
134task copyMavenRepoToEap(type : Copy) {
135    mustRunAfter deleteEap
136    dependsOn rebuildRepo
137    from(config.mavenRepoDir)
138    into "${config.eapOutDir}/${config.mavenRepoName}"
139}
140
141tasks.create(name : 'createEapConfigFile') << {
142    def propsFile = new File("${config.eapOutDir}/databinding.properties")
143    Properties props = new Properties()
144    props.setProperty('version', config.version)
145    props.setProperty('mavenRepoName', config.mavenRepoName)
146    props.store(propsFile.newWriter(), null)
147}
148
149
150task batchEAP() {
151    dependsOn deleteEap
152    dependsOn copyMavenRepoToEap
153    dependsOn copySamplesToEap
154    dependsOn createEapConfigFile
155}
156
157def fullJar(project) {
158    def localizeTask = project.parent.tasks.findByName('localizeDependencies')
159    if (localizeTask != null) {
160        localizeTask.dependsOn project.tasks.findByName('buildLicenseNotice')
161    }
162
163    if (!config.inReleaseBuild) {
164        return
165    }
166    def jarName = project.uploadArchives.repositories.mavenDeployer.pom.artifactId
167    def workingDir = "${project.buildDir}/intermediates/fullJar"
168    def fatJar = "${workingDir}/${jarName}-fat.jar"
169    def proguardJar = "${workingDir}/${jarName}-proguard.jar"
170    def jarJar = project.jar.archivePath
171
172    project.configurations {
173        jarJarArchives
174    }
175
176    project.tasks.create(name: 'fatJar', type: Jar) {
177        baseName = jarName + '-fat'
178        doFirst {
179            file(workingDir).mkdirs()
180        }
181        def deps = new HashSet<ResolvedDependency>()
182        project.configurations.compile.resolvedConfiguration.firstLevelModuleDependencies.each {
183            if (!it.moduleGroup.startsWith('com.android.tools')) {
184                deps.addAll(it.allModuleArtifacts)
185            }
186        }
187        from { deps.findAll { !it.name.contains('baseLibrary')}.collect {
188            it.file.isDirectory() ? it.file : project.zipTree(it.file)
189        } } {
190            exclude "META-INF/maven/**"
191            exclude "META-INF/MANIFEST.MF"
192            exclude "META-INF/LICENSE.txt"
193            exclude "META-INF/NOTICE.txt"
194            exclude "META-INF/services/javax.annotation.processing.Processor"
195            exclude "**/*.stg"
196        }
197        archiveName "${baseName}.jar"
198        destinationDir = new File(workingDir)
199        with project.jar
200    }
201    project.tasks.create(name: 'proguard', type: proguard.gradle.ProGuardTask) {
202        dependsOn 'fatJar'
203
204        injars  fatJar
205        outjars proguardJar
206
207        configuration '../proguard.cfg'
208    }
209
210    project.tasks.create(name: 'jarJarFile') {
211        dependsOn 'proguard'
212        dependsOn project.jar
213        def inputLibrary = proguardJar
214        def outputLibrary = jarJar
215        inputs.file(inputLibrary)
216        outputs.file(outputLibrary)
217
218        doLast {
219            def jarJarLibrary = new File(config.externalPrebuiltsBase,
220                    'tools/common/m2/repository/com/googlecode/jarjar/jarjar/1.3/jarjar-1.3.jar').
221                    getCanonicalPath()
222            // in Ant
223            ant.taskdef(name: "jarjarIt",
224                    classname: 'com.tonicsystems.jarjar.JarJarTask',
225                    classpath: jarJarLibrary)
226            // start jarjar task
227            ant.jarjarIt(jarfile: outputLibrary) {
228                // input is our inputLibrary
229                zipfileset(src: inputLibrary)
230                // rule to repackage antlr to new package
231                rule pattern: 'org.antlr.**', result: 'com.google.repacked.antlr.@1'
232                rule pattern: 'com.tunnelvisionlabs.**', result: 'com.google.repacked.tunnelvision.@1'
233                // rule to repackage commons
234                rule pattern: 'org.apache.**', result: 'com.google.repacked.apache.@1'
235                rule pattern: 'kotlin.**', result: 'com.google.repacked.kotlin.@1'
236            }
237        }
238    }
239
240    project.uploadArchives {
241        dependsOn 'jarJarFile'
242        repositories {
243            mavenDeployer {
244                pom.whenConfigured { pom ->
245                    pom.dependencies.removeAll { dep ->
246                        def isBaseLibrary = dep.groupId == 'com.android.databinding' &&
247                                dep.artifactId == 'baseLibrary'
248                        def isGradle = dep.groupId == 'com.android.tools.build' &&
249                                dep.artifactId == 'gradle'
250                        return !isBaseLibrary && !isGradle
251                    }
252                }
253            }
254        }
255    }
256}
257