2016-05-06 71 views
1

我想在版本控制系统中自动发布管理并发布相关的工件。gradle动态计算发布版本

所以我用下面的构建脚本(简化版本进行测试)

apply plugin: 'java' 
apply plugin: 'maven-publish' 

// --- Setup artifactory server repository --- 
    artifactory_contextUrl="http://vie2rhp02904" 
    artifactory_user="admin" 
    artifactory_password="..." 
    repositories { 
    maven { url "${artifactory_contextUrl}/libs-release" } 
    } 
// ------------------------------------------- 

defaultTasks 'doit' 

group = 'release-test' 

version = "13.7-SNAPSHOT" 

// --- Setup publishing parameters --- 
    publishing.repositories { 
    maven { 
     credentials { 
     username "${artifactory_user}" 
     password "${artifactory_password}" 
     } 
     if (project.version.endsWith('-SNAPSHOT')) { 
     url "${artifactory_contextUrl}/libs-snapshot-local" 
     } else { 
     url "${artifactory_contextUrl}/libs-release-local" 
     } 
    } 
    } 

    project.publishing.publications { 
    mavenJava(MavenPublication) { 
     from components.java 
    } 
    } 
// ------------------------------------------- 

task createReleaseVersion << { 
    println("Version at start: $version") 
    // Doing release management, which builds a tagged version without the "-SNAPSHOT" phrase 
    version = "13.7.0" 
    println("actual version: $version") 
} 

task doit (dependsOn: ['createReleaseVersion', 'publish']) << { 
} 

publish.mustRunAfter createReleaseVersion 

万物很好,只要我没有任务的执行中改变版本性质的作品。 (在createReleaseVersion完成任务)

如果我更改版本,JAR文件与正确的名称创建的,但出版要根据旧版本使用的名称。

如何使用在任务执行期间计算的版本进行发布?

回答

0

发生这种情况是因为publishing是在任务执行前配置的。

我不确定在执行过程中是否可以安全地更新publishing配置(可以尝试)。解决这个问题的更好方法是使用项目参数。例如,你可以改变build.gradle这样的:

version = "13.7" 
if (!project.hasProperty('buildRelease')) { 
    version += "-SNAPSHOT"; 
} 

如果你可以简单的运行任务,版本将13.7-SNAPSHOT

但是,如果你设置项目属性buildRelease,版本将是13.7

要设置项目属性使用-P前缀当您运行任务时,例如:

gradle publish -PbuildRelease=true 
+0

T为了你的回答,我知道原因是因为执行的顺序。 但我希望有一种解决方法。 后续配置编辑不被gradle允许。 (已经尝试过) 手动设置版本不会让我更进一步,因为此任务的主要原因是自动计算新版本。 我现在的woarkaround是使用批处理文件,它会调用gradle两次。我第一次更新gradle.properties文件中的版本属性,然后使用新版本来完成其余部分。 但我宁愿做它在一个呼叫 – Horst

+0

@Horst你可以把你的任务的代码我的if语句里面?您可以将其添加到问题中,以便我们可以看到发生了什么 – AdamSkywalker

+0

对不起,我不知道,你是什么意思?可以通过使用我的构建脚本调用“gradle doit”来重现我的问题。它以错误的(最初设置的)版本发布 – Horst