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

标签 gradle 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 中一切正常。

最佳答案

My problem is that I can't find the JibExtension

插件或扩展可以以多种不同的方式应用。您可以使用 withPlugin 对正在应用的插件做出“ react ” 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"
                }
           }
        }
    }
}

查看the source在 Jib 的 Gradle 插件中,作者使用了 lazy configuration对于任务,因此最好也使用相同的方法来配置这些任务。

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

关于gradle - 如何在 buildSrc kotlin 文件中配置 Jib 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58758685/

相关文章:

java - 运行最新的 Jetty 版本会破坏我的构建

android - 如何使用具有多个 backstack 的导航组件实现具有相同行为的 3 个选项卡组合导航应用程序?

android - 元素共享的过渡有效,但是共享的多个元素不起作用[Android]

java - Maven Jib 插件 : 401 Unauthorized

angular - 如何在使用 jib 时创建 docker-compose.yml 文件?

java - Gradle build 不会处理印地语 unicode 字符

android - 具有外部依赖项定义的 Gradle DSL 中的关闭错误

android - 我的应用程序在 Android 10 上运行良好,但在所有其他 Android 版本上崩溃。在模拟器和真实设备上

java - 即使在 gradle 构建中排除后,Spring Boot DevTools 仍在 docker 容器内使用

android studio gradle 服务器配置