如何通过在gradle命令行上传递version属性来设置project.version?

pat*_*ide 28 java groovy gradle

我想用命令行传递的自定义版本构建JAR,例如:

当我像这样执行gradle构建任务时:

gradle build -Pversion=1.0
Run Code Online (Sandbox Code Playgroud)

应该生成myproject-1.0.jar.

我尝试将下面的行添加到build.gradle中,但它不起作用:

version = project.hasProperty('version') ? project['version'] : '10.0.0'
Run Code Online (Sandbox Code Playgroud)

小智 54

我发现您需要在gradle.properties文件中设置属性,并在build.gradle中引用它以使上述解决方案起作用.还要确保选项出现在命令之前(如上所述).

gradle.properties内容:

version=1.0.12
Run Code Online (Sandbox Code Playgroud)

然后可以在命令行上覆盖版本:

gradle -Pversion=1.0.13 publish
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上与 2015 年 9 月 Opal 的答案重复。我猜这个答案得到了更多的赞成票,因为“org.gradle.project.version”太长了。 (3认同)
  • @FranklinYu这个答案实际上更完整:它记录了如何在`gradle.properties`中编写`version`(不需要测试`version: 1.0.12`或`version = "1.0.12"的有效性` 或您可以快速想出的任何其他变体)。 (3认同)
  • 这是最好的答案,可以轻松重现,而不会弄乱每个 build.gradle 脚本。 (2认同)

Sta*_*lav 22

您无法从命令行覆盖现有项目属性,请查看此处.因此,尝试将版本变量重命名为与版本不同的版本,并-P在命令之前使用flag 设置它,如:

gradle -PprojVersion=10.2.10 build 
Run Code Online (Sandbox Code Playgroud)

然后在你的build.gradle中

if (project.hasProperty('projVersion')) {
  project.version = project.projVersion
} else {
  project.version = '10.0.0'
}
Run Code Online (Sandbox Code Playgroud)

或者像使用?:运算符一样

  • 或者:`project.version = project.findProperty('projVersion')?:'10 .0.0'` (3认同)
  • 或`version = findProperty'projVersion'?:'10 .0.0'`(如果您重视简洁性) (2认同)

Opa*_*pal 9

如果您将version条目移至gradle.properties文件,您还可以:

gradle clean build -Dorg.gradle.project.version=1.1
Run Code Online (Sandbox Code Playgroud)

  • `-Dorg.gradle.project.version`是很长的方式:-)它实际上足以提供`-Pversion = 1.1`. (4认同)

Bia*_*ing 6

如果您需要"未指定"以外的默认版本:

version = "${version != 'unspecified' ? version : 'your-default-version'}"
Run Code Online (Sandbox Code Playgroud)

通过命令行传递版本:

gradle build -P version=1.0
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 6

-Pversion=...只要您不在build.gradle 中设置它,您就可以在 cli 上传递项目版本。如果在 cli 上没有传递版本时需要自定义默认值,请使用gradle.properties文件,如下所示:version=...

TL;DR:如果您想稍后通过 cli 更改它,请不要在build.gradle文件中设置版本。


Aja*_*jax 5

version = (findProperty('version') == 'unspecified') ? '0.1' : version