Я использую gradle.properties
и local.properties
для ввода конфигурации в buildSrc
.
// in buildSrc
private val localVersions = LocalVersions.create()
object Versions {
kotlin = localVersions.kotlin
}
object Libs {
kotlin = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}"
}
// gradle.properties
versions.kotlin=1.3.21
Это прекрасно работает.Но допустим, я добавил эту строку в local.propeties
(что должно переопределить значение в gradle.properties
).
// local properties
versions.kotlin=1.3.30
Когда я строю снова, Versions.kotlin
по-прежнему возвращает 1.3.21
, потому что это непонимать, что изменение local.properties
повлияет на путь к классу buildSrc.
private data class LocalVersions(
val kotlin: String
) {
companion object {
private const val gradlePropertiesFileName = "gradle.properties"
private const val localPropertiesFileName = "local.properties"
private const val kotlinVersionPropertyName = "versions.kotlin"
@JvmStatic
fun create(): LocalVersions {
val props = Properties().apply {
fun File.asInputStream(): InputStream = BufferedInputStream(FileInputStream(this))
val gradlePropsFile = File(gradlePropertiesFileName).apply {
require(exists()) {
"File does not exist. ${this.absolutePath}"
}
}
val localPropsFile = File(localPropertiesFileName)
if (!gradlePropsFile.exists()) {
throw FileNotFoundException("Could not find file: $gradlePropsFile.absolutePath")
}
load(gradlePropsFile.asInputStream())
if (localPropsFile.exists()) {
load(localPropsFile.asInputStream())
}
}
fun findProperty(name: String): String {
return props.getProperty(name)
?: throw IllegalStateException("Could not find property `$this` in `gradle.properties` or `local.properties`.")
}
return LocalVersions(
kotlin = findProperty(kotlinVersionPropertyName)
)
}
}
}
Если я внесу изменение в значение в gradle.properties
, Gradle поймет, что buildSrc
был изменен.Если я внесу подобное изменение в local.properties
, Gradle не поймет, что необходима синхронизация.Как я могу проинструктировать Gradle, чтобы понять это?