在gradle中动态设置存储库和版本/修订

时间:2015-11-11 15:38:34

标签: gradle ivy

我有一个gradle buildscript。在这个脚本中,我设置了一些出版物。

稍后在脚本中我有一个任务,它从文件中读取Buildnumber并增加它。比项目版本更改。

现在我的问题:初始化“发布”-PlugIn后是否可以更改修订版/版本?如果我没有设置新版本,“发布”-PlugIn将抛出n错误。如果我通过编辑描述符来更改版本,插件说,不允许直接编辑描述符。

我还想根据内部版本号更改repository-url。

有人知道修复或遇到同样的问题吗?

publishing {
    publications {
        ivy(IvyPublication) {
            organisation project.group
            module project.name
            revision project.version
            descriptor.status = 'milestone'

            from components.java

            artifact(sourceJar) {
                type "source"
                conf "runtime"
            }
        }
        maven(MavenPublication) {
            groupId project.group
            artifactId project.name
            version project.version

            from components.java
        }
    }
    repositories {
        ivy {
            // change to point to your repo, e.g. http://my.org/repo
            url "P:/Java/Repo/ivy"
        }
        maven {
            // change to point to your repo, e.g. http://my.org/repo
            url "P:/Java/Repo/maven"
        }
    }
}

这是我增加内部版本号的脚本

def incVersion(project) {

    project.versionInced = true

    def versionPropsFile = file("${project.rootDir}/version.properties")

    if (!versionPropsFile.canRead()) {
         versionPropsFile.createNewFile();
    }

    def Properties versionProps = new Properties()

    versionProps.load(new FileInputStream(versionPropsFile))

    if(versionProps['build_version'] == null)
    {
        versionProps['build_version'] = 0;
    }

    def code = versionProps['build_version'].toInteger()+1;

    versionProps['build_version']=code.toString()
    versionProps.store(versionPropsFile.newWriter(), null)

    project.projectInfos.version = project.version + "." + code.toString()
    project.version = project.projectInfos.version

    println "Version: "+project.version 

    return project.version
}

1 个答案:

答案 0 :(得分:1)

如果我理解得很好,可以动态地完成。您可以在通过项目属性(-P)或通过系统属性(-D)运行gradle时传递版本。

它将是:

gradle <some_task> -PsomeVersion=<version>

您需要更改gradle脚本才能读取属性,因此:

publishing {
    publications {
        ivy(IvyPublication) {
            revision project.hasProperty('someVersion') ? project.someVersion : '<HERE YOU NEED TO PUT DEFAULT VERSION OR MAYBE THROW EXCEPTION IF EMPTY>'
            //...
        }
    }
}

如果您不检查项目是否具有该属性(在项目实例上使用hasProperty方法),则会抛出MissingPropertyException