You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
11 KiB
302 lines
11 KiB
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) |
|
} |
|
} |
|
} |
|
}
|
|
|