command-line - 如何从命令行定义 gradle 中的 teamcity ['build.number' ] 属性

标签 command-line properties gradle teamcity

有没有办法从命令行定义 teamcity['build.number'] 属性?我试过 -Pteamcity.build.number=1 但没有用。

我有一个包含此任务的 build.gradle 文件:

distTar {
    baseName = project.name+'.'+
                project.version+'.'+
                System.getProperty("system.rnf.brach_name")+'.'+
                teamcity['build.number']+'.'+
                teamcity['build.vcs.number.1']

    archiveName = baseName+'.tar'
    into(baseName) {
        from '.'
        include 'config/*'
        include 'run-script/*.sh'
    }

}

它适用于构建服务器,但它让所有开发人员都发疯了,因为我们的机器上没有安装 teamcity,并且任何 gradle 命令都会给我们一个错误:
$ gradle tasks

FAILURE: Build failed with an exception.

* Where:
Build file '/home/me/work/myproject/build.gradle' line: 31

* What went wrong:
A problem occurred evaluating root project 'myproject'.
> Could not find property 'teamcity' on task ':MyProject:distTar'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

最佳答案

鉴于您描述的场景 - 允许开发人员在他们的本地机器上运行构建,这也需要在 TeamCity 中运行 - 我发现这对我有用(TeamCity 7):

if (hasProperty("teamcity")) {
  version = teamcity["build.number"]
} else {
  version = '0.0-beta'
}

默认情况下,gradle 生成的 jar 文件将自动在其名称中使用“版本”。因此,使用 build.gradle 文件中的此代码,开发人员构建将具有标记为“0.0-beta”的工件,并且同一项目的 TeamCity 构建将获取 TeamCity 构建号。

但是,例如,如果您想向 list 添加信息,您将执行以下操作:
jar {
  manifest {
    attributes 'Implementation-Title': rootProject.name, 'Implementation-Version': version
  }
}

我希望这有帮助吗?

关于command-line - 如何从命令行定义 gradle 中的 teamcity ['build.number' ] 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189846/

相关文章:

linux - 如何制作脚本或程序来运行某些命令?

ant - 在 Ant 中设置 Ivy 主目录

Python:在对象列表中获取两个 bool 属性频率的最有效方法?

Android Studio 无法解析 : core , Activity , fragment

gradle - Gradle依赖图的真实示例是什么?

node.js - 从命令行运行 Node 包

ubuntu - 使用 unix 命令重命名图像的名称

shell - 如何在 macOS 上一行生成并复制 SSH key ?

python - 在 __init__ 中应用属性 setter 逻辑

gradle - 如何在gradle/groovy脚本中从xml模板生成groovy.lang.Closure