Как получить следующий номер сборки в Gradle
есть ли способ получить следующую версию при публикации в репозитории в gradle?
например, если у меня версия 3.0.1
в моем репозитории я хочу, чтобы опубликованная версия была 3.0.2
.
ivy
есть задача ant
имени buildnumber
что делает именно это:
<project xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target name="ivyBuildNumber" description="Use ivy get the next build number">
<ivy:buildnumber
resolver="url-chain"
organisation="${ivy.organisation}"
module="${ivy.module}"
revision="${version.base}"/>
<echoproperties prefix="ivy.new."/>
</target>
есть ли способ сделать это в gradle
? если нет, как я могу получить доступ ivy
задачи от gradle ant
?
в своем build.gradle
Я взываю к ant
ant.importBuild 'build.xml'
5 ответов
Я не думаю, что есть поддержка в Gradle, но вы можете попробовать использовать Ant-задачу. https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build
другой способ сделать это-использовать какой-то плагин или настроить задачу для управления версией.
- плагин:https://github.com/researchgate/gradle-release
- пользовательских задач: https://www.tikalk.com/devops/increment-version-numbers-in-gradle/
Да, вы можете получить доступ к задачам ivy из сценария ant, импортировав сборку ant.xml-файл для сборки gradle.файл gradle. Ниже приведен синтаксис для этого.
ant.сборка importBuild.с XML'
обращайтесь : https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build
Я рекомендую вам использовать плагин ResearchGate release https://github.com/researchgate/gradle-release У него есть довольно документация. Легко читать. Кроме того, проверьте, как я использовал его в своем личном проекте. https://github.com/vatolinrp/bitcoin-esb/blob/master/build.gradle Это был бы хороший пример для вас.
после долгой работы мне удалось это сделать.
в своем построить.Gradle в я добавил следующий код
ant.importBuild 'build.xml'
task getNextBuild(dependsOn : ivyBuildNumber) {
doLast{
def nextVersion = ant.properties['ivy.new.revision']
println nextVersion
}
}
я импортировал мой ant
построить файл и создать задачу, которая вызывает ivy
buildnumber
задач.
вот мой построить.в XML
<project xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="ivyBuildNumber">
<path id="ivy.classpath" path="lib/ivy.jar" />
<typedef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.classpath" />
<ivy:buildnumber
organisation="daniel"
module="hello"/>
<echoproperties prefix="ivy.new."/>
</target>
</project>
потому что у моей IDE (Intellij) не было ivy.jar
на содержание
Я импортировал ivy.jar
из моего корневого каталога (lib/ivy.jar
)
-
для этого точного поведения, Плющева
buildnumber
задача может быть вызвана с помощью чистого Gradle без импорта сборки Ant:
configurations {
antTasks // define a new configuration
}
repositories {
mavenCentral()
}
dependencies {
antTasks("org.apache.ivy:ivy:2.4.0") // add Ivy library to it
}
ext {
// define the Ivy task, using the extra configuration as classpath extension
ant.taskdef(name: "ivyBuildNumber",
classname: "org.apache.ivy.ant.IvyBuildNumber",
classpath: configurations.antTasks.asPath)
ant.ivyBuildNumber(organisation: "daniel", module: "hello")
nextVersion = ant.properties["ivy.new.revision"]
}
task demo {
doLast {
println nextVersion
}
}
В общем, Gradle не имеет в комплекте эквивалента плагина Maven Release, поэтому приходится полагаться на Плагины. Один сплошной плагин ш -выпуск по ResearchGate, другой Аксион "Аллегро" технологий. Бывший классический Мэйвен стиле управлении последний принимает SCM как единственный источник истины, устраняя управление версиями в файлах сборки. Но ни один из этих плагинов не предоставляют точной поведение.
мое личное мнение по проблеме управления версиями изначально нужно было использовать некоторые плагины. Поскольку я использую Bamboo в качестве CI-сервера на работе, буквально все, что я делал с плагинами выпуска, используя Gradle, рано или поздно разбилось на CI-сервере. Это могло бы работать в течение нескольких недель, но каждый сервер обновление принесло некоторые проблемы. Я закончил использование SCM-менее подхода с простым соглашением: используйте имя ветви в качестве базовой версии, объедините его с номером сборки (оба значения предоставляются сервером CI):
ext {
branch = System.getProperty("branch", "develop")
buildNumber = System.getProperty("buildNumber", "latest")
isRelease = System.getProperty("isRelease", "false").toBoolean()
artifactVersion = "${branch}${(isRelease ? ".$buildNumber" : "-SNAPSHOT")}"
}
CI-сервер затем можно настроить для выполнения следующей команды
./gradlew -DisRelease=true -Dbranch=${git.branch} -DbuildNumber=${build.number} mavenPublish
когда кнопка "Release" нажата. Например, сборка 12 ветви 3.0 будет производить версию 3.0.12 в двоичном репозитории.
в преимуществами являются:
+ версия поставляется бесплатно, предполагая, что ветви названы соответственно
+ автоматически увеличенный номер сборки также поставляется бесплатно
+ можно легко публиковать пользовательские версии
+ отсутствие плагинов означает отсутствие проблем с обновлениями версии Gradle
+ этот подход смертельно прост и всегда работает
минусы:
- нет тегов (никаких изменений в SCM-нет ветвей выпуска и т. д.), но так как номер сборки всегда известно, что можно просмотреть ревизию в истории сборки CI
- некоторые номера сборки будут пропущены, очевидно (например, следующая версия после 3.5.76 может быть 3.5.84)