gradle动态计算发布版本

时间:2016-05-06 12:57:21

标签: gradle version-control

我希望在版本控制系统中自动化版本管理并发布相关工件。

因此我使用以下构建脚本(用于测试的简化版本)

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

只要我不在任务执行中更改版本属性,Everythings就可以正常工作。 (在createReleaseVersion任务中完成)

如果我更改了版本,则会使用正确的名称创建JAR文件,但发布时要根据旧版本使用该名称。

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

1 个答案:

答案 0 :(得分:0)

这是因为在您的任务执行之前配置了$str = "bob-2-4 asdfasdfasdf bob-2-4 asdfasdf bob-3-1"; my @unique = $str =~ m/(bob-\d-\d)/g; # array is now "bob-2-4, bob-2-4, bob-3-1"

我不确定在执行期间从您的任务更新publishing配置是否安全(您可以尝试)。解决此问题的更好方法是使用项目参数。例如,您可以像这样更改publishing

build.gradle

如果您只是运行任务,则版本为version = "13.7" if (!project.hasProperty('buildRelease')) { version += "-SNAPSHOT"; }

但是如果设置项目属性13.7-SNAPSHOT,则版本为buildRelease

在运行任务时设置项目属性使用13.7前缀,例如:

-P