302 lines
11 KiB
Groovy
302 lines
11 KiB
Groovy
import groovy.xml.QName
|
|
|
|
buildscript {
|
|
ext.dataBindingRootFolder = project.projectDir
|
|
apply from: 'propLoader.gradle'
|
|
ext.addRepos(repositories)
|
|
if (ext.dataBindingConfig.addRemoteRepos) {
|
|
dependencies {
|
|
classpath "com.android.databinding:localizemaven:${dataBindingConfig.extraPluginsVersion}"
|
|
}
|
|
}
|
|
dependencies {
|
|
classpath 'net.sf.proguard:proguard-gradle:5.2.1'
|
|
}
|
|
}
|
|
|
|
subprojects {
|
|
if (dataBindingConfig.isIndependent) {
|
|
apply plugin: 'maven'
|
|
if (dataBindingConfig.addRemoteRepos && !dataBindingConfig.forGradlePlugin) {
|
|
apply plugin: 'com.android.databinding.localizemaven'
|
|
}
|
|
} else {
|
|
apply from: "${project.projectDir}/../../buildSrc/base/baseJava.gradle"
|
|
}
|
|
|
|
if (it.name != "compilationTests") {
|
|
group = dataBindingConfig.group
|
|
version = dataBindingConfig.version
|
|
uploadArchives {
|
|
repositories {
|
|
mavenDeployer {
|
|
repository(url: "file://${dataBindingConfig.mavenRepoDir}")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
buildscript {
|
|
addRepos(repositories)
|
|
}
|
|
|
|
}
|
|
|
|
if (dataBindingConfig.addRemoteRepos && !dataBindingConfig.forGradlePlugin) {
|
|
rootProject.localizeMaven {
|
|
localRepoDir = file(dataBindingConfig.megaRepoDir)
|
|
otherRepoDirs = dataBindingConfig.localRepositories
|
|
}
|
|
}
|
|
|
|
task deleteRepo(type: Delete) {
|
|
delete "${dataBindingConfig.mavenRepoDir}/${dataBindingConfig.group.replace('.', '/')}"
|
|
}
|
|
|
|
task deletePrebuildFolder(type: Delete) {
|
|
delete "${dataBindingConfig.prebuildFolder}"
|
|
}
|
|
|
|
task deleteEap(type: Delete) {
|
|
delete "${dataBindingConfig.eapOutDir}"
|
|
}
|
|
|
|
|
|
def buildExtensionsTask = project.tasks.create "buildExtensionsTask", Exec
|
|
buildExtensionsTask.workingDir file('extensions').getAbsolutePath()
|
|
buildExtensionsTask.commandLine './gradlew'
|
|
buildExtensionsTask.args 'clean', 'uploadArchives', '--info', '--stacktrace',
|
|
"-PuseReleaseVersion=${dataBindingConfig.inReleaseBuild ? 'true' : 'false'}",
|
|
"-PaddRemoteRepos=${dataBindingConfig.addRemoteRepos ? 'true' : 'false'}",
|
|
"-PforGradlePlugin=${dataBindingConfig.forGradlePlugin ? 'true' : 'false'}"
|
|
buildExtensionsTask.dependsOn subprojects.uploadArchives
|
|
|
|
def prepareExtensionPrebuilds = project.tasks.create "prepareExtensionPrebuilds", Exec
|
|
prepareExtensionPrebuilds.workingDir file('extensions').getAbsolutePath()
|
|
prepareExtensionPrebuilds.commandLine './gradlew'
|
|
prepareExtensionPrebuilds.args 'clean', 'preparePrebuilds', '--info', '--stacktrace',
|
|
"-PuseReleaseVersion=${dataBindingConfig.inReleaseBuild ? 'true' : 'false'}",
|
|
"-PaddRemoteRepos=${dataBindingConfig.addRemoteRepos ? 'true' : 'false'}",
|
|
"-PforGradlePlugin=${dataBindingConfig.forGradlePlugin ? 'true' : 'false'}"
|
|
prepareExtensionPrebuilds.dependsOn subprojects.uploadArchives
|
|
|
|
file('integration-tests').listFiles().findAll { it.isDirectory() }.each {
|
|
println("Creating run test task for ${it.getAbsolutePath()}.")
|
|
def testTask = project.tasks.create "runTestsOf${it.getName().capitalize()}", Exec
|
|
testTask.workingDir it.getAbsolutePath()
|
|
//on linux
|
|
testTask.commandLine './gradlew'
|
|
testTask.args 'clean', 'connectedCheck', '--info', '--stacktrace',
|
|
"-PuseReleaseVersion=${dataBindingConfig.inReleaseBuild ? 'true' : 'false'}",
|
|
"-PaddRemoteRepos=${dataBindingConfig.addRemoteRepos ? 'true' : 'false'}",
|
|
"-PforGradlePlugin=${dataBindingConfig.forGradlePlugin ? 'true' : 'false'}"
|
|
testTask.dependsOn subprojects.uploadArchives
|
|
}
|
|
|
|
task runIntegrationTests {
|
|
dependsOn tasks.findAll { task -> task.name.startsWith('runTestsOf') }
|
|
}
|
|
|
|
task runAllTests {
|
|
dependsOn runIntegrationTests
|
|
}
|
|
|
|
task preparePrebuilds() {
|
|
dependsOn deletePrebuildFolder
|
|
dependsOn prepareExtensionPrebuilds
|
|
}
|
|
|
|
allprojects {
|
|
afterEvaluate { project ->
|
|
runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('test')}
|
|
runAllTests.dependsOn project.tasks.findAll {task -> task.name.equals('connectedCheck')}
|
|
preparePrebuilds.dependsOn project.tasks.findAll {task -> task.name.startsWith('prebuild')}
|
|
}
|
|
}
|
|
|
|
subprojects.uploadArchives.each { it.shouldRunAfter deleteRepo }
|
|
subprojects.uploadArchives.each { it.shouldRunAfter deletePrebuildFolder }
|
|
|
|
buildExtensionsTask.shouldRunAfter deleteRepo
|
|
tasks['runTestsOfMultiModuleTestApp'].dependsOn tasks['runTestsOfIndependentLibrary']
|
|
|
|
|
|
task rebuildRepo() {
|
|
dependsOn deleteRepo
|
|
dependsOn subprojects.uploadArchives
|
|
}
|
|
|
|
task copySamplesToEap(type : Copy) {
|
|
mustRunAfter deleteEap
|
|
from ("$projectDir/samples") {
|
|
exclude "**/build"
|
|
exclude "**/local.properties"
|
|
}
|
|
into "${dataBindingConfig.eapOutDir}/samples"
|
|
}
|
|
|
|
|
|
task copyMavenRepoToEap(type : Copy) {
|
|
mustRunAfter deleteEap
|
|
dependsOn rebuildRepo
|
|
from(dataBindingConfig.mavenRepoDir)
|
|
into "${dataBindingConfig.eapOutDir}/${dataBindingConfig.mavenRepoName}"
|
|
}
|
|
|
|
tasks.create(name : 'createEapdataBindingConfigFile') << {
|
|
def propsFile = new File("${dataBindingConfig.eapOutDir}/databinding.properties")
|
|
Properties props = new Properties()
|
|
props.setProperty('version', dataBindingConfig.version)
|
|
props.setProperty('mavenRepoName', dataBindingConfig.mavenRepoName)
|
|
props.store(propsFile.newWriter(), null)
|
|
}
|
|
|
|
task batchEAP() {
|
|
dependsOn deleteEap
|
|
dependsOn copyMavenRepoToEap
|
|
dependsOn copySamplesToEap
|
|
dependsOn createEapdataBindingConfigFile
|
|
}
|
|
|
|
def findChildByTag(node, tag) {
|
|
return node.children().find {
|
|
it.name().getLocalPart().equals(tag)
|
|
}
|
|
}
|
|
|
|
def fullJar(project) {
|
|
def localizeTask = project.parent.tasks.findByName('localizeDependencies')
|
|
if (localizeTask != null) {
|
|
localizeTask.dependsOn project.tasks.findByName('buildLicenseNotice')
|
|
}
|
|
if (!dataBindingConfig.inReleaseBuild) {
|
|
return
|
|
}
|
|
def jarName = project.uploadArchives.repositories.mavenDeployer.pom.artifactId
|
|
def workingDir = "${project.buildDir}/intermediates/fullJar"
|
|
def fatJar = "${workingDir}/${jarName}-fat.jar"
|
|
def proguardJar = "${workingDir}/${jarName}-proguard.jar"
|
|
def jarJar = project.jar.archivePath
|
|
def runProguard = dataBindingConfig.runProguard
|
|
|
|
project.configurations {
|
|
jarJarArchives
|
|
}
|
|
|
|
project.tasks.create(name: 'fatJar', type: Jar) {
|
|
baseName = jarName + '-fat'
|
|
doFirst {
|
|
file(workingDir).mkdirs()
|
|
}
|
|
def deps = new HashSet<ResolvedDependency>()
|
|
project.configurations.compile.resolvedConfiguration.firstLevelModuleDependencies.each {
|
|
if (!it.moduleGroup.startsWith('com.android.tools')) {
|
|
deps.addAll(it.allModuleArtifacts)
|
|
}
|
|
}
|
|
from { deps.findAll { !it.name.contains('baseLibrary') && !it.name.contains("juniversalchardet")}.collect {
|
|
it.file.isDirectory() ? it.file : project.zipTree(it.file)
|
|
} } {
|
|
exclude "META-INF/maven/**"
|
|
exclude "META-INF/MANIFEST.MF"
|
|
exclude "META-INF/LICENSE.txt"
|
|
exclude "META-INF/NOTICE.txt"
|
|
exclude "META-INF/services/javax.annotation.processing.Processor"
|
|
exclude "**/*.stg"
|
|
}
|
|
archiveName "${baseName}.jar"
|
|
destinationDir = new File(workingDir)
|
|
with project.jar
|
|
}
|
|
/**
|
|
* not used unless jarJarFile is changed to use proguarded version instead.
|
|
*/
|
|
project.tasks.create(name: 'proguard', type: proguard.gradle.ProGuardTask) {
|
|
dependsOn 'fatJar'
|
|
|
|
injars fatJar
|
|
outjars proguardJar
|
|
|
|
configuration '../proguard.cfg'
|
|
}
|
|
|
|
project.tasks.create(name: 'jarJarFile') {
|
|
dependsOn runProguard ? 'proguard' : 'fatJar'
|
|
dependsOn project.jar
|
|
def inputLibrary = runProguard ? proguardJar : fatJar
|
|
def outputLibrary = jarJar
|
|
inputs.file(inputLibrary)
|
|
outputs.file(outputLibrary)
|
|
|
|
doLast {
|
|
def jarJarLibrary = new File(dataBindingConfig.externalPrebuiltsBase,
|
|
'tools/common/m2/repository/com/googlecode/jarjar/jarjar/1.4/jarjar-1.4.jar').
|
|
getCanonicalPath()
|
|
// in Ant
|
|
ant.taskdef(name: "jarjarIt",
|
|
classname: 'com.tonicsystems.jarjar.JarJarTask',
|
|
classpath: jarJarLibrary)
|
|
// start jarjar task
|
|
ant.jarjarIt(jarfile: outputLibrary) {
|
|
// input is our inputLibrary
|
|
zipfileset(src: inputLibrary)
|
|
// rule to repackage antlr to new package
|
|
rule pattern: 'org.antlr.**', result: 'com.google.repacked.org.antlr.@1'
|
|
rule pattern: 'org.abego.treelayout.**', result: 'com.google.repacked.treelayout.@1'
|
|
// rule to repackage commons
|
|
rule pattern: 'org.apache.**', result: 'com.google.repacked.apache.@1'
|
|
rule pattern: 'kotlin.**', result: 'com.google.repacked.kotlin.@1'
|
|
}
|
|
}
|
|
}
|
|
|
|
def setupUpload = { uploadTask ->
|
|
uploadTask.dependsOn 'jarJarFile'
|
|
uploadTask.repositories {
|
|
mavenDeployer {
|
|
pom.whenConfigured { pom ->
|
|
pom.dependencies.removeAll { dep ->
|
|
def isBaseLibrary = dep.groupId == 'com.android.databinding' &&
|
|
dep.artifactId == 'baseLibrary'
|
|
def isGradle = dep.groupId == 'com.android.tools.build' &&
|
|
dep.artifactId == 'gradle'
|
|
def isChardet = dep.groupId == 'com.googlecode.juniversalchardet' &&
|
|
dep.artifactId == 'juniversalchardet'
|
|
return !isBaseLibrary && !isGradle && !isChardet
|
|
}
|
|
}
|
|
}
|
|
}
|
|
uploadTask.outputs.upToDateWhen { false } // force it to re-run all the time.
|
|
}
|
|
|
|
if (project.publishLocal != null) {
|
|
setupUpload(project.publishLocal)
|
|
}
|
|
if (project.uploadArchives != null) {
|
|
setupUpload(project.uploadArchives)
|
|
}
|
|
|
|
project.bintrayUpload.dependsOn 'jarJarFile'
|
|
project.publishing.publications.mavenJava(MavenPublication) {
|
|
pom.withXml {
|
|
def deps = findChildByTag(asNode(), "dependencies")
|
|
if (deps == null) {
|
|
throw new IllegalArgumentException("cannot find dependencies in pom file")
|
|
}
|
|
def unwanted = deps.children().findAll {
|
|
def groupId = findChildByTag(it, "groupId").localText()[0]
|
|
def artifactId = findChildByTag(it, "artifactId").localText()[0]
|
|
def isBaseLibrary = groupId == 'com.android.databinding' &&
|
|
artifactId == 'baseLibrary'
|
|
def isGradle = groupId == 'com.android.tools.build' && artifactId == 'gradle'
|
|
def isChardet = groupId == 'com.googlecode.juniversalchardet' &&
|
|
artifactId == 'juniversalchardet'
|
|
return !isBaseLibrary && !isGradle && !isChardet
|
|
}
|
|
unwanted.each {
|
|
deps.remove(it)
|
|
}
|
|
}
|
|
}
|
|
}
|