[#256] Use Gradle Version Catalog for dependencies

This commit is contained in:
Carter Jernigan 2021-09-25 09:44:31 -04:00
parent 283718de94
commit dfe7dad834
5 changed files with 204 additions and 66 deletions

View File

@ -2,15 +2,12 @@ buildscript {
repositories {
google()
gradlePluginPortal()
mavenCentral()
maven("https://jitpack.io")
}
dependencies {
//noinspection GradlePluginVersion
classpath("com.android.tools.build:gradle:${properties["ANDROID_GRADLE_PLUGIN_VERSION"]}")
classpath("org.mozilla.rust-android-gradle:plugin:0.9.0")
classpath("com.vanniktech:gradle-maven-publish-plugin:0.17.0")
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:_")
classpath(libs.gradle.plugin.android)
classpath(libs.gradle.plugin.rust)
classpath(libs.gradle.plugin.publish)
classpath(libs.gradle.plugin.navigation)
}
}

View File

@ -59,24 +59,18 @@ android {
dependencies {
// SDK
implementation(projects.sdkLib)
//implementation('cash.z.ecc.android:zcash-android-sdk:1.3.0-beta17')
// sample mnemonic plugin
implementation("com.github.zcash:zcash-android-wallet-plugins:1.0.1")
implementation("cash.z.ecc.android:kotlin-bip39:1.0.2")
implementation(libs.zcashwalletplgn)
implementation(libs.bip39)
// Android
implementation("androidx.core:core-ktx:1.3.2")
implementation("androidx.constraintlayout:constraintlayout:2.0.4")
implementation("androidx.navigation:navigation-fragment-ktx:2.3.1")
implementation("androidx.navigation:navigation-ui-ktx:2.3.1")
implementation("com.google.android.material:material:1.3.0-alpha03")
testImplementation("junit:junit:4.13")
androidTestImplementation("androidx.test.ext:junit:1.1.2")
androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0")
implementation(libs.androidx.core)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.navigation.fragment)
implementation(libs.androidx.navigation.ui)
implementation(libs.material)
androidTestImplementation(libs.bundles.androidx.test)
implementation("io.grpc:grpc-android:${libs.versions.grpc.get()}")
implementation("io.grpc:grpc-okhttp:${libs.versions.grpc.get()}")
implementation("io.grpc:grpc-protobuf-lite:${libs.versions.grpc.get()}")
implementation("io.grpc:grpc-stub:${libs.versions.grpc.get()}")
implementation(libs.bundles.grpc)
}

View File

@ -61,13 +61,42 @@ ANDROID_GRADLE_PLUGIN_VERSION=7.0.2
DETEKT_VERSION=1.18.1
DOKKA_VERSION=1.4.30
KTLINT_VERSION=0.42.1
MAVEN_PUBLISH_GRADLE_PLUGIN=0.17.0
OWASP_DEPENDENCY_CHECK_VERSION=6.3.1
PROTOBUF_GRADLE_PLUGIN_VERSION=0.8.17
RUST_GRADLE_PLUGIN_VERSION=0.9.0
ANDROIDX_ANNOTATION_VERSION=1.2.0
ANDROIDX_APPCOMPAT_VERSION=1.3.1
ANDROIDX_CONSTRAINT_LAYOUT_VERSION=2.0.4
ANDROIDX_CORE_VERSION=1.3.2
ANDROIDX_ESPRESSO_VERSION=3.4.0
ANDROIDX_LIFECYCLE_VERSION=2.3.1
ANDROIDX_MULTIDEX_VERSION=2.0.1
ANDROIDX_NAVIGATION_VERSION=2.3.5
ANDROIDX_PAGING_VERSION=2.1.2
ANDROIDX_ROOM_VERSION=2.3.0
ANDROIDX_TEST_JUNIT_VERSION=1.1.3
ANDROIDX_TEST_ORCHESTRATOR_VERSION=1.1.0-alpha1
ANDROIDX_TEST_VERSION=1.3.0
ANDROIDX_UI_AUTOMATOR_VERSION=2.2.0-alpha1
BIP39_VERSION=1.0.2
COROUTINES_OKHTTP=1.0
GOOGLE_MATERIAL_VERSION=1.3.0-alpha03
GRPC_VERSION=1.38.1
GSON_VERSION=2.8.6
GUAVA_VERSION=30.0-android
JACOCO_VERSION=0.8.7
JAVAX_ANNOTATION_VERSION=1.3.2
JUNIT_VERSION=5.7.2
KOTLINX_COROUTINES_VERSION=1.5.1
KOTLIN_VERSION=1.5.10
MOCKITO_KOTLIN_VERSION=2.2.0
MOCKITO_VERSION=3.11.1
OKHTTP_VERSION=3.8.0
OKIO_VERSION=1.17.5
PROTOC_VERSION=3.14.0
ZCASH_WALLET_PLUGINS_VERSION=1.0.1
# This shouldn't be changed, as Android doesn't support targets beyond Java 8
ANDROID_JVM_TARGET=1.8

View File

@ -121,10 +121,10 @@ tasks.dokkaHtml.configure {
protobuf {
//generatedFilesBaseDir = "$projectDir/src/generated/source/grpc"
protoc { artifact = "com.google.protobuf:protoc:${libs.versions.protoc.get()}" }
protoc { artifact = libs.protoc.get().asCoordinateString() }
plugins {
id("grpc") {
artifact = "io.grpc:protoc-gen-grpc-java:${libs.versions.grpc.get()}"
artifact = libs.grpc.protoc.get().asCoordinateString()
}
}
generateProtoTasks {
@ -157,28 +157,26 @@ cargo {
}
dependencies {
implementation(AndroidX.appCompat)
implementation(libs.androidx.annotation)
implementation(libs.androidx.appcompat)
// Architecture Components: Lifecycle
implementation(AndroidX.lifecycle.runtimeKtx)
implementation(AndroidX.lifecycle.commonJava8)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.common)
// Architecture Components: Room
implementation(AndroidX.room.ktx)
implementation(AndroidX.paging.runtimeKtx)
kapt(AndroidX.room.compiler)
implementation(libs.androidx.room.core)
implementation(libs.androidx.paging)
kapt(libs.androidx.room.compiler)
// Kotlin
implementation(Kotlin.stdlib.jdk8)
implementation(KotlinX.coroutines.core)
implementation(KotlinX.coroutines.android)
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)
// grpc-java
implementation("io.grpc:grpc-okhttp:${libs.versions.grpc.get()}")
implementation("io.grpc:grpc-android:${libs.versions.grpc.get()}")
implementation("io.grpc:grpc-protobuf-lite:${libs.versions.grpc.get()}")
implementation("io.grpc:grpc-stub:${libs.versions.grpc.get()}")
compileOnly("javax.annotation:javax.annotation-api:_")
implementation(libs.bundles.grpc)
compileOnly(libs.javax.annotation)
//
@ -187,45 +185,41 @@ dependencies {
// solves error: Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules jetified-guava-26.0-android.jar (com.google.guava:guava:26.0-android) and listenablefuture-1.0.jar (com.google.guava:listenablefuture:1.0)
// per this recommendation from Chris Povirk, given guava's decision to split ListenableFuture away from Guava: https://groups.google.com/d/msg/guava-discuss/GghaKwusjcY/bCIAKfzOEwAJ
implementation("com.google.guava:guava:30.0-android")
implementation(libs.guava)
// Transitive dependencies used because they're already necessary for other libraries
// GSON is available as a transitive dependency from several places so we use it for processing
// checkpoints but also document that by explicitly including here. If dependencies like Room
// or grpc-okhttp stop including GSON, then we should switch to something else for parsing JSON.
implementation("com.google.code.gson:gson:2.8.6")
implementation(libs.gson)
// OKIO is a transitive dependency used when writing param files to disk. Like GSON, this can be
// replaced if needed. For compatibility, we match the library version used in grpc-okhttp:
// https://github.com/grpc/grpc-java/blob/v1.37.x/build.gradle#L159
implementation("com.squareup.okio:okio:1.17.5")
implementation(libs.okio)
// Tests
testImplementation("androidx.multidex:multidex:_")
testImplementation("org.jetbrains.kotlin:kotlin-reflect:_")
testImplementation("org.mockito:mockito-junit-jupiter:_")
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:_")
testImplementation("org.junit.jupiter:junit-jupiter-api:_")
testImplementation("org.junit.jupiter:junit-jupiter-engine:_")
testImplementation("org.junit.jupiter:junit-jupiter-migrationsupport:_")
testImplementation("io.grpc:grpc-testing:${libs.versions.grpc.get()}")
testImplementation(libs.kotlin.reflect)
testImplementation(libs.mockito.junit)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.bundles.junit)
testImplementation(libs.grpc.testing)
// NOTE: androidTests will use JUnit4, while src/test/java tests will leverage Junit5
// Attempting to use JUnit5 via https://github.com/mannodermaus/android-junit5 was painful. The plugin configuration
// was buggy, crashing in several places. It also would require a separate test flavor because it's minimum API 26
// because "JUnit 5 uses Java 8-specific APIs that didn't exist on Android before the Oreo release."
androidTestImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:_")
androidTestImplementation("org.mockito:mockito-android:_")
androidTestImplementation("androidx.test:runner:_")
androidTestImplementation("com.android.support:support-annotations:_")
androidTestImplementation("androidx.test:core:_")
androidTestImplementation("androidx.arch.core:core-testing:_")
androidTestImplementation("androidx.test.ext:junit:_")
androidTestImplementation("ru.gildor.coroutines:kotlin-coroutines-okhttp:_")
androidTestImplementation(libs.androidx.multidex)
androidTestImplementation(libs.mockito.kotlin)
androidTestImplementation(libs.mockito.android)
androidTestImplementation(libs.androidx.test.runner)
androidTestImplementation(libs.androidx.test.junit)
androidTestImplementation(libs.androidx.test.core)
androidTestImplementation(libs.coroutines.okhttp)
// used by 'ru.gildor.corutines.okhttp.await' (to make simple suspended requests) and breaks on versions higher than 3.8.0
androidTestImplementation("com.squareup.okhttp3:okhttp:3.8.0")
androidTestImplementation(libs.okhttp)
// sample mnemonic plugin
androidTestImplementation("com.github.zcash:zcash-android-wallet-plugins:_")
androidTestImplementation("cash.z.ecc.android:kotlin-bip39:_")
androidTestImplementation(libs.zcashwalletplgn)
androidTestImplementation(libs.bip39)
}
tasks.getByName("preBuild").dependsOn(tasks.create("bugfixTask") {
@ -238,4 +232,6 @@ project.afterEvaluate {
val cargoTask = tasks.getByName("cargoBuild")
tasks.getByName("javaPreCompileDebug").dependsOn(cargoTask)
tasks.getByName("javaPreCompileRelease").dependsOn(cargoTask)
}
}
fun MinimalExternalModuleDependency.asCoordinateString() = "${module.group}:${module.name}:${versionConstraint.displayName}"

View File

@ -14,16 +14,16 @@ pluginManagement {
val owaspVersion = extra["OWASP_DEPENDENCY_CHECK_VERSION"].toString()
val protobufVersion = extra["PROTOBUF_GRADLE_PLUGIN_VERSION"].toString()
id("com.google.protobuf") version(protobufVersion) apply(false)
id("org.jetbrains.dokka") version(dokkaVersion) apply(false)
id("org.jetbrains.kotlin.plugin.allopen") version(kotlinVersion) apply(false)
id("org.owasp.dependencycheck") version(owaspVersion) apply(false)
id("com.google.protobuf") version (protobufVersion) apply (false)
id("org.jetbrains.dokka") version (dokkaVersion) apply (false)
id("org.jetbrains.kotlin.plugin.allopen") version (kotlinVersion) apply (false)
id("org.owasp.dependencycheck") version (owaspVersion) apply (false)
id("io.gitlab.arturbosch.detekt") version (detektVersion) apply (false)
}
}
plugins {
id("de.fayard.refreshVersions") version("0.20.0")
id("de.fayard.refreshVersions") version ("0.20.0")
}
dependencyResolutionManagement {
@ -37,14 +37,136 @@ dependencyResolutionManagement {
@Suppress("UnstableApiUsage", "MaxLineLength")
versionCatalogs {
create("libs") {
val androidGradlePluginVersion = extra["ANDROID_GRADLE_PLUGIN_VERSION"].toString()
val androidxAnnotationVersion = extra["ANDROIDX_ANNOTATION_VERSION"].toString()
val androidxAppcompatVersion = extra["ANDROIDX_APPCOMPAT_VERSION"].toString()
val androidxConstraintLayoutVersion = extra["ANDROIDX_CONSTRAINT_LAYOUT_VERSION"].toString()
val androidxCoreVersion = extra["ANDROIDX_CORE_VERSION"].toString()
val androidxEspressoVersion = extra["ANDROIDX_ESPRESSO_VERSION"].toString()
val androidxLifecycleVersion = extra["ANDROIDX_LIFECYCLE_VERSION"].toString()
val androidxMultidexVersion = extra["ANDROIDX_MULTIDEX_VERSION"].toString()
val androidxNavigationVersion = extra["ANDROIDX_NAVIGATION_VERSION"].toString()
val androidxPagingVersion = extra["ANDROIDX_PAGING_VERSION"].toString()
val androidxRoomVersion = extra["ANDROIDX_ROOM_VERSION"].toString()
val androidxTestJunitVersion = extra["ANDROIDX_TEST_JUNIT_VERSION"].toString()
val androidxTestOrchestratorVersion = extra["ANDROIDX_ESPRESSO_VERSION"].toString()
val androidxTestVersion = extra["ANDROIDX_TEST_VERSION"].toString()
val androidxUiAutomatorVersion = extra["ANDROIDX_UI_AUTOMATOR_VERSION"].toString()
val bip39Version = extra["BIP39_VERSION"].toString()
val coroutinesOkhttpVersion = extra["COROUTINES_OKHTTP"].toString()
val googleMaterialVersion = extra["GOOGLE_MATERIAL_VERSION"].toString()
val grpcVersion = extra["GRPC_VERSION"].toString()
val gsonVersion = extra["GSON_VERSION"].toString()
val guavaVersion = extra["GUAVA_VERSION"].toString()
val javaVersion = extra["ANDROID_JVM_TARGET"].toString()
val javaxAnnotationVersion = extra["JAVAX_ANNOTATION_VERSION"].toString()
val junitVersion = extra["JUNIT_VERSION"].toString()
val kotlinVersion = extra["KOTLIN_VERSION"].toString()
val kotlinxCoroutinesVersion = extra["KOTLINX_COROUTINES_VERSION"].toString()
val mavenPublishGradlePluginVersion = extra["MAVEN_PUBLISH_GRADLE_PLUGIN"].toString()
val mockitoKotlinVersion = extra["MOCKITO_KOTLIN_VERSION"].toString()
val mockitoVersion = extra["MOCKITO_VERSION"].toString()
val okhttpVersion = extra["OKHTTP_VERSION"].toString()
val okioVersion = extra["OKIO_VERSION"].toString()
val protocVersion = extra["PROTOC_VERSION"].toString()
val rustGradlePluginVersion = extra["RUST_GRADLE_PLUGIN_VERSION"].toString()
val zcashWalletPluginVersion = extra["ZCASH_WALLET_PLUGINS_VERSION"].toString()
// Standalone versions
version("grpc", grpcVersion)
version("java", javaVersion)
version("protoc", protocVersion)
// Aliases
// Gradle plugins
alias("gradle-plugin-android").to("com.android.tools.build:gradle:$androidGradlePluginVersion")
alias("gradle-plugin-navigation").to("androidx.navigation:navigation-safe-args-gradle-plugin:$androidxNavigationVersion")
alias("gradle-plugin-publish").to("com.vanniktech:gradle-maven-publish-plugin:$mavenPublishGradlePluginVersion")
alias("gradle-plugin-rust").to("org.mozilla.rust-android-gradle:plugin:$rustGradlePluginVersion")
// Special cases used by the grpc gradle plugin
alias("grpc-protoc").to("io.grpc:protoc-gen-grpc-java:$grpcVersion")
alias("protoc").to("com.google.protobuf:protoc:$protocVersion")
// Libraries
alias("androidx-annotation").to("androidx.annotation:annotation:$androidxAnnotationVersion")
alias("androidx-appcompat").to("androidx.appcompat:appcompat:$androidxAppcompatVersion")
alias("androidx-constraintlayout").to("androidx.constraintlayout:constraintlayout:$androidxConstraintLayoutVersion")
alias("androidx-core").to("androidx.core:core-ktx:$androidxCoreVersion")
alias("androidx-lifecycle-common").to("androidx.lifecycle:lifecycle-common-java8:$androidxLifecycleVersion")
alias("androidx-lifecycle-runtime").to("androidx.lifecycle:lifecycle-runtime-ktx:$androidxLifecycleVersion")
alias("androidx-multidex").to("androidx.multidex:multidex:$androidxMultidexVersion")
alias("androidx-navigation-fragment").to("androidx.navigation:navigation-fragment-ktx:$androidxNavigationVersion")
alias("androidx-navigation-ui").to("androidx.navigation:navigation-ui-ktx:$androidxNavigationVersion")
alias("androidx-paging").to("androidx.paging:paging-runtime-ktx:$androidxPagingVersion")
alias("androidx-room-compiler").to("androidx.room:room-compiler:$androidxRoomVersion")
alias("androidx-room-core").to("androidx.room:room-ktx:$androidxRoomVersion")
alias("bip39").to("cash.z.ecc.android:kotlin-bip39:$bip39Version")
alias("grpc-android").to("io.grpc:grpc-android:$grpcVersion")
alias("grpc-okhttp").to("io.grpc:grpc-okhttp:$grpcVersion")
alias("grpc-protobuf").to("io.grpc:grpc-protobuf-lite:$grpcVersion")
alias("grpc-stub").to("io.grpc:grpc-stub:$grpcVersion")
alias("gson").to("com.google.code.gson:gson:$gsonVersion")
alias("guava").to("com.google.guava:guava:$guavaVersion")
alias("javax-annotation").to("javax.annotation:javax.annotation-api:$javaxAnnotationVersion")
alias("kotlin-reflect").to("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
alias("kotlin-stdlib").to("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
alias("kotlinx-coroutines-android").to("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinxCoroutinesVersion")
alias("kotlinx-coroutines-core").to("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion")
alias("material").to("com.google.android.material:material:$googleMaterialVersion")
alias("okhttp").to("com.squareup.okhttp3:okhttp:$okhttpVersion")
alias("okio").to("com.squareup.okio:okio:$okioVersion")
alias("zcashwalletplgn").to("com.github.zcash:zcash-android-wallet-plugins:$zcashWalletPluginVersion")
// Test libraries
alias("androidx-espresso-contrib").to("androidx.test.espresso:espresso-contrib:$androidxEspressoVersion")
alias("androidx-espresso-core").to("androidx.test.espresso:espresso-core:$androidxEspressoVersion")
alias("androidx-espresso-intents").to("androidx.test.espresso:espresso-intents:$androidxEspressoVersion")
alias("androidx-test-core").to("androidx.test:core:$androidxTestVersion")
alias("androidx-test-junit").to("androidx.test.ext:junit:$androidxTestJunitVersion")
alias("androidx-test-runner").to("androidx.test:runner:$androidxTestVersion")
alias("androidx-testOrchestrator").to("androidx.test:orchestrator:$androidxTestOrchestratorVersion")
alias("androidx-uiAutomator").to("androidx.test.uiautomator:uiautomator-v18:$androidxUiAutomatorVersion")
alias("coroutines-okhttp").to("ru.gildor.coroutines:kotlin-coroutines-okhttp:$coroutinesOkhttpVersion")
alias("grpc-testing").to("io.grpc:grpc-testing:$grpcVersion")
alias("junit-api").to("org.junit.jupiter:junit-jupiter-api:$junitVersion")
alias("junit-engine").to("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
alias("junit-migration").to("org.junit.jupiter:junit-jupiter-migrationsupport:$junitVersion")
alias("kotlinx-coroutines-test").to("org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutinesVersion")
alias("mockito-android").to("org.mockito:mockito-android:$mockitoVersion")
alias("mockito-junit").to("org.mockito:mockito-junit-jupiter:$mockitoVersion")
alias("mockito-kotlin").to("com.nhaarman.mockitokotlin2:mockito-kotlin:$mockitoKotlinVersion")
// Bundles
bundle(
"androidx-test",
listOf(
"androidx-espresso-core",
"androidx-espresso-intents",
"androidx-espresso-contrib",
"androidx-test-junit",
"androidx-test-core"
)
)
bundle(
"grpc",
listOf(
"grpc-okhttp",
"grpc-android",
"grpc-protobuf",
"grpc-stub"
)
)
bundle(
"junit",
listOf(
"junit-api",
"junit-engine",
"junit-migration",
)
)
}
}
}