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