Proyectos de Gradle 7: cómo no depender de las dependencias

¡Oye! Mi nombre es Ksenia Kaisheva, escribo aplicaciones de Android en 65apps. Hoy hablaré sobre una nueva característica que le permite describir de manera centralizada las dependencias en proyectos con el sistema de compilación Gradle.





Por el momento, hay muchas opciones para describir dependencias en proyectos que usan Gradle. No existe un estándar recomendado, por lo que se utilizan varios enfoques: alguien simplemente enumera las dependencias en el bloque de dependencias , alguien coloca las dependencias en un archivo separado, un bloque ext , etc. Y para los nuevos desarrolladores no siempre es obvio qué, dónde y cómo se usa en un proyecto grande y de varios módulos.





La séptima versión de Gradle presenta una nueva función que le permite describir todas las dependencias de forma centralizada. Esta función está en la etapa de vista previa, y para usarla en el archivo settings.gradle (.kts) necesita agregar la línea: 





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