Gradle:如何从自定义插件设置版本

Gradle:如何从自定义插件设置版本,gradle,gradle-plugin,Gradle,Gradle Plugin,我已经编写了一个自定义插件(我的第一个插件),它管理一个“build number”,我想将其包含在build.gradle“version”中,如下所示: 不幸的是,我的插件从未运行过,因此返回的buildNumber为“null” 下面是我的身材 如果我运行“gradle showbuild”,我会看到正确的buildNumber 如果我运行“gradle showInfo”,则报告的内部版本号为“null” 不知何故,我需要让gradle在所有项目中设置“版本”值之前调用我的插件任务“bu

我已经编写了一个自定义插件(我的第一个插件),它管理一个“build number”,我想将其包含在build.gradle“version”中,如下所示:

不幸的是,我的插件从未运行过,因此返回的buildNumber为“null”

下面是我的身材

如果我运行“gradle showbuild”,我会看到正确的buildNumber

如果我运行“gradle showInfo”,则报告的内部版本号为“null”

不知何故,我需要让gradle在所有项目中设置“版本”值之前调用我的插件任务“buildInfoLoad”。自从我认识格拉德尔以来,我一直在努力解决这个问题

任何指点都将不胜感激

buildscript {
    repositories {
        maven {
            // Access to MangoGrove
            url uri('../repo')
        }
        maven { // aka "jcenter()"
            url "https://jcenter.bintray.com"
        }
    }

    dependencies {
        // Provide the "provided" and "optional" methods for dependencies
        classpath 'com.netflix.nebula:gradle-extra-configurations-plugin:3.0.3'

        classpath group: 'org.mangogrove.gradle',
                  name: 'MangoGrove',
                  version: '1.0.0-SNAPSHOT'
    }
}

apply plugin: 'org.mangogrove.gradle'

task showbuild(dependsOn: 'buildInfoLoad') << {
    println("BI build number: $buildinfo.buildNumber")
    println("BI build time: $buildinfo.buildTime")
}

task createbuild(dependsOn: 'buildInfoCreate') << {
    println("BI build number: $buildinfo.buildNumber")
    println("BI build time: $buildinfo.buildTime")
}

allprojects {
    ext {
        buildNumber = "$buildinfo.buildNumber"
    }
    version = "1.0.0.${buildNumber}-alpha2"
    //version = "1.0.0.${buildinfo.buildNumber}-alpha2"

    apply plugin: 'eclipse'

    eclipse {
        classpath {
            downloadSources=true
            //downloadJavadoc=true
        }
    }

}

task showInfo << {
    println("Product Version is $version")  
    println("Product BuildNumber is $buildNumber")
}
buildscript{
存储库{
马文{
//进入芒果林
url uri('../repo')
}
maven{//aka“jcenter()”
url“https://jcenter.bintray.com"
}
}
依赖关系{
//为依赖项提供“提供”和“可选”方法
classpath'com.netflix.nebula:gradle额外配置插件:3.0.3'
类路径组:“org.mangogrove.gradle”,
名称:'芒果林',
版本:“1.0.0-SNAPSHOT”
}
}
应用插件:“org.mangogrove.gradle”

任务showbuild(dependsOn:'buildInfoLoad')插件中的哪个任务生成了版本号?如果您的代码位于github之类的公共repo上,您可以将其链接到“buildInfoLoad”任务加载buildinfo.buildNumber和buildinfo.buildTime值。您的插件是否具有应用函数?是的,我的插件调用apply()。如果运行“gradle showbuild”或“gradle createbuild”,插件本身工作正常。问题是,当我将项目设置为“版本”时,插件任务“buildInfoLoad”还没有被调用。因此$buildinfo.buildNumber尚未设置。那么,在我设置“version=”1.2.3.${buildinfo.buildNumber}之前,我如何告诉gradle运行我的“buildInfoLoad”任务呢?我询问关于apply的问题,因为,您如何在apply()函数中设置您的构建编号?apply发生在应用插件时,我相信这是构建生命周期的早期,当然是在您运行任何其他任务之前。
buildscript {
    repositories {
        maven {
            // Access to MangoGrove
            url uri('../repo')
        }
        maven { // aka "jcenter()"
            url "https://jcenter.bintray.com"
        }
    }

    dependencies {
        // Provide the "provided" and "optional" methods for dependencies
        classpath 'com.netflix.nebula:gradle-extra-configurations-plugin:3.0.3'

        classpath group: 'org.mangogrove.gradle',
                  name: 'MangoGrove',
                  version: '1.0.0-SNAPSHOT'
    }
}

apply plugin: 'org.mangogrove.gradle'

task showbuild(dependsOn: 'buildInfoLoad') << {
    println("BI build number: $buildinfo.buildNumber")
    println("BI build time: $buildinfo.buildTime")
}

task createbuild(dependsOn: 'buildInfoCreate') << {
    println("BI build number: $buildinfo.buildNumber")
    println("BI build time: $buildinfo.buildTime")
}

allprojects {
    ext {
        buildNumber = "$buildinfo.buildNumber"
    }
    version = "1.0.0.${buildNumber}-alpha2"
    //version = "1.0.0.${buildinfo.buildNumber}-alpha2"

    apply plugin: 'eclipse'

    eclipse {
        classpath {
            downloadSources=true
            //downloadJavadoc=true
        }
    }

}

task showInfo << {
    println("Product Version is $version")  
    println("Product BuildNumber is $buildNumber")
}