android - 为什么必须在 Android 中明确指定 $kotlin_version?
问题描述
在 Android Studio 项目中支持 Kotlin 需要两个依赖项:kotlin-gradle-plugin
inProject/build.gradle
和kotlin-stdlib-jdk7
in Project/app/build.gradle
,并且这两个需要具有相同的版本。常见的方法似乎是使用单个变量,然后您必须在 IDE 更新其 Kotlin 插件时手动更改该变量 - 从 Android Studio 3.1.3 开始,如果您使用 a作为kotlin_version
IDE,IDE 仍然无法自动更新依赖项$variable
版本。
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
在非 Android Kotlin 项目中,即那些使用apply: 'kotlin'
而不是 的项目中apply plugin: 'kotlin-android'
,可以简单地从依赖项中省略版本kotlin-stdlib-jdk7
,然后从插件中自动解析。
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7'
这甚至适用于 Android 项目中的非 Android 模块。我的问题是,为什么这在 Android 模块中是不可能的?为什么不能$kotlin_version
简单地省略?如果该功能从 Kotlin 1.1.2 开始就存在,为什么即使在 Kotlin 1.2.51 上它仍然会导致 Android 上的编译错误?或者实际上是否可以做到这一点,如果可以,怎么做?
解决方案
事实上,这并不是 Kotlin 特有的,而是与 Gradle 如何管理依赖关系有关。
有关如何在 Gradle 中指定依赖项的版本,请参阅https://docs.gradle.org/current/userguide/declaring_dependencies.html 。
在这种情况下
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
是设置版本的标准方式。由于此版本号对于多个依赖项是相同的,因此它在变量中声明,以便轻松更改所有 Kotlin 库的版本。
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7'
dependency constraints
从 Gradle 4.6 开始可用的用途。它用于相同的目的。可以将库的版本设置在一个中心位置,这样可以将版本保持在一个共同的值,而不必遍历gradle.properties
更大项目的所有文件。
推荐阅读
- javascript - 输入框不接受任何 ReactJS
- spring - com.code.service.BookServiceImpl 中的字段 bookRepository 需要找不到类型为“com.myAppp.code.respository.BookRepository”的 bean
- php - Prestashop multishop 脚本将产品关联到二级商店
- gnuplot - Gnuplot 填充曲线翻转轴
- laravel - 如何区分 laravel 5.5 auth::routes() 因为它在前端和后端创建相同名称的路由
- config - 普罗米修斯目标管理
- ios - UITableView Animation Bug - 动画前计算的可见区域
- svn - “svn ls -rNNN”和“svn ls URL@NNN”有什么区别?
- ember.js - Ember - 在浏览器上点击刷新重定向到以前的控制器?
- php - Symfony 站点 robots.txt 无法访问