Size: a a a

2021 August 05

с#

саша сок #KotlinGang... in Gradle
ну когда эти объекты начали использовать, я имею ввиду
источник

с#

саша сок #KotlinGang... in Gradle
в моко уже мигрировали всё, я буду как не лень будет
источник

с#

саша сок #KotlinGang... in Gradle
ну и не целиком, там пока поддержки плагинов нет
источник

VP

Vladimir Petrakovich in Gradle
Действительно. Не думал, что оно так работает.
Ну тогда да, всё понятно.
источник

IP

Iaroslav Postovalov in Gradle
А, да
источник

IP

Iaroslav Postovalov in Gradle
источник

VP

Vladimir Petrakovich in Gradle
В блоке плагинов всё равно не взлетит, но в остальном - да, решение
источник

с#

саша сок #KotlinGang... in Gradle
ну просто по дефолту в файл импортируется весь текущий пакет
источник

VP

Vladimir Petrakovich in Gradle
Да это понятно, я думал, что класс билдскрипта не в дефолтном пакете
источник

с#

саша сок #KotlinGang... in Gradle
взлетит, если пробросить в класспуть билдскрипта раньше
источник

с#

саша сок #KotlinGang... in Gradle
но вообще да
источник

VP

Vladimir Petrakovich in Gradle
В kotlin dsl в plugins можно любой код вызывать?
источник

с#

саша сок #KotlinGang... in Gradle
например через buildSrc
источник

с#

саша сок #KotlinGang... in Gradle
угу, только нужно учитывать, что он раньше всего файла выполняется
источник

с#

саша сок #KotlinGang... in Gradle
даже раньше импортов
источник

VP

Vladimir Petrakovich in Gradle
Ну это уже намного мощнее, чем очень ограниченное подмножество языка, которое в groovy
источник

VP

Vladimir Petrakovich in Gradle
Да это понятно, там же кусок выдирается и исполняется отдельно, как buildscript { }
источник

с#

саша сок #KotlinGang... in Gradle
+
источник

PS

Pavel Shakhov in Gradle
Всем доброго дня. Такой вопрос - нет ли каких-либо ограничений по использованию URLConnection в BuildServices?
abstract class DevPlatformAuthService : BuildService<DevPlatformAuthService.Params>, KLogging() {
   internal interface Params : BuildServiceParameters {
       var workingDir: File
   }

   @get:OutputFile
   abstract val dpOutputFile: RegularFileProperty

   var dpVersion = "3.0.0"

   private val dpName = object : OsSpecificAction<String> {
       override fun onWindows() = "windows/dp.exe"
       override fun onLinux() = "linux/dp"
       override fun onMac() = "darwin/dp"
   }.perform()

   private val host = "https://наш-хост/cli/prod/dp/"

   init {
       dpOutputFile.get().asFile.also {
           it.createNewFile()
           it.setWritable(true)
           it.writeBytes(URL("$host$dpVersion$dpName")
               .openConnection().getInputStream().readBytes())
           it.setExecutable(true)
       }
   }

   fun token(): String {
       logger.info("Try to get devPlatform token")
       val apiKeyFile = getEnv("devplatform_api_key")
       logger.info(runCommand("${dpOutputFile.asFile.get().absolutePath} auth service-acc --key-file $apiKeyFile"))
       return runCommandSilent(
           "${dpOutputFile.asFile.get().absolutePath} auth print-token"
       )?.trim() ?: throw DevPlatformClientException("couldn't get token.")
   }

   class DevPlatformClientException(message: String) : Exception(message)
}
- пример. Ловлю ava.net.UnknownHostException. На таск в текущей итерации переделывать не очень хотелось бы
источник

VS

Vladimir Sitnikov in Gradle
В чём вопрос?
Теоретически, ограничений нет.

Практически, «скачать файл» #faq может быть лучше средствами Gradle. Там появится и кэширование файла, и проверка целостности.

Можно либо сам файл разместить в Maven репозитории (тогда логика onwindows, onlinux вообще уйдёт в Gradle Metadata).

Либо, можно оставить файл как есть, а качать его через Ivy Repository (https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:ivy_repositories)

Вот пример, где используется ivy repository для скачивания файла: https://github.com/JetBrains/gradle-intellij-plugin/issues/660
источник