簡體   English   中英

使用gradle插件配置另一個gradle插件

[英]Use gradle plugin to configure another gradle plugin

我想實現一個gradle這個插件,它改變了project.version根據插件的配置,然后用更改project.version配置另一個gradle這個插件如建築容器。 現在的問題是兩個配置同時進行評估,因此在配置第二個插件時不會應用對project.version的更改。

我搜索Gradle文檔,但沒有發現我的問題。

的build.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

上述問題的解決方案如下所示:

class VersionPluginExtension {
    String major
    String minor
    String patch
    private String version

    String getVersion() {
        if (!version)
            return "${major}.${minor}.${patch}"
        return version
    }
}

class VersionPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create('versionPlugin', VersionPluginExtension)

        project.task('showVersion') {
            doLast {
                println "${extension.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'
}

project.version = versionPlugin.version

containerPlugin {
    version = project.version
}

結果:

> Configure project :
1.1.1

> Task :showVersion
1.1.1

> Task :build
1.1.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM