如何检测Android Studio项目中build.gradle中何时存在依赖库版本更新
How to detect when dependency library version updates exist in build.gradle in AndroidStudio project
我有一个包含两个模块(典型的前端应用程序和后端)的 android 项目。我有三个 build.gradle
文件,每个模块一个,根目录一个。
我构建依赖项的方式是将所有版本提取到根级别 build.gradle
中的单独变量中
ext {
// SDK and tools
MIN_SDK_VERSION = 19
TARGET_SDK_VERSION = 23
COMPILE_SDK_VERSION = 23
BUILD_TOOLS_VERSION = '24'
// app dependencies
GOOGLE_API_CLIENT_VERSION = '1.19.0'
GOOGLE_PLAY_SERVICES_VERSION = '8.4.0'
ANDROID_SUPPORT_LIB_VERSION = '23.1.0'
[...]
// backend dependencies
[...]
}
后来在我的 say 应用程序 build.gradle
文件中使用
dependencies {
[...]
compile(group: 'com.google.oauth-client', name: 'google-oauth-client', version: rootProject.ext.GOOGLE_API_CLIENT_VERSION)
/////////////////////////////////
// Google Play Services explicit dependency
compile(group: 'com.google.android.gms', name: 'play-services-auth', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION)
compile(group: 'com.google.android.gms', name: 'play-services-plus', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION)
[...]
/////////////////////////////////
// Local Testing
testCompile(group: 'junit', name: 'junit', version: rootProject.ext.JUNIT_VERSION)
testCompile(group: 'pl.pragmatists', name: 'JUnitParams', version: rootProject.ext.JUNIT_PARAMS_VERSION)
[...]
}
注意:我在某个教程中发现了这个想法,我认为它非常漂亮。
但是,我正在努力跟踪哪些 lib 版本可用,哪些是可升级的,等等。跟踪这些事情变得越来越困难,因为我有一个合理大小的依赖项列表。好奇其他人是如何解决这个问题的。谢谢。
我如何管理依赖关系的总结。
所有依赖项定义都在 gradle/dependencies.gradle
中定义,它适用于所有项目和构建脚本。我通常将其分为三类。一个完整的例子是 here.
ext {
versions = [
caffeine: '2.3.1',
]
test_versions = [
testng: '6.9.12',
]
plugin_versions = [
versions: '0.13.0',
]
libraries = [
caffeine: "com.github.ben-manes.caffeine:caffeine:${versions.caffeine}",
]
test_libraries = [
testng: dependencies.create("org.testng:testng:${test_versions.testng}") {
exclude group: 'junit'
},
]
gradle_plugins = [
versions: "com.github.ben-manes:gradle-versions-plugin:${plugin_versions.versions}",
]
}
然后在我的根项目中我bootstrap它是,
buildscript {
apply from: "${rootDir}/gradle/dependencies.gradle"
repositories {
jcenter()
}
dependencies {
gradle_plugins.each { name, dependency -> classpath dependency }
}
}
allprojects {
apply from: "${rootDir}/gradle/dependencies.gradle"
repositories {
jcenter()
}
}
这允许将项目中的依赖项定义为,
dependencies {
compile libraries.caffeine
}
为了检测更新的版本,我编写了 gradle-versions-plugin。通过查询存储库的版本信息并将其与您的定义进行比较来生成报告。我 运行 它经常手动,但其他人在他们的 CI 中编写脚本并使用 json 或 xml 报告。
在我编写插件后,还开发了一些其他方法。 Spring 的 dependency-management-plugin works with Maven BOMs, as does Netfix's nebula-dependency-recommender-plugin. Netflix uses gradle-dependency-lock-plugin 定义动态版本并生成锁定文件以修复版本。还有依赖版本警报服务,虽然一个简单的 CI 工作可能是等效的。
我从来没有使用过任何替代方案,因为它们(对我来说)似乎不太直观,在我找到一个很好的解决方案多年后才出现,如果你来自 Maven,这是一种熟悉的方法。希望其他人可以阐明其他方法的好处。
我有一个包含两个模块(典型的前端应用程序和后端)的 android 项目。我有三个 build.gradle
文件,每个模块一个,根目录一个。
我构建依赖项的方式是将所有版本提取到根级别 build.gradle
中的单独变量中
ext {
// SDK and tools
MIN_SDK_VERSION = 19
TARGET_SDK_VERSION = 23
COMPILE_SDK_VERSION = 23
BUILD_TOOLS_VERSION = '24'
// app dependencies
GOOGLE_API_CLIENT_VERSION = '1.19.0'
GOOGLE_PLAY_SERVICES_VERSION = '8.4.0'
ANDROID_SUPPORT_LIB_VERSION = '23.1.0'
[...]
// backend dependencies
[...]
}
后来在我的 say 应用程序 build.gradle
文件中使用
dependencies {
[...]
compile(group: 'com.google.oauth-client', name: 'google-oauth-client', version: rootProject.ext.GOOGLE_API_CLIENT_VERSION)
/////////////////////////////////
// Google Play Services explicit dependency
compile(group: 'com.google.android.gms', name: 'play-services-auth', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION)
compile(group: 'com.google.android.gms', name: 'play-services-plus', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION)
[...]
/////////////////////////////////
// Local Testing
testCompile(group: 'junit', name: 'junit', version: rootProject.ext.JUNIT_VERSION)
testCompile(group: 'pl.pragmatists', name: 'JUnitParams', version: rootProject.ext.JUNIT_PARAMS_VERSION)
[...]
}
注意:我在某个教程中发现了这个想法,我认为它非常漂亮。
但是,我正在努力跟踪哪些 lib 版本可用,哪些是可升级的,等等。跟踪这些事情变得越来越困难,因为我有一个合理大小的依赖项列表。好奇其他人是如何解决这个问题的。谢谢。
我如何管理依赖关系的总结。
所有依赖项定义都在 gradle/dependencies.gradle
中定义,它适用于所有项目和构建脚本。我通常将其分为三类。一个完整的例子是 here.
ext {
versions = [
caffeine: '2.3.1',
]
test_versions = [
testng: '6.9.12',
]
plugin_versions = [
versions: '0.13.0',
]
libraries = [
caffeine: "com.github.ben-manes.caffeine:caffeine:${versions.caffeine}",
]
test_libraries = [
testng: dependencies.create("org.testng:testng:${test_versions.testng}") {
exclude group: 'junit'
},
]
gradle_plugins = [
versions: "com.github.ben-manes:gradle-versions-plugin:${plugin_versions.versions}",
]
}
然后在我的根项目中我bootstrap它是,
buildscript {
apply from: "${rootDir}/gradle/dependencies.gradle"
repositories {
jcenter()
}
dependencies {
gradle_plugins.each { name, dependency -> classpath dependency }
}
}
allprojects {
apply from: "${rootDir}/gradle/dependencies.gradle"
repositories {
jcenter()
}
}
这允许将项目中的依赖项定义为,
dependencies {
compile libraries.caffeine
}
为了检测更新的版本,我编写了 gradle-versions-plugin。通过查询存储库的版本信息并将其与您的定义进行比较来生成报告。我 运行 它经常手动,但其他人在他们的 CI 中编写脚本并使用 json 或 xml 报告。
在我编写插件后,还开发了一些其他方法。 Spring 的 dependency-management-plugin works with Maven BOMs, as does Netfix's nebula-dependency-recommender-plugin. Netflix uses gradle-dependency-lock-plugin 定义动态版本并生成锁定文件以修复版本。还有依赖版本警报服务,虽然一个简单的 CI 工作可能是等效的。
我从来没有使用过任何替代方案,因为它们(对我来说)似乎不太直观,在我找到一个很好的解决方案多年后才出现,如果你来自 Maven,这是一种熟悉的方法。希望其他人可以阐明其他方法的好处。