如何在buildSrc kotlin文件中配置Jib扩展?

我正在尝试模块化我的build.gradle.kts。建议我创建一个buildSrc文件夹。 经过一番研究和索姆问,我找到了这篇文章I hated Gradle!...,所以这是我的尝试:

buildSrc树:

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

我的build.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,所以当我尝试实现和配置Jib时它不起作用,但是在build.gradle.kts中一切正常。

saraxiaoxi 回答:如何在buildSrc kotlin文件中配置Jib扩展?

  

我的问题是我找不到JibExtension

插件或扩展名可以通过各种不同的方式应用。您可以使用PluginManager的{​​{3}}方法对正在应用的插件进行“反应”:

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插件的withPlugin中找到了Jib,作者使用the source来完成任务,因此最好也使用相同的方法来配置这些任务。

例如,配置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")
                }
            }
        }
    }
}

上面使用了lazy configuration方法,该方法返回了named

然后只需按照此处记录的方法应用您的插件:TaskProvider


我曾经测试过的build.gradle.kts的来源:

plugins {
    `kotlin-dsl`
}

repositories {
    gradlePluginPortal()
}

dependencies {
    implementation("gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:1.7.0")
}
本文链接:https://www.f2er.com/3140958.html

大家都在问