Projetos Gradle 7: como não depender de dependências

Ei! Meu nome é Ksenia Kaisheva, eu escrevo aplicativos Android em 65apps. Hoje vou falar sobre um novo recurso que permite descrever de forma centralizada as dependências em projetos com o sistema de compilação do Gradle.





No momento, existem muitas opções para descrever dependências em projetos que usam o Gradle. Não existe um padrão recomendado, então uma variedade de abordagens são usadas: alguém simplesmente lista as dependências no bloco de dependências , alguém coloca as dependências em um arquivo separado, um bloco ext , etc. E para novos desenvolvedores nem sempre é óbvio o que, onde e como é usado em um projeto grande e com vários módulos.





A 7ª versão do Gradle apresenta um novo recurso que permite descrever todas as dependências de forma centralizada. Esta função está em estágio de visualização e para usá-la no arquivo settings.gradle (.kts) você precisa adicionar a linha: 





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