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