Градл продолжает жаловаться, что он не находит функции systemProperty
и environment
. Это яркий пример, когда Kotlin DSL сияние. Вы бы точно знали, какие методы / свойства доступны в любой момент времени, потому что это сильно типизированный язык в отличие от Groovy.
С учетом сказанного, когда вы делаете следующее:
task specialConfiguration() {
systemProperties System.properties
systemProperty "spring.cloud.config.failFast", "false"
if (project.hasProperty("TEAM_ENCRYPT_KEY"))
environment "ENCRYPT_KEY", "$TEAM_ENCRYPT_KEY"
}
bootRun {
dependsOn 'specialConfiguration'
}
Вы находитесь:
- Объявление задачи с именем
specialConfiguration
. - Не указан тип, поэтому типом является DefaultTask .
- Configure * Задача 1024 * зависит от
specialConfiguration
Я думаю, вы предполагаете, что dependsOn
- это все равно что «конфигурировать» задачу, когда на самом деле это просто добавление зависимости к задаче. См. Добавление зависимостей к задаче .
Я предполагаю, что runSmokeTest
имеет тип Test
. Таким образом, задачи test
, runSmokeTest
и bootRun
реализуют интерфейс JavaForkOptions , из которого происходят методы systemProperties(..)
, systemProperty(.., ..)
и environment(.., ..)
.
С учетом вышесказанного, поскольку вы знаете три задачи, которые вы хотите настроить, и все они реализуют JavaForkOptions
и некоторым образом, вы можете выполнить (Kotlin DSL):
import org.springframework.boot.gradle.tasks.run.BootRun
// Assuming this is a Test task type
tasks.register("runSmokeTest", Test::class)
// Define a new Action (configuration)
val taskConfig = Action<JavaForkOptions> {
systemProperties(System.getProperties() as Map<String, Any>)
systemProperty("spring.cloud.config.failFast", false)
if (project.hasProperty("TEAM_ENCRYPT_KEY")) {
environment("ENCRYPT_KEY", project.property("TEAM_ENCRYPT_KEY")!!)
}
}
// Configure all three tasks
tasks.named("test", Test::class, taskConfig)
tasks.named("runSmokeTest", Test::class, taskConfig)
tasks.named("bootRun", BootRun::class, taskConfig)