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