Projets Gradle 7 : comment ne pas dépendre des dépendances

Hey! Je m'appelle Ksenia Kaisheva, j'écris des applications Android sur 65apps. Aujourd'hui, je vais parler d'une nouvelle fonctionnalité qui vous permet de décrire de manière centralisée les dépendances sur les projets avec le système de génération Gradle.





À l'heure actuelle, il existe de nombreuses options pour décrire les dépendances dans les projets utilisant Gradle. Il n'y a pas de norme recommandée, donc une variété d'approches sont utilisées : quelqu'un répertorie simplement les dépendances dans le bloc dependencies , quelqu'un met les dépendances dans un fichier séparé, un bloc ext , etc. Et pour les nouveaux développeurs, il n'est pas toujours évident de savoir quoi, où et comment est utilisé dans un grand projet multi-modules.





La 7ème version de Gradle introduit une nouvelle fonctionnalité qui vous permet de décrire toutes les dépendances de manière centralisée. Cette fonction est au stade de l'aperçu, et pour l'utiliser dans le fichier settings.gradle (.kts) , vous devez ajouter la ligne : 





enableFeaturePreview("VERSION_CATALOGS")
      
      



( ) build.gradle :





dependencies {
    implementation libs.lifecycle.runtime
    implementation libs.lifecycle.viewmodel.ktx
    implementation libs.lifecycle.extentions
    implementation libs.lifecycle.livedata.ktx
}
      
      







libs

lifecycle.runtime — .





settings.gradle(.kts) :





dependencyResolutionManagement {
   versionCatalogs {
       libs {
           alias('lifecycle-runtime').to('androidx.lifecycle:lifecycle -runtime:2.2.0')
           alias('lifecycle-viewmodel-ktx').to('androidx.lifecycle', 'lifecycle-viewmodel-ktx')
               .version {
                   strictly '[2.2.0, 2.3.0['
                   prefer '2.3.1'
               }
       }
   }
}
      
      



(alias) , , . 





.





, . . 









lifecycle-runtime  

lifecycle_runtime 

lifecycle.runtime

junit5-test-core

spek-runner-junit5





, . , lifecycle-viewmodel lifecycle-viewmodel-ktx.





Gradle . 

, lifecycleViewmodel lifecycleViewmodelKtx.





:





dependencyResolutionManagement {
   versionCatalogs {
       libs {
           version('lifecycle', '2.3.1')
           alias('lifecycle-viewmodel-ktx').to('androidx.lifecycle', 'lifecycle-viewmodel-ktx')
               .versionRef('lifecycle')
       }
   }
}

      
      



 build.gradle :





version = libs.versions.lifecycle.get()
      
      



, . . — :





dependencyResolutionManagement {
   versionCatalogs {
       libs {
           version('lifecycle', '2.3.1')
           alias('lifecycle-runtime').to(
               'androidx.lifecycle’, ' lifecycle -runtime').versionRef(' lifecycle ')
                   alias ('lifecycle-viewmodel-ktx').to(
                   'androidx.lifecycle’, ' lifecycle -viewmodel - ktx').versionRef(' lifecycle ')
                       bundle ('lifecycle', ['lifecycle-runtime', 'lifecycle-viewmodel-ktx']
               )
       }
   }
}

      
      



:





dependencies {
    implementation libs.bundles.lifecycle
}
      
      



.





settings.gradle(.kts) , — toml- gradle: libs.versions.toml





, .





libs.versions.toml libs . , :





dependencyResolutionManagement {
   defaultLibrariesExtensionName.set('deps')
}
      
      



Toml- 3 :





[versions] -

[libraries] -

[bundles] -





,





[versions]
lifecycle = "2.3.1"

[libraries]
lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime", version.ref = "lifecycle" }
lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycle" }

[bundles]
dagger = ["lifecycle-runtime", "lifecycle-viewmodel-ktx"]

      
      



, , , : 





[versions]
any-lib1 = ‘1.0any-lib2 = { strictly = "[1.0, 2.0[", prefer = "1.2" }
      
      











, :





[libraries]
any-lib = "com.company:anylib:1.4"
any-other-lib = { module = "com.company:other", version="1.4" }
any-other-lib2 = { group = "com.company", name="alternate", version="1.4" }
anylib-full-format = { group = "com.company", name="alternate", version={ require = "1.4" } }
      
      



, [versions] , version.ref:





[versions]
some = "1.4"

[libraries]
any-lib = { group = "com.company", name="anylib", version.ref="some" }
      
      



toml-. , :





dependencyResolutionManagement {
    versionCatalogs {
        testLibs {
            from(files('gradle/test-libs.versions.toml'))
        }
    }
}
      
      



, .









Gradle , . . , , . , .





Groovy build.gradle , , . . — Kotlin DSL.








All Articles