自定义Gradle插件中的getVersion()始终未指定

时间:2014-11-20 21:38:31

标签: gradle android-gradle

  

相关   How to Get $project.version in Custom Gradle Plugin?

自定义gradle插件中的

执行摘要: getVersion()返回“未指定”

我创建了一个自定义gradle插件,它将一些业务逻辑应用于我们的Android Studio / Gradle构建。每次我们进行CI构建时都会运行此插件。

我希望该插件能够在构建期间打印出其版本,该版本与正在构建的Android应用程序的版本号完全不同。 (在CI构建期间有用的调试信息)

插件的build.gradle(作为jar部署到maven repo):

buildscript {
    repositories {
        mavenCentral()
    }
}


apply plugin: 'groovy'
apply plugin: 'maven'

group = 'com.example.foo.gradle'
version = "0.0.12"

sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6

dependencies {
    repositories {
        mavenCentral()
    }

    compile gradleApi()
    compile localGroovy()
}



configurations {
    includeInJar
}

dependencies {
    //testCompile 'junit:junit:4.11'
}


jar {

}


uploadArchives {
    repositories.mavenDeployer {
        def deployPath = file(getProperty('aar.deployPath'))
        repository(url: "file://${deployPath.absolutePath}")
        pom.project {
            groupId project.group
            artifactId 'foo-gradle-jenkins'
            version project.version
        }
    }
}

...并且该插件应用于这样的Android应用程序(省略敏感部分):

buildscript {
    repositories {
        mavenCentral()
        maven {   url "../../../plugin_builds" }
    }
    dependencies {
        classpath 'com.example.foo.gradle:foo-gradle-jenkins:0.0.+'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'foo'


android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.example.android.examplegradleapplication3"
        minSdkVersion 14
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

在插件中,我尝试打印它的版本:

@Override
    void apply(Project project) { 

        project.configure(project) {
            if (it.hasProperty("android")) {

                if (isJenkinsBuild()) { 
                    log("Plugin version: " + getVersion()) 

                    // ...
                }

                // ...
            }
        }
    }

..但每当我执行Android应用程序的gradle构建时,它认为getVersion()未指定。

在使用它作为插件的另一个gradle构建时,我应该做什么来跟踪插件版本?

2 个答案:

答案 0 :(得分:1)

project.configure(project) { println getVersion() }println project.version相同。如果打印unspecified,则构建脚本不会设置(project.)version

从Gradle 2.2开始,插件无法声明或查询自己的版本,但您可以自己实现(对于您自己的插件)。

答案 1 :(得分:0)

AppExtension android = (AppExtension) project.extensions.findByName("android")
String versionName = android.defaultConfig.versionName
String versionCode = android.defaultConfig.versionCode