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