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