def version = null if (gradle.hasProperty("localProperties.autoPublish.android-components.dir")) { // We're doing local development using the autoPublish system. This automatically rebuilds and // publishes android-components packages whenever the source changes. // This version string will selected the latest build package version = '0.0.1-+' } else if (gradle.hasProperty("localProperties.branchBuild.android-components.version")) { // We're running a branch build. Here the version is set to the git commit id in // local.properties version = gradle.getProperty("localProperties.branchBuild.android-components.version") } else { throw new Exception("substitute-local-appservices.gradle called from unexpected context") } logger.lifecycle("[local-ac] adjusting project to use locally published android-components modules (${version})") // Inject mavenLocal repository. This is where we're expected to publish modules. repositories { mavenLocal() } configurations.configureEach { config -> if (config.isCanBeResolved()) { config.resolutionStrategy { strategy -> dependencySubstitution { // Linter is broken here and incorrectly suggests to replace // all() with configureEach(), which doesn't exist on DependencySubstitutions. // https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySubstitutions.html //noinspection ConfigurationAvoidance all { dependency -> if (!(dependency.requested instanceof ModuleComponentSelector)) { // We only care about substituting for a module, not a project. return } // For every org.mozilla.components.* module, substitute its version for '+'. // '+' version tells gradle to resolve the latest available version. // As long as 'mavenLocal' is in the repositories list, gradle should pick out // latest published module during dependency resolution phase. def group = dependency.requested.group if (group == 'org.mozilla.components') { def name = dependency.requested.module dependency.useTarget([group: group, name: name, version: version]) } } } } } }