blob: 35ce3b65828287538347251a0a385931f323f9db [file] [log] [blame]
Yigit Boyarb1356332015-05-21 15:49:58 -07001
Yigit Boyar24bec1c2015-07-09 10:51:54 -07002buildscript {
Yigit Boyar9784c9a2015-10-12 18:59:27 -07003 ext.dataBindingRootFolder = project.projectDir
Yigit Boyar24bec1c2015-07-09 10:51:54 -07004 apply from: 'propLoader.gradle'
Yigit Boyard6ddc642015-09-11 12:59:40 -07005 apply from: 'supportBundle.gradle'
Yigit Boyar24bec1c2015-07-09 10:51:54 -07006 ext.addRepos(repositories)
Yigit Boyar9784c9a2015-10-12 18:59:27 -07007 if (ext.dataBindingConfig.addRemoteRepos) {
Yigit Boyar24bec1c2015-07-09 10:51:54 -07008 dependencies {
Yigit Boyar9784c9a2015-10-12 18:59:27 -07009 classpath "com.android.databinding:localizemaven:${dataBindingConfig.extraPluginsVersion}"
Yigit Boyar24bec1c2015-07-09 10:51:54 -070010 }
11 }
George Mount69cbd9e2015-08-26 10:46:58 -070012 dependencies {
13 classpath 'net.sf.proguard:proguard-gradle:5.2.1'
14 }
Yigit Boyar24bec1c2015-07-09 10:51:54 -070015}
Yigit Boyar840f0ce2014-12-12 16:45:00 -080016subprojects {
Yigit Boyarf9e51c02015-03-12 14:30:29 -070017 apply plugin: 'maven'
Yigit Boyar9784c9a2015-10-12 18:59:27 -070018 if (dataBindingConfig.addRemoteRepos && !dataBindingConfig.forGradlePlugin) {
Yigit Boyar24bec1c2015-07-09 10:51:54 -070019 apply plugin: 'com.android.databinding.localizemaven'
Yigit Boyar63d47892015-07-10 09:03:05 -070020 }
21
Yigit Boyar9784c9a2015-10-12 18:59:27 -070022 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 }
Yigit Boyarf9e51c02015-03-12 14:30:29 -070031 }
32 }
33 }
Yigit Boyar9784c9a2015-10-12 18:59:27 -070034
Yigit Boyar24bec1c2015-07-09 10:51:54 -070035 buildscript {
36 addRepos(repositories)
Yigit Boyar9784c9a2015-10-12 18:59:27 -070037 dependencies {
38 classpath "com.android.databinding:bintray:${dataBindingConfig.extraPluginsVersion}"
39 }
Yigit Boyar24bec1c2015-07-09 10:51:54 -070040 }
41}
42
Yigit Boyar9784c9a2015-10-12 18:59:27 -070043if (dataBindingConfig.addRemoteRepos && !dataBindingConfig.forGradlePlugin) {
Yigit Boyar24bec1c2015-07-09 10:51:54 -070044 localizeMaven {
Yigit Boyar9784c9a2015-10-12 18:59:27 -070045 localRepoDir = file(dataBindingConfig.megaRepoDir)
46 otherRepoDirs = dataBindingConfig.localRepositories
Yigit Boyar24bec1c2015-07-09 10:51:54 -070047 }
Yigit Boyarf9e51c02015-03-12 14:30:29 -070048}
49
50task deleteRepo(type: Delete) {
Yigit Boyar9784c9a2015-10-12 18:59:27 -070051 delete "${dataBindingConfig.mavenRepoDir}/${dataBindingConfig.group.replace('.', '/')}"
Yigit Boyarf9e51c02015-03-12 14:30:29 -070052}
53
Yigit Boyaree758672015-04-16 15:12:02 -070054task deletePrebuildFolder(type: Delete) {
Yigit Boyar9784c9a2015-10-12 18:59:27 -070055 delete "${dataBindingConfig.prebuildFolder}"
Yigit Boyaree758672015-04-16 15:12:02 -070056}
57
Yigit Boyarc64ae352015-04-21 14:05:41 -070058task deleteEap(type: Delete) {
Yigit Boyar9784c9a2015-10-12 18:59:27 -070059 delete "${dataBindingConfig.eapOutDir}"
Yigit Boyarc64ae352015-04-21 14:05:41 -070060}
61
62
Yigit Boyara6e45832015-03-13 15:58:53 -070063def buildExtensionsTask = project.tasks.create "buildExtensionsTask", Exec
64buildExtensionsTask.workingDir file('extensions').getAbsolutePath()
Yigit Boyara6e45832015-03-13 15:58:53 -070065buildExtensionsTask.commandLine './gradlew'
Yigit Boyarb90752c2015-09-28 16:42:16 -070066buildExtensionsTask.args 'clean', 'uploadArchives', '--info', '--stacktrace',
Yigit Boyar9784c9a2015-10-12 18:59:27 -070067 "-PuseReleaseVersion=${dataBindingConfig.inReleaseBuild ? 'true' : 'false'}",
68 "-PaddRemoteRepos=${dataBindingConfig.addRemoteRepos ? 'true' : 'false'}",
69 "-PforGradlePlugin=${dataBindingConfig.forGradlePlugin ? 'true' : 'false'}"
Yigit Boyara6e45832015-03-13 15:58:53 -070070buildExtensionsTask.dependsOn subprojects.uploadArchives
71
Yigit Boyard6ddc642015-09-11 12:59:40 -070072tasks['bundleSupportLib'].dependsOn buildExtensionsTask
73
Yigit Boyaree758672015-04-16 15:12:02 -070074def prepareExtensionPrebuilds = project.tasks.create "prepareExtensionPrebuilds", Exec
75prepareExtensionPrebuilds.workingDir file('extensions').getAbsolutePath()
76prepareExtensionPrebuilds.commandLine './gradlew'
Yigit Boyarb90752c2015-09-28 16:42:16 -070077prepareExtensionPrebuilds.args 'clean', 'preparePrebuilds', '--info', '--stacktrace',
Yigit Boyar9784c9a2015-10-12 18:59:27 -070078 "-PuseReleaseVersion=${dataBindingConfig.inReleaseBuild ? 'true' : 'false'}",
79 "-PaddRemoteRepos=${dataBindingConfig.addRemoteRepos ? 'true' : 'false'}",
80 "-PforGradlePlugin=${dataBindingConfig.forGradlePlugin ? 'true' : 'false'}"
Yigit Boyaree758672015-04-16 15:12:02 -070081prepareExtensionPrebuilds.dependsOn subprojects.uploadArchives
82
Yigit Boyarf9e51c02015-03-12 14:30:29 -070083file('integration-tests').listFiles().findAll { it.isDirectory() }.each {
Yigit Boyara6e45832015-03-13 15:58:53 -070084 println("Creating run test task for ${it.getAbsolutePath()}.")
Yigit Boyarf9e51c02015-03-12 14:30:29 -070085 def testTask = project.tasks.create "runTestsOf${it.getName().capitalize()}", Exec
Yigit Boyara6e45832015-03-13 15:58:53 -070086 testTask.workingDir it.getAbsolutePath()
Yigit Boyarf9e51c02015-03-12 14:30:29 -070087 //on linux
88 testTask.commandLine './gradlew'
Yigit Boyarb90752c2015-09-28 16:42:16 -070089 testTask.args 'clean', 'connectedCheck', '--info', '--stacktrace',
Yigit Boyar9784c9a2015-10-12 18:59:27 -070090 "-PuseReleaseVersion=${dataBindingConfig.inReleaseBuild ? 'true' : 'false'}",
91 "-PaddRemoteRepos=${dataBindingConfig.addRemoteRepos ? 'true' : 'false'}",
92 "-PforGradlePlugin=${dataBindingConfig.forGradlePlugin ? 'true' : 'false'}"
Yigit Boyarf9e51c02015-03-12 14:30:29 -070093 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
Yigit Boyaree758672015-04-16 15:12:02 -0700104task preparePrebuilds() {
105 dependsOn deletePrebuildFolder
106 dependsOn prepareExtensionPrebuilds
107}
108
Yigit Boyarf9e51c02015-03-12 14:30:29 -0700109allprojects {
110 afterEvaluate { project ->
111 runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('test')}
Yigit Boyara6e45832015-03-13 15:58:53 -0700112 runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('connectedCheck')}
Yigit Boyaree758672015-04-16 15:12:02 -0700113 preparePrebuilds.dependsOn project.tasks.findAll {task -> task.name.startsWith('prebuild')}
Yigit Boyarf9e51c02015-03-12 14:30:29 -0700114 }
115}
116
Yigit Boyara6e45832015-03-13 15:58:53 -0700117subprojects.uploadArchives.each { it.shouldRunAfter deleteRepo }
Yigit Boyarae161282015-04-21 11:02:58 -0700118subprojects.uploadArchives.each { it.shouldRunAfter deletePrebuildFolder }
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700119def dataBindingPublishLocal = tasks.create(name: 'publishLocal')
120subprojects.uploadArchives.each {
121 dataBindingPublishLocal.dependsOn(it)
122}
123
Yigit Boyara6e45832015-03-13 15:58:53 -0700124buildExtensionsTask.shouldRunAfter deleteRepo
Yigit Boyar99a3d312015-03-25 12:46:05 -0700125tasks['runTestsOfMultiModuleTestApp'].dependsOn tasks['runTestsOfIndependentLibrary']
Yigit Boyara6e45832015-03-13 15:58:53 -0700126
Yigit Boyarf9e51c02015-03-12 14:30:29 -0700127
128task rebuildRepo() {
129 dependsOn deleteRepo
130 dependsOn subprojects.uploadArchives
Yigit Boyaree758672015-04-16 15:12:02 -0700131}
132
Yigit Boyarc64ae352015-04-21 14:05:41 -0700133task copySamplesToEap(type : Copy) {
134 mustRunAfter deleteEap
135 from ("$projectDir/samples") {
136 exclude "**/build"
Yigit Boyar2939c3b2015-04-23 15:03:56 -0700137 exclude "**/local.properties"
Yigit Boyarc64ae352015-04-21 14:05:41 -0700138 }
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700139 into "${dataBindingConfig.eapOutDir}/samples"
Yigit Boyarc64ae352015-04-21 14:05:41 -0700140}
141
142
143task copyMavenRepoToEap(type : Copy) {
144 mustRunAfter deleteEap
145 dependsOn rebuildRepo
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700146 from(dataBindingConfig.mavenRepoDir)
147 into "${dataBindingConfig.eapOutDir}/${dataBindingConfig.mavenRepoName}"
Yigit Boyarc64ae352015-04-21 14:05:41 -0700148}
149
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700150tasks.create(name : 'createEapdataBindingConfigFile') << {
151 def propsFile = new File("${dataBindingConfig.eapOutDir}/databinding.properties")
Yigit Boyarc64ae352015-04-21 14:05:41 -0700152 Properties props = new Properties()
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700153 props.setProperty('version', dataBindingConfig.version)
154 props.setProperty('mavenRepoName', dataBindingConfig.mavenRepoName)
Yigit Boyarc64ae352015-04-21 14:05:41 -0700155 props.store(propsFile.newWriter(), null)
156}
157
Yigit Boyarc64ae352015-04-21 14:05:41 -0700158task batchEAP() {
159 dependsOn deleteEap
160 dependsOn copyMavenRepoToEap
161 dependsOn copySamplesToEap
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700162 dependsOn createEapdataBindingConfigFile
Yigit Boyar24bec1c2015-07-09 10:51:54 -0700163}
George Mount69cbd9e2015-08-26 10:46:58 -0700164
165def fullJar(project) {
166 def localizeTask = project.parent.tasks.findByName('localizeDependencies')
167 if (localizeTask != null) {
168 localizeTask.dependsOn project.tasks.findByName('buildLicenseNotice')
169 }
170
Yigit Boyar499caca2015-10-30 17:09:12 +0000171 if (!dataBindingConfig.runProguard) {
George Mount69cbd9e2015-08-26 10:46:58 -0700172 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 }
Yigit Boyar499caca2015-10-30 17:09:12 +0000195 from { deps.findAll { !it.name.contains('baseLibrary') && !it.name.contains("juniversalchardet")}.collect {
George Mount69cbd9e2015-08-26 10:46:58 -0700196 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 {
Yigit Boyar9784c9a2015-10-12 18:59:27 -0700227 def jarJarLibrary = new File(dataBindingConfig.externalPrebuiltsBase,
George Mount69cbd9e2015-08-26 10:46:58 -0700228 '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'
Yigit Boyar499caca2015-10-30 17:09:12 +0000241 rule pattern: 'org.abego.treelayout.**', result: 'com.google.repacked.treelayout.@1'
George Mount69cbd9e2015-08-26 10:46:58 -0700242 // rule to repackage commons
243 rule pattern: 'org.apache.**', result: 'com.google.repacked.apache.@1'
244 rule pattern: 'kotlin.**', result: 'com.google.repacked.kotlin.@1'
245 }
246 }
247 }
248
249 project.uploadArchives {
250 dependsOn 'jarJarFile'
251 repositories {
252 mavenDeployer {
253 pom.whenConfigured { pom ->
254 pom.dependencies.removeAll { dep ->
255 def isBaseLibrary = dep.groupId == 'com.android.databinding' &&
256 dep.artifactId == 'baseLibrary'
257 def isGradle = dep.groupId == 'com.android.tools.build' &&
258 dep.artifactId == 'gradle'
Yigit Boyar499caca2015-10-30 17:09:12 +0000259 def isChardet = dep.groupId == 'com.googlecode.juniversalchardet' &&
260 dep.artifactId == 'juniversalchardet'
261 return !isBaseLibrary && !isGradle && !isChardet
George Mount69cbd9e2015-08-26 10:46:58 -0700262 }
263 }
264 }
265 }
266 }
267}