Как я могу настроить расширение Jib внутри файла buildSrc kotlin? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь модулировать мой build.gradle.kts. Мне было предложено создать папку buildSrc. После некоторых исследований и сомов я нашел эту статью Я ненавидел Gradle! ... , так что это была моя попытка:

buildSrc tree:

buildSrc/
├── build.gradle.kts
├── settings.gradle.kts
└── src
    └── main
        ├── kotlin
        │   ├── Docker.kt
        │   ├── MyProjectExtensions.kt
        │   └── Versions.kt
        └── resources
            └── META-INF
                └── gradle-plugins
                    └── pt.branden.brandenportal.properties

Mybuild.gradle.kts:

plugins {
    `kotlin-dsl`
    id("com.google.cloud.tools.jib") version Versions.jib
}

repositories {
    mavenCentral()
    google()
    jcenter()
}

dependencies {
    implementation("gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:${Versions.jib}")
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50")
    implementation(gradleApi())
    implementation(localGroovy())
}

И наконец Docker.kt:

import org.gradle.api.Plugin
import org.gradle.api.Project


open class JibConfigPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        //configureJib()
        TODO("not implemented")
    }

}

//internal fun Project.configureJib() = this.extensions.getByType<JibExtension>().run {}
internal fun Project.configureJib() = project.configure<JibExtension>() {
  TODO("not implemented")
}

Моя проблема в том, что я не могу найти JibExtension, поэтому, когда я пытаюсь реализовать и настроитьСтрела не работает, но в build.gradle.kts все работает.

1 Ответ

0 голосов
/ 08 ноября 2019

Моя проблема в том, что я не могу найти JibExtension

Плагины или расширения могут применяться различными способами. Вы можете «реагировать» на применяемый плагин, используя withPlugin метод PluginManager:

class JibConfigPlugin : Plugin<Project> {

    override fun apply(project: Project) {
        project.pluginManager.withPlugin("com.google.cloud.tools.jib") {
            // Configuration happens inside this Action block.
        }
    }
}

Используя этот метод, вы можете быть уверены, что плагин существует / был примененбез принуждения пользователя / проекта к использованию плагина.

Плагин Jib предлагает одно расширение и множество задач.

Конфигурирование расширения может быть выполнено с помощью следующих действий:

class JibConfigPlugin : Plugin<Project> {

    override fun apply(project: Project) {
        project.pluginManager.withPlugin("com.google.cloud.tools.jib") {
           project.extensions.configure<JibExtension> {
                // Example configuring the `container`
                container {
                    creationTime = "USE_CURRENT_TIMESTAMP"
                }
           }
        }
    }
}

Рассматривая источник плагина Gradle для Jib, авторы использовали ленивая конфигурация для задач, поэтому лучше использовать тот же метод для настройки этихЗадачи.

Например, для настройки задачи jib:

class JibConfigPlugin : Plugin<Project> {

    override fun apply(project: Project) {
        project.pluginManager.withPlugin("com.google.cloud.tools.jib") {
            project.tasks.named<BuildImageTask>("jib") {
                to {
                    setTargetImage("my_acr_name.azurecr.io/my-app")
                }
            }
        }
    }
}

Выше используется метод named, который возвращает TaskProvider

Затем просто примените ваш плагин, как описано здесь: https://guides.gradle.org/writing-gradle-plugins/#apply_the_plugin_to_the_host_project


Источник build.gradle.kts, который я использовал для тестирования:

plugins {
    `kotlin-dsl`
}

repositories {
    gradlePluginPortal()
}

dependencies {
    implementation("gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:1.7.0")
}
...