Как установить project.version, передав свойство версии в командной строке gradle?

Я хочу создать JAR с самоопределенной версией, переданной через командную строку, например:

Когда я выполняю задачу сборки gradle следующим образом:

gradle build -Pversion=1.0

myproject-1.0.jar должен быть сгенерирован.

Я попытался добавить строку ниже к build.gradle, но она не сработала:

version = project.hasProperty('version') ? project['version'] : '10.0.0'

Ответ 1

Вы не можете переопределить существующие свойства проекта из командной строки, посмотрите здесь. Поэтому попробуйте переименовать переменную версии в нечто отличное от версии и установите ее перед -P перед командой, например:

gradle -PprojVersion=10.2.10 build 

И затем в вашем файле build.gradle

if (project.hasProperty('projVersion')) {
  project.version = project.projVersion
} else {
  project.version = '10.0.0'
}

Или как вы это сделали?: operator

Ответ 2

Задайте свойство только в файле gradle.properties (т.е. удалите его из build.gradle). Также убедитесь, что параметры указаны перед командой (как упомянуто выше).

содержимое gradle.properties:

version=1.0.12

Версия может быть переопределена в командной строке с помощью:

gradle -Pversion=1.0.13 publish

Ответ 3

Если вы перемещаете запись version в файл gradle.properties, вы также можете:

gradle clean build -Dorg.gradle.project.version=1.1

Ответ 4

Если вам нужна версия по умолчанию, отличная от "неуказанная":

version = "${version != 'unspecified' ? version : 'your-default-version'}"

Пропустить версию через командную строку:

gradle build -P version=1.0

Ответ 5

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

Ответ 6

Вы можете передать версию проекта на cli с помощью -Pversion=..., если не установите ее в build.gradle. Если вам нужно пользовательское значение по умолчанию для случаев, когда в cli не передается версия, используйте файл gradle.properties, например, так: version=...

TL; DR: не устанавливайте версию в файле build.gradle, если вы хотите изменить ее позже через cli.