Как я могу дать команду gradle следить за `local.properties`, чтобы знать, когда нужна` Gradle Sync`? - PullRequest
1 голос
/ 12 апреля 2019

Я использую 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, чтобы понять это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...