Gradle 7 プロジェクト: 依存関係に依存しない方法

おい!私の名前は Ksenia Kaisheva です。65apps で Android アプリケーションを作成しています。今日は、Gradle ビルド システムでプロジェクトの依存関係を一元的に記述できる新機能についてお話します。





現時点では、Gradle を使用してプロジェクトの依存関係を記述するための多くのオプションがあります。推奨される標準はないため、さまざまなアプローチが使用されます: 依存関係を単に依存関係ブロックリストする人もいれば、依存関係を別のファイルやextブロックに配置する人もいます。そして、新しい開発者にとって、大規模なマルチモジュール プロジェクトで、何が、どこで、どのように使用されているかは必ずしも明らかではありません。





Gradle の 7 番目のバージョンでは、すべての依存関係を一元的に記述できる新しい機能が導入されています。この関数はプレビュー段階にあり、settings.gradle (.kts)ファイルで使用するには、次の行を追加する必要があります。 





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