代码之家  ›  专栏  ›  技术社区  ›  Daniel Taub

如何在Gradle中获取下一个内部版本号

  •  27
  • Daniel Taub  · 技术社区  · 8 年前

    发布到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 ? 如果没有,我如何访问 常春藤 gradle的任务 蚂蚁 ?

    在我的 build.gradle 我打电话给 蚂蚁

    ant.importBuild 'build.xml'
    
    5 回复  |  直到 8 年前
        1
  •  10
  •   chenrui ravi ranjan    8 年前

    我认为Gradle中没有支持,但您可以尝试使用Ant任务。 https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build

    另一种方法是使用某种插件或自定义任务来管理版本。

        2
  •  9
  •   sricheta ruj    8 年前

    是的,您可以通过导入ant的构建从ant脚本访问ivy任务。gradle构建的xml文件。gradle文件。以下是执行此操作的语法。

    蚂蚁importBuild’build。xml'

    请参考: https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build

        3
  •  6
  •   Rostislav V    8 年前

    我建议您使用ResearchGate发布插件 https://github.com/researchgate/gradle-release 它有一个很好的文档。易于阅读。 另外,看看我是如何在我的个人项目中使用它的。 https://github.com/vatolinrp/bitcoin-esb/blob/master/build.gradle 这将是一个很好的例子。

        4
  •  5
  •   Daniel Taub    8 年前

    经过长时间的工作,我终于做到了。

    在我的 建筑格拉德尔 我添加了以下代码

    ant.importBuild 'build.xml'
    
    task getNextBuild(dependsOn : ivyBuildNumber) {
        doLast{
            def nextVersion = ant.properties['ivy.new.revision']
            println nextVersion
        }
    }
    

    我导入了我的 ant 并创建了一个调用 ivy buildnumber 任务

    这是我的

    <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 在内容上,,
    我导入了 常春藤。罐子 从我的根目录( lib/ivy.jar )

        5
  •  4
  •   jihor    7 年前
    • 对于这种行为 ,常春藤 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插件相当的捆绑版本,因此必须依赖插件。一个可靠的插件是 gradle-release 通过ResearchGate,另一个是 axion 前者是典型的Maven风格的版本控制,后者将SCM本身视为唯一的真理来源,消除了构建文件中的版本控制。但这两个插件都没有提供确切的请求行为。

    • 我个人的看法 版本控制问题最初是使用一些插件。由于我在工作中使用竹子作为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
    

    按下“释放”按钮时。例如,3.0分支的build 12将在二进制存储库中生成3.0.12版本。

    其优点是:

    +自动递增的版本号也免费提供
    +可以轻松发布自定义修订
    +没有插件意味着Gradle版本更新没有问题
    +这种方法非常简单,并且始终有效

    缺点是:
    -标记需要额外的脚本任务
    -显然,将跳过一些内部版本号(例如,3.5.76之后的下一个版本可以是3.5.84)

    推荐文章