gradle - 使用 gradle plugin 配置另一个 gradle 插件

标签 gradle groovy kotlin gradle-plugin

我想实现一个 gradle 插件来改变 project.version根据插件的配置再使用修改后的project.version配置另一个 gradle 插件,例如用于构建容器。现在的问题是同时评估两种配置,因此对 project.version 的更改在配置第二个插件时未应用。

我搜索了 Gradle 文档,但没有发现任何关于我的问题。

构建.gradle

class VersionPluginExtension {
    String major
    String minor
    String patch
}

class VersionPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create('versionPlugin', VersionPluginExtension)
        project.afterEvaluate {
            project.version = "${extension.major}.${extension.minor}.${extension.patch}"
        }
        project.task('showVersion') {
            doLast {
                println "${project.version}"
            }
        }
    }
}

class ContainerPluginExtension {
    String version
}

class ContainerPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create('containerPlugin', ContainerPluginExtension)
        project.task('build') {
            doLast {
                println "${extension.version}"
            }
        }
    }
}

apply plugin: VersionPlugin
apply plugin: ContainerPlugin

versionPlugin {
    major = '1'
    minor = '1'
    patch = '1'
}

containerPlugin {
    version = project.version
}


我希望任务构建返回 1.1.1而不是 unspecified但我认为这是不可能的。我希望有人能指出我正确的方向。

谢谢!

最佳答案

移动version的定义来自 containerPlugin阻止插件定义:

class ContainerPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create('containerPlugin', ContainerPluginExtension)
        project.afterEvaluate {
            extension.version = project.version
        }
        project.task('build') {
            doLast {
                println "${extension.version}"
            }
        }
    }
}

结果 :
$ gradle build

> Task :build
1.1.1

关于gradle - 使用 gradle plugin 配置另一个 gradle 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378779/

相关文章:

maven - Gradle MavenDeployer覆盖 Artifact 版本命令行

groovy - Gradle WAR 插件 : how to find destination for files to copy

grails - 使用Grails Jenkins插件进行构建时执行脚本时出错?

java - 将 Kotlin 接口(interface)翻译成 Java

constructor - 如何在 init 方法之前将函数应用于数据类构造函数中定义的值?

kotlin - 为什么更高范围的产品对 kotlin 的回答结果为 0?

java - 使用 gradle 包含一个 jar

javascript - .js 文件中的特殊字符最初未正确显示

gradle - Apache Spark 和 gRPC

gradle - 如何在build.gradle中定义和调用自定义方法?